301 Moved Permanently means that the requested resource has been permanently moved to a new URL. All future requests should use the new address.
The browser will automatically redirect the user to the new address, and search engines will update their indexes.
302 Found indicates that the requested resource is temporarily available at a different URL.
The user is automatically redirected to the new URL, but search engines continue to index the old address.
200 OK is a standard successful HTTP server response. It means that the client’s request (e.g., from a browser) was successfully processed, and the server is delivering the requested data.
The user receives content without errors, and the page or application functions properly. If Code 200 is accompanied by data, the browser or program processes and displays it to the user.
GET / HTTP/1.1 Host: habr.com Accept: */* User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
<!DOCTYPE html> <html lang="en"> <head> <title>Publications / My feed / Habr</title> <link rel="image_src" href="/img/habr_en.png" data-hid="2a79c45"> <link href="https://habr.com/en/feed/" rel="canonical" data-hid="e3fa780"> <meta itemprop="image" content="/img/habr_en.png"> <meta property="og:image" content="/img/habr_en.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="630"> <meta property="aiturec:image" content="/img/habr_en.png"> <meta name="twitter:image" content="/img/habr_en.png"> <meta property="vk:image" content="/img/habr_en.png?format=vk"> <meta property="fb:app_id" content="444736788986613"> <meta property="fb:pages" content="472597926099084"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@habr_eng"> <meta property="og:locale" content="en_US"> <meta property="og:type" content="website"> <meta property="og:site_name" content="Habr"> <meta property="og:title" content="Habr"> <meta property="og:url" content="https://habr.com/en/feed/"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,viewport-fit=cover,maximum-scale=1,user-scalable=0"> <meta name="referrer" content="unsafe-url"> <style> /* cyrillic-ext */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9E4kDNxMZdWfMOD5VvmojLazX3dGTP.woff2) format('woff2'); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; } /* cyrillic */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9E4kDNxMZdWfMOD5Vvk4jLazX3dGTP.woff2) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } /* latin-ext */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9E4kDNxMZdWfMOD5VvmYjLazX3dGTP.woff2) format('woff2'); unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 400; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9E4kDNxMZdWfMOD5Vvl4jLazX3dA.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } /* cyrillic-ext */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 500; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9B4kDNxMZdWfMOD5VnZKveSxf6Xl7Gl3LX.woff2) format('woff2'); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; } /* cyrillic */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 500; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9B4kDNxMZdWfMOD5VnZKveQhf6Xl7Gl3LX.woff2) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } /* latin-ext */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 500; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9B4kDNxMZdWfMOD5VnZKveSBf6Xl7Gl3LX.woff2) format('woff2'); unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 500; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9B4kDNxMZdWfMOD5VnZKveRhf6Xl7Glw.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } /* cyrillic-ext */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 700; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9B4kDNxMZdWfMOD5VnLK3eSxf6Xl7Gl3LX.woff2) format('woff2'); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; } /* cyrillic */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 700; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9B4kDNxMZdWfMOD5VnLK3eQhf6Xl7Gl3LX.woff2) format('woff2'); unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } /* latin-ext */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 700; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9B4kDNxMZdWfMOD5VnLK3eSBf6Xl7Gl3LX.woff2) format('woff2'); unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @font-face { font-family: 'Fira Sans'; font-style: normal; font-weight: 700; font-display: swap; src: url(https://fonts.gstatic.com/s/firasans/v17/va9B4kDNxMZdWfMOD5VnLK3eRhf6Xl7Glw.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } </style> <link rel="preload" href="https://assets.habr.com/habr-web/css/theme/light-v1.css" as="style" media="(prefers-color-scheme: light)" /><link rel="preload" href="https://assets.habr.com/habr-web/css/theme/dark-v1.css" as="style" media="(prefers-color-scheme: dark)" /><link id="light-colors" rel="stylesheet" href="https://assets.habr.com/habr-web/css/theme/light-v1.css" media="(prefers-color-scheme: light)" /><link id="dark-colors" rel="stylesheet" href="https://assets.habr.com/habr-web/css/theme/dark-v1.css" media="(prefers-color-scheme: dark)" /> <script>window.i18nFetch = new Promise((res, rej) => { const xhr = new XMLHttpRequest(); xhr.open('GET', '/js/i18n/en-compiled.9456e3194c9e7eb59ee887b06d5642a5.json'); xhr.responseType = 'json'; xhr.onload = function(e) { if (this.status === 200) { res({en: xhr.response}); } else { rej(e); } }; xhr.send(); });</script> <style> .grecaptcha-badge { visibility: hidden; } </style> <meta name="habr-version" content="2.242.1"> <meta name="apple-mobile-web-app-status-bar-style" content="#303b44"> <meta name="msapplication-TileColor" content="#629FBC"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes"> <link rel="shortcut icon" type="image/png" sizes="16x16" href="https://assets.habr.com/habr-web/img/favicons/favicon-16.png"> <link rel="shortcut icon" type="image/png" sizes="32x32" href="https://assets.habr.com/habr-web/img/favicons/favicon-32.png"> <link rel="apple-touch-icon" type="image/png" sizes="76x76" href="https://assets.habr.com/habr-web/img/favicons/apple-touch-icon-76.png"> <link rel="apple-touch-icon" type="image/png" sizes="120x120" href="https://assets.habr.com/habr-web/img/favicons/apple-touch-icon-120.png"> <link rel="apple-touch-icon" type="image/png" sizes="152x152" href="https://assets.habr.com/habr-web/img/favicons/apple-touch-icon-152.png"> <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="https://assets.habr.com/habr-web/img/favicons/apple-touch-icon-180.png"> <link rel="apple-touch-icon" type="image/png" sizes="256x256" href="https://assets.habr.com/habr-web/img/favicons/apple-touch-icon-256.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="https://assets.habr.com/habr-web/img/splashes/splash_1136x640.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="https://assets.habr.com/habr-web/img/splashes/splash_2436x1125.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="https://assets.habr.com/habr-web/img/splashes/splash_1792x828.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="https://assets.habr.com/habr-web/img/splashes/splash_828x1792.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="https://assets.habr.com/habr-web/img/splashes/splash_1334x750.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="https://assets.habr.com/habr-web/img/splashes/splash_1242x2668.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="https://assets.habr.com/habr-web/img/splashes/splash_2208x1242.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="https://assets.habr.com/habr-web/img/splashes/splash_1125x2436.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="https://assets.habr.com/habr-web/img/splashes/splash_1242x2208.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="https://assets.habr.com/habr-web/img/splashes/splash_2732x2048.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)" href="https://assets.habr.com/habr-web/img/splashes/splash_2688x1242.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="https://assets.habr.com/habr-web/img/splashes/splash_2224x1668.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="https://assets.habr.com/habr-web/img/splashes/splash_750x1334.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="https://assets.habr.com/habr-web/img/splashes/splash_2048x2732.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="https://assets.habr.com/habr-web/img/splashes/splash_2388x1668.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="https://assets.habr.com/habr-web/img/splashes/splash_1668x2224.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="https://assets.habr.com/habr-web/img/splashes/splash_640x1136.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="https://assets.habr.com/habr-web/img/splashes/splash_1668x2388.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)" href="https://assets.habr.com/habr-web/img/splashes/splash_2048x1536.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="https://assets.habr.com/habr-web/img/splashes/splash_1536x2048.png"> <link rel="mask-icon" color="#77a2b6" href="https://assets.habr.com/habr-web/img/favicons/apple-touch-icon-120.svg"> <link crossorigin="use-credentials" href="/manifest.webmanifest" rel="manifest"> <script async src="https://unpkg.com/pwacompat" crossorigin="anonymous"></script> <script>window.yaContextCb = window.yaContextCb || []</script> <script src="https://yandex.ru/ads/system/context.js" async></script> <link rel="preload" href="https://assets.habr.com/habr-web/css/chunk-vendors.04465f7c.css" as="style"><link rel="preload" href="https://assets.habr.com/habr-web/js/chunk-vendors.2cea9754.js" as="script"><link rel="preload" href="https://assets.habr.com/habr-web/css/app.71fac777.css" as="style"><link rel="preload" href="https://assets.habr.com/habr-web/js/app.e98f8fcb.js" as="script"><link rel="preload" href="https://assets.habr.com/habr-web/css/page-my-feed.e3725605.css" as="style"><link rel="preload" href="https://assets.habr.com/habr-web/js/page-my-feed.88444767.js" as="script"><link rel="stylesheet" href="https://assets.habr.com/habr-web/css/chunk-vendors.04465f7c.css"><link rel="stylesheet" href="https://assets.habr.com/habr-web/css/app.71fac777.css"><link rel="stylesheet" href="https://assets.habr.com/habr-web/css/page-my-feed.e3725605.css"></head> <body> <div id="mount"><div id="app"><div class="tm-layout__wrapper"><!--[--><!----><div></div><!----><header class="tm-header" data-test-id="header"><div class="tm-page-width"><!--[--><div class="tm-header__container"><!----><span class="tm-header__logo-wrap"><a class="tm-header__logo tm-header__logo_hl-en tm-header__logo" href="/en/"><svg class="tm-svg-img tm-header__icon" height="16" width="16"><title>Habr</title><use xlink:href="/img/habr-logo-en.svg#logo"></use></svg></a><span style="display:none;" class="tm-header__beta-sign">β</span></span><!--[--><!----><a href="/en/sandbox/start/" class="tm-header__become-author-btn">How to become an author</a><!----><!----><!--]--><!----></div><!--]--></div></header><div class="tm-layout"><div class="tm-page-progress-bar"></div><div class="tm-base-layout__header_is-sticky tm-base-layout__header" data-menu-sticky="true"><div class="tm-page-width"><!--[--><div class="tm-base-layout__header-wrapper"><div class="tm-main-menu"><div class="tm-main-menu__section"><nav class="tm-main-menu__section-content"><!--[--><a class="tm-main-menu__item tm-main-menu__item_active" data-test-id="main-menu-item" href="/en/feed/">My feed</a><!--]--><!--[--><a class="tm-main-menu__item" href="/en/articles/">All streams</a><!--]--><!--[--><!--[--><a class="tm-main-menu__item" data-test-id="main-menu-item" href="/ru/flows/develop/">Development</a><!--]--><!--[--><a class="tm-main-menu__item" data-test-id="main-menu-item" href="/ru/flows/admin/">Administrating</a><!--]--><!--[--><a class="tm-main-menu__item" data-test-id="main-menu-item" href="/ru/flows/design/">Design</a><!--]--><!--[--><a class="tm-main-menu__item" data-test-id="main-menu-item" href="/ru/flows/management/">Management</a><!--]--><!--[--><a class="tm-main-menu__item" data-test-id="main-menu-item" href="/ru/flows/marketing/">Marketing</a><!--]--><!--[--><a class="tm-main-menu__item" data-test-id="main-menu-item" href="/ru/flows/popsci/">PopSci</a><!--]--><!--]--></nav></div></div><div class="tm-header-user-menu tm-base-layout__user-menu"><a href="/en/search/" class="tm-header-user-menu__item tm-header-user-menu__search" data-test-id="search-button"><svg class="tm-svg-img tm-header-user-menu__icon tm-header-user-menu__icon_search tm-header-user-menu__icon_dark" height="24" width="24"><title>Search</title><use xlink:href="/img/megazord-v28.7909a852..svg#search"></use></svg></a><!----><!----><div class="tm-header-user-menu__item tm-header-user-menu__write"><div><svg class="tm-svg-img tm-header-user-menu__icon tm-header-user-menu__icon_write tm-header-user-menu__icon_dark" height="24" width="24"><title>Write a publication</title><use xlink:href="/img/megazord-v28.7909a852..svg#write"></use></svg></div><!----></div><!--[--><div class="tm-header-user-menu__item"><button class="tm-header-user-menu__toggle" data-test-id="user-menu-settings"><svg class="tm-svg-img tm-header-user-menu__icon tm-header-user-menu__icon_dark" height="24" width="24"><title>Settings</title><use xlink:href="/img/megazord-v28.7909a852..svg#page-settings"></use></svg></button></div><a href="https://habr.com/kek/v1/auth/habrahabr/?back=/en/feed/&hl=en" rel="nofollow" class="tm-header-user-menu__item"><!--[--><button class="btn btn_solid btn_small tm-header-user-menu__login" type="button"><!--[-->Login<!--]--></button><!--]--></a><!--]--><!----><!--teleport start--><!--teleport end--><!----></div></div><!--]--></div></div><!----><div class="tm-page-width"><!--[--><!--]--></div><main class="tm-layout__container"><div class="tm-page my-feed-page" data-async-called="true" style="--5ab2e5a8:16px;--44c4f6f6:100%;--45ba7a3b:0;"><div class="tm-page-width"><!--[--><!----><div class="tm-page__wrapper"><div class="tm-page__main_has-sidebar tm-page__main"><div class="pull-down"><!----><div class="pull-down__header" style="height:0px;"><div class="pull-down__content" style="bottom:10px;"><svg class="tm-svg-img pull-down__icon pull-down__arrow" height="24" width="24"><title>Pull to refresh</title><use xlink:href="/img/megazord-v28.7909a852..svg#pull-arrow"></use></svg></div></div><!--[--><!--[--><!----><div class="tm-page__top"><div class="my-feed-page__header-wrapper"><div class="tm-section-name"><h1 class="tm-section-name__text">My feed</h1><!--[--><!--]--></div><!----></div><div class="tm-navigation-filters-spoiler my-feed-filter"><div class="tm-navigation-filters-spoiler__wrapper"><button class="tm-navigation-filters-spoiler__button" data-test-id="nav-filters-button" type="button"><!--[-->Feed settings<!--]--><svg class="tm-svg-img icon_dropdown-arrow" height="16" width="16"><title>Dropdown</title><use xlink:href="/img/megazord-v28.7909a852..svg#arrow-down"></use></svg></button><!--[--><!--]--></div><div class="tm-navigation-filters-spoiler__content" style=""><!--[--><form class="my-feed-filter__form"><fieldset class="my-feed-filter__section"><legend class="my-feed-filter__section-legend">Type</legend><div class="my-feed-filter__types"><!--[--><label class="selection-label"><!--[--><span class="tm-base-checkbox"><input class="tm-base-checkbox__input visually-hidden" indeterminate="false" name="types" tabindex="0" type="checkbox" value="articles" checked><span class="tm-base-checkbox__figure"></span></span><!--]--><span class="selection-label__text">Articles</span></label><label class="selection-label"><!--[--><span class="tm-base-checkbox"><input class="tm-base-checkbox__input visually-hidden" indeterminate="false" name="types" tabindex="0" type="checkbox" value="posts" checked><span class="tm-base-checkbox__figure"></span></span><!--]--><span class="selection-label__text">Posts</span></label><label class="selection-label"><!--[--><span class="tm-base-checkbox"><input class="tm-base-checkbox__input visually-hidden" indeterminate="false" name="types" tabindex="0" type="checkbox" value="news" checked><span class="tm-base-checkbox__figure"></span></span><!--]--><span class="selection-label__text">News</span></label><!--]--></div></fieldset><fieldset class="my-feed-filter__section"><legend class="my-feed-filter__section-legend">Rating limit</legend><div class="my-feed-filter__group"><!--[--><label class="radio-like-button"><input id="radio-score-all" checked class="radio-like-button__input visually-hidden" name="score" tabindex="0" type="radio" value="all"><span class="radio-like-button__button"><!--[-->All<!--]--></span></label><label class="radio-like-button"><input id="radio-score-0" class="radio-like-button__input visually-hidden" name="score" tabindex="0" type="radio" value="0"><span class="radio-like-button__button"><!--[-->≥0<!--]--></span></label><label class="radio-like-button"><input id="radio-score-10" class="radio-like-button__input visually-hidden" name="score" tabindex="0" type="radio" value="10"><span class="radio-like-button__button"><!--[-->≥10<!--]--></span></label><label class="radio-like-button"><input id="radio-score-25" class="radio-like-button__input visually-hidden" name="score" tabindex="0" type="radio" value="25"><span class="radio-like-button__button"><!--[-->≥25<!--]--></span></label><label class="radio-like-button"><input id="radio-score-50" class="radio-like-button__input visually-hidden" name="score" tabindex="0" type="radio" value="50"><span class="radio-like-button__button"><!--[-->≥50<!--]--></span></label><label class="radio-like-button"><input id="radio-score-100" class="radio-like-button__input visually-hidden" name="score" tabindex="0" type="radio" value="100"><span class="radio-like-button__button"><!--[-->≥100<!--]--></span></label><!--]--></div></fieldset><fieldset class="my-feed-filter__section"><legend class="my-feed-filter__section-legend">Level of difficulty</legend><div class="my-feed-filter__group"><!--[--><label class="radio-like-button"><input id="radio-complexity-all" checked class="radio-like-button__input visually-hidden" name="complexity" tabindex="0" type="radio" value="all"><span class="radio-like-button__button"><!--[-->All<!--]--></span></label><label class="radio-like-button"><input id="radio-complexity-easy" class="radio-like-button__input visually-hidden" name="complexity" tabindex="0" type="radio" value="easy"><span class="radio-like-button__button"><!--[-->Easy<!--]--></span></label><label class="radio-like-button"><input id="radio-complexity-medium" class="radio-like-button__input visually-hidden" name="complexity" tabindex="0" type="radio" value="medium"><span class="radio-like-button__button"><!--[-->Medium<!--]--></span></label><label class="radio-like-button"><input id="radio-complexity-hard" class="radio-like-button__input visually-hidden" name="complexity" tabindex="0" type="radio" value="hard"><span class="radio-like-button__button"><!--[-->Hard<!--]--></span></label><!--]--></div></fieldset><div class="my-feed-filter__banner"><div class="tm-user-notice tm-user-notice tm-user-notice_variant-warning tm-user-notice_bordered tm-user-notice_noMargins"><div class="tm-user-notice__icon-wrapper"><svg class="tm-svg-img tm-user-notice__icon" height="24" width="24"><title>Warning</title><use xlink:href="/img/megazord-v28.7909a852..svg#user-notice-warning"></use></svg></div><div class="tm-user-notice__container"><!----><!----><!--[--><!--[-->To set up filters <!--[--><a href="https://habr.com/kek/v1/auth//habrahabr/?back=/en/feed/&hl=en" rel="nofollow">sign in</a><!--]--> or <!--[--><a href="https://habr.com/kek/v1/auth//habrahabr-register/?back=/en/feed/&hl=en" rel="nofollow">sign up</a><!--]--><!--]--><!--]--></div><!----></div></div><button class="btn btn_solid btn_small tm-button tm-button_color-christi" disabled type="button" data-test-id="nav-filters-apply"><!--[--><!--[-->Apply<!--]--><!--]--></button></form><!--]--></div></div></div><div><!--[--><div class="tm-articles-list" data-test-id="articles-list"><!--[--><!--[--><!----><article id="909716" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/NiyazUp/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="NiyazUp"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/bdd/5dd/bbb/bdd5ddbbb5b41fe6bc00c90b7aecc912.png" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/NiyazUp/" class="tm-user-info__username">NiyazUp <!----></a><!--[--><a href="/en/articles/909716/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-05-17T12:20:51.000Z" title="2025-05-17, 15:20">5 hours ago</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/909716/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>Что такое EBITDA простыми словами: зачем он нужен и как его посчитать</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><!----><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">6 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="99">99</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/finance/" class="tm-publication-hub__link"><!--[--><span>Finance in IT</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/pm/" class="tm-publication-hub__link"><!--[--><span>Project management</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/startuprise/" class="tm-publication-hub__link"><!--[--><span>Start-up development</span><!----><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><!----><!--[--><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w780/getpro/habr/upload_files/a52/d9c/352/a52d9c352c35c39c715272b4518383f6.jpg" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>Многие предприниматели знают выручку, но не знают, сколько бизнес реально зарабатывает. В этой статье всё про EBITDA: что это такое, зачем и кому нужен.</p></div></div><!----><!----></div><a href="/en/articles/909716/" class="tm-article-snippet__readmore"><!--[--><span>Читать далее</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Total votes 1: ↑1 and ↓0</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_positive tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value" title="Total votes 1: ↑1 and ↓0">+1</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">1</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/909716/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="909080" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/profleaddev/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="profleaddev"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/850/f1c/026/850f1c026e8139b72b529e7eafd76ac2.jpg" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/profleaddev/" class="tm-user-info__username">profleaddev <!----></a><!--[--><a href="/en/articles/909080/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-05-13T14:36:22.000Z" title="2025-05-13, 17:36"> May 13 at 17:36</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/909080/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>VS Code Agent Mode: How It Helped Me Build a Django App in Minutes</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">4 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="660">660</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/programming/" class="tm-publication-hub__link"><!--[--><span>Programming</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/artificial_intelligence/" class="tm-publication-hub__link"><!--[--><span>Artificial Intelligence</span><!----><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-tutorial" data-v-9fa2fafc><span>Tutorial</span></div><!--[--><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/02a/3ad/95f/02a3ad95f43e6a6dfb30de7bcc04762b.png" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>I’ve recently been playing with Agent Mode in VS Code, which looks promising. If you’re using VS Code and want to give your development a turbo boost, you’ll want to hear about this.</p></div></div><!----><!----></div><a href="/en/articles/909080/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Rating</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value">0</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">0</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/909080/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="908756" class="tm-articles-list__item tm-articles-list__item_no-padding" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-post-snippet"><!--[--><div class="publication-type-label publication-type-label_type-post"><span class="publication-type-label__label publication-type-label__label_type-post">Post</span></div><!--]--><div class="tm-post-snippet__meta"><span class="tm-user-info tm-post-author-info"><a href="/en/users/YuriPanchul/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="YuriPanchul"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="36" src="//habrastorage.org/getpro/habr/avatars/0a9/21b/7c1/0a921b7c13a624616c9da17b980b69a9.jpg" width="36"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-post" data-test-id="user-info-description"><a href="/en/users/YuriPanchul/" class="tm-user-info__username">YuriPanchul <!----></a><!--[--><div class="tm-post-author-info__meta-row"><a href="/en/posts/908756/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-05-12T16:24:43.000Z" title="2025-05-12, 19:24"> May 12 at 19:24</time><!--]--></a><span class="tm-icon-counter"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="5620">5.6K</span></span></div><!--]--></span></span><!----></div><div class="tm-publication-hubs__container tm-post-snippet__hubs"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/machine_learning/posts/" class="tm-publication-hub__link"><!--[--><span>Machine learning</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/fpga/posts/" class="tm-publication-hub__link"><!--[--><span>FPGA</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/controllers/posts/" class="tm-publication-hub__link"><!--[--><span>Programming microcontrollers</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/edu/posts/" class="tm-publication-hub__link"><!--[--><span>Education abroad</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/artificial_intelligence/posts/" class="tm-publication-hub__link"><!--[--><span>Artificial Intelligence</span><!----><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><!----><!--[--><!--]--><!--]--></div></div><div class="tm-post-snippet__content-wrapper tm-post-snippet__content-wrapper_hide_gradient"><!----><div class="tm-post-snippet__content"><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>У меня есть знакомый энтузиаст LLM, который также изучает верилог. Я попросил его написать инструкцию к упражнению с неким сенсором, который он интегрировал. Он разумеется сбросил это на LLM, я почитал и понял, что LLM нужно запретить как распостранение Экстази и "солей" среди молодежи. Точно так же как "дизайнерские наркотики" дают ощущение счастья и достижения без труда, сгенеренная LLM документация выглядит как реальная, вот только читателю она не поможет.</p><p>Что нужно читателю? Картинку как подцепить сенсор к плате, временную диаграмму сигналов которые от него выходят и пару слов про проблемы, которые у него возникнут (дребезг) и как их стоит решать. Так чтобы было достаточно информации, чтобы сесть и написать код на верилоге.</p><p>Что выдал LLM? Сначала пять абзацев мутного словестного описания что "изменения переключателей проходят некоторую последовательность, позволяющую определить направление", с галлюцинациями что движется и что неподвижно. Потом не имеющую отношения к задаче информацию, из каких материалов делаются эти сенсоры в разных странах мира, чтобы быть дешевыми для хоббистов и образовательных учреждений. Далее про разные способы решения проблемы дребезга, в том числе способы, не имеющие отношения к данной ситуации. И наконец, куски определения пинов из QSF и XDC файлов из случайных примеров в интернете, которые не имеют отношения к описанному примеру, так как в нем во-первых эти файлы не используются (другой вендор, другой способ задания пинов), а во-вторых, в нем эта часть проекта абстрагирована (пользователю вообше это не нужно это делать).</p><p>То есть текст просто водит читателя за нос, не давая ему никакой полезной информации для решения проблемы. Но даже это не важно, потому что читатель этот текст читать не будет, так как учует LLM в заголовке и убедится в третьем предложении, после чего перестанет читать. Текст является иллюстрацией терминов "сделать на отцепись" и "из дерьма и палок".</p><p>UPD: И самое страшное: это 27 страниц вместо 1 страницы полезной инструкции, которую я ожидал. ДВАДЦАТЬ СЕМЬ СТРАНИЦ ЛАБУДЫ !!!</p><p>Я хочу обратно в годы, когда этого ужаса не было. Нашу цивилизацию ждут тяжелые времена. Я уже видел в ЖЖ посты агитирующие на перевод всей порноиндустрии на generative AI.</p></div></div><!----><!----></div><div></div></div></div><div class="tm-separated-list tm-separated-list_clipped tm-post-snippet__meta-list"><span class="tm-separated-list__title">Tags:</span><ul class="tm-separated-list__list"><!--[--><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[ChatGPT]" class="tm-tags-list__link"><span>ChatGPT</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[Groq]" class="tm-tags-list__link"><span>Groq</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[DeepSeek]" class="tm-tags-list__link"><span>DeepSeek</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[Verilog]" class="tm-tags-list__link"><span>Verilog</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[SystemVerilog]" class="tm-tags-list__link"><span>SystemVerilog</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F]" class="tm-tags-list__link"><span>документация</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[%D1%81%D1%82%D1%80%D0%B0%D1%88%D0%BD%D0%BE%D0%B5+%D0%B1%D1%83%D0%B4%D1%83%D1%89%D0%B5%D0%B5]" class="tm-tags-list__link"><span>страшное будущее</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[%D1%81%D0%B5%D0%BD%D1%81%D0%BE%D1%80%D1%8B]" class="tm-tags-list__link"><span>сенсоры</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[%D0%B4%D1%80%D0%B5%D0%B1%D0%B5%D0%B7%D0%B3]" class="tm-tags-list__link"><span>дребезг</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[%D0%BF%D0%BB%D0%B8%D1%81]" class="tm-tags-list__link"><span>плис</span></a><!--]--></li><!--]--><!----></ul></div><div class="tm-data-icons tm-data-icons tm-data-icons_space-big tm-post-snippet__icons" data-test-id="article-stats-icons"><div class="article-rating tm-data-icons__item" data-v-86aec4a7><div class="tm-votes-lever tm-votes-lever tm-votes-lever_appearance-article votes-switcher" title="Total votes 15: ↑14 and ↓1" data-v-86aec4a7><button class="tm-votes-lever__button" data-test-id="votes-lever-upvote-button" title="Like" type="button"><svg class="tm-svg-img tm-votes-lever__icon" height="24" width="24"><title>Like</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-vote"></use></svg></button><div class="tm-votes-lever__score tm-votes-lever__score_appearance-article tm-votes-lever__score"><!--[--><span><span class="tm-votes-lever__score-counter tm-votes-lever__score-counter_positive tm-votes-lever__score-counter" data-test-id="votes-score-counter">+14</span></span><!--]--></div><button class="tm-votes-lever__button" data-test-id="votes-lever-downvote-button" title="Dislike" type="button"><svg class="tm-svg-img tm-votes-lever__icon tm-votes-lever__icon_arrow-down" height="24" width="24"><title>Dislike</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-vote"></use></svg></button></div><!--teleport start--><!--teleport end--><!----></div><!----><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">1</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/posts/908756/#publication-comments" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">18</span><!--]--></a><!----></div><!--[--><!----><!--]--><!--teleport start--><!--teleport end--><!----></div><!----><!----></div><!----></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="908464" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/kentavr009/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="kentavr009"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/b05/458/3a7/b054583a7ca1cc5b058bb65d3f5f46b0.jpeg" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/kentavr009/" class="tm-user-info__username">kentavr009 <!----></a><!--[--><a href="/en/articles/908464/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-05-12T03:03:40.000Z" title="2025-05-12, 06:03"> May 12 at 06:03</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/908464/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>FunCaptcha (Arkose Labs) solver: Principles of Operation, Features, and Methods for Automated Bypass</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">12 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="546">546</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/python/" class="tm-publication-hub__link"><!--[--><span>Python</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-review" data-v-9fa2fafc><span>Review</span></div><!--[--><div class="tm-publication-label tm-publication-label_variant-translation" data-v-9fa2fafc><span>Translation</span></div><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w780/getpro/habr/upload_files/932/aa0/6cf/932aa06cf8b307028833012319c5cd4d.jpg" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>We continue our journey through the world of CAPTCHAs (Fantastic CAPTCHAs and Where to Find Them, as well as Methods to Combat Them), and today we encounter yet another “tough nut” in the CAPTCHA universe – FunCaptcha (Arkose Labs).</p><p><strong>FunCaptcha</strong> is a type of CAPTCHA developed by Arkose Labs that offers users small puzzles instead of the usual tasks like recognizing distorted text or selecting images containing buses. In traditional CAPTCHAs (e.g., reCAPTCHA), verification often relies on recognizing distorted characters or simple images. Arkose Labs took a different route: their “entertaining” CAPTCHAs feature interactive challenges with 3D objects, logic puzzles, and audio questions. This approach is intended to be user-friendly for humans while complicating life for bots.</p><p>Typical FunCaptcha challenges include:</p></div></div><!----><!----></div><a href="/en/articles/908464/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Rating</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value">0</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">0</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/908464/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><div class="tm-article-feed-blocks"><div id="stories_block_4" data-some-prop="test" data-test-id="stories_block"></div></div><!--]--></div><!--]--><!--[--><!----><article id="908240" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/rsashka/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="rsashka"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/ad5/d5f/eb2/ad5d5feb2fbf547d4d74f65d041cb2c7.jpg" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/rsashka/" class="tm-user-info__username">rsashka <!----></a><!--[--><a href="/en/articles/908240/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-05-10T14:50:36.000Z" title="2025-05-10, 17:50"> May 10 at 17:50</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/908240/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>About the C++ static analyzer as a Clang plugin</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-medium"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-medium"></use></svg></span><span class="tm-article-complexity__label">Medium</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">9 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="702">702</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/cpp/" class="tm-publication-hub__link"><!--[--><span>C++</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/compilers/" class="tm-publication-hub__link"><!--[--><span>Compilers</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/programming/" class="tm-publication-hub__link"><!--[--><span>Programming</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-retrospective" data-v-9fa2fafc><span>Retrospective</span></div><!--[--><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><!----><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-1"><p><img src="https://habrastorage.org/r/w1560/webt/y-/t8/37/y-t837zqbk2jynlorochjcqfuty.jpeg" alt="image"></p><br> <p>This article is based on the experience of developing the <a href="https://github.com/rsashka/memsafe" rel="nofollow noopener noreferrer">memsafe</a> library, which, using the Clang plugin, adds safe memory management and invalidation control of reference data types to C++ during source code compilation.</p></div></div><!----><!----></div><a href="/en/articles/908240/" class="tm-article-snippet__readmore"><!--[--><span>Read more →</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Rating</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value">0</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">2</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/908240/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="907210" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/ArcaneGamingcom/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="ArcaneGamingcom"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/bef/009/69d/bef00969db68a919adae3b19e7d45c55.png" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/ArcaneGamingcom/" class="tm-user-info__username">ArcaneGamingcom <!----></a><!--[--><a href="/en/articles/907210/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-05-06T06:17:26.000Z" title="2025-05-06, 09:17"> May 6 at 09:17</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/907210/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>Tips and methods for conducting user research with children</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">5 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="768">768</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/mobile_dev/" class="tm-publication-hub__link"><!--[--><span>Development of mobile applications</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/android_dev/" class="tm-publication-hub__link"><!--[--><span>Development for Android</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/gamedev/" class="tm-publication-hub__link"><!--[--><span>Game development</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/lib/" class="tm-publication-hub__link"><!--[--><span>Professional literature</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/game_promotion/" class="tm-publication-hub__link"><!--[--><span>Games promotion</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-roadmap" data-v-9fa2fafc><span>Roadmap</span></div><!--[--><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w780/getpro/habr/upload_files/2c5/e35/82d/2c5e3582dd9e3add15133913c93db06a.jpg" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>When creating an app or any other software product for children, one of the hardest parts of the process is conducting user research correctly. Although working with kids might seem fun and entertaining, it takes certain skills to get them engaged in testing your product and voicing their opinion so you could gather all the necessary information. It’s important to understand that mentally kids function differently than adults, so working with a young target audience requires a different approach. Treating children like adults in the UX research process can lead to serious mistakes: they might not get a proper understanding of your product and you might end up getting wrong results, only wasting your time and budget. In order to avoid that, we’ve collected a few tips below that might help you communicate with kids more effectively for a productive and fruitful research session.</p></div></div><!----><!----></div><a href="/en/articles/907210/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Total votes 1: ↑1 and ↓0</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_positive tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value" title="Total votes 1: ↑1 and ↓0">+1</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">0</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/907210/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="906830" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/melanny20/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="melanny20"><div class="tm-entity-image"><!--[--><img alt="" class="tm-entity-image__pic" height="24" src="https://assets.habr.com/habr-web/img/avatars/055.png" width="24"><!--]--></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/melanny20/" class="tm-user-info__username">melanny20 <!----></a><!--[--><a href="/en/companies/postgrespro/articles/906830/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-05-05T17:36:36.000Z" title="2025-05-05, 20:36"> May 5 at 20:36</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/companies/postgrespro/articles/906830/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>One-click Postgres Pro optimization with pgpro_tune</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">4 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="433">433</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/companies/postgrespro/articles/" class="tm-publication-hub__link"><!--[--><span>Postgres Professional corporate blog</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/postgresql/" class="tm-publication-hub__link"><!--[--><span>PostgreSQL</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/devops/" class="tm-publication-hub__link"><!--[--><span>DevOps</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-review" data-v-9fa2fafc><span>Review</span></div><!--[--><div class="tm-publication-label tm-publication-label_variant-translation" data-v-9fa2fafc><span>Translation</span></div><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w780/getpro/habr/upload_files/33f/f13/d73/33ff13d73671bd3c6be08800881c0a0d.jpg" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>Imagine a familiar situation: it’s Monday morning, tasks are piling up, and you need to quickly spin up a new service using Postgres Pro. Or maybe you’ve just upgraded your database server over the weekend — added more CPUs, more RAM. </p><p>Here’s how to get your database tuned and ready to make the most of the new hardware and workload, without wasting time.</p></div></div><!----><!----></div><a href="/en/companies/postgrespro/articles/906830/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Rating</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value">0</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">2</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/companies/postgrespro/articles/906830/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><div class="tm-article-feed-blocks"><!----></div><!--]--></div><!--]--><!--[--><!----><article id="895520" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/melanny20/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="melanny20"><div class="tm-entity-image"><!--[--><img alt="" class="tm-entity-image__pic" height="24" src="https://assets.habr.com/habr-web/img/avatars/055.png" width="24"><!--]--></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/melanny20/" class="tm-user-info__username">melanny20 <!----></a><!--[--><a href="/en/companies/postgrespro/articles/895520/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-05-05T11:00:05.000Z" title="2025-05-05, 14:00"> May 5 at 14:00</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/companies/postgrespro/articles/895520/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>Database performance analysis using pg_profile and pgpro_pwr</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">4 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="98">98</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/companies/postgrespro/articles/" class="tm-publication-hub__link"><!--[--><span>Postgres Professional corporate blog</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/postgresql/" class="tm-publication-hub__link"><!--[--><span>PostgreSQL</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/sql/" class="tm-publication-hub__link"><!--[--><span>SQL</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-tutorial" data-v-9fa2fafc><span>Tutorial</span></div><!--[--><div class="tm-publication-label tm-publication-label_variant-translation" data-v-9fa2fafc><span>Translation</span></div><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w780/getpro/habr/upload_files/e0c/a17/738/e0ca17738e3d8aa825d6fb281302983c.jpg" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>DBAs often struggle to identify the most resource-hungry processes that degrade system performance. Back in 2017, DBA — and now Postgres Professional engineer — Andrey Zubkov faced the same challenge. This led him to develop <code>pg_profile</code> for PostgreSQL, which has since evolved into <code>pgpro_pwr</code>.</p><p>In this article, we’ll dive into strategic database monitoring and show you how to pinpoint bottlenecks in your databases using our tools.</p></div></div><!----><!----></div><a href="/en/companies/postgrespro/articles/895520/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Rating</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value">0</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">0</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/companies/postgrespro/articles/895520/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="906578" class="tm-articles-list__item tm-articles-list__item_no-padding" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-post-snippet"><!--[--><div class="publication-type-label publication-type-label_type-post"><span class="publication-type-label__label publication-type-label__label_type-post">Post</span></div><!--]--><div class="tm-post-snippet__meta"><span class="tm-user-info tm-post-author-info"><a href="/en/users/Oksenija/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="Oksenija"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="36" src="//habrastorage.org/getpro/habr/avatars/33e/7e0/a3c/33e7e0a3c797bc7a7abb38eb3e7e1982.jpg" width="36"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-post" data-test-id="user-info-description"><a href="/en/users/Oksenija/" class="tm-user-info__username">Oksenija <!----></a><!--[--><div class="tm-post-author-info__meta-row"><a href="/en/posts/906578/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-05-03T09:33:41.000Z" title="2025-05-03, 12:33"> May 3 at 12:33</time><!--]--></a><span class="tm-icon-counter"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="9067">9.1K</span></span></div><!--]--></span></span><!----></div><div class="tm-publication-hubs__container tm-post-snippet__hubs"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/biotech/posts/" class="tm-publication-hub__link"><!--[--><span>Biotechnologies</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/artificial_intelligence/posts/" class="tm-publication-hub__link"><!--[--><span>Artificial Intelligence</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/health/posts/" class="tm-publication-hub__link"><!--[--><span>Health</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/cybersport/posts/" class="tm-publication-hub__link"><!--[--><span>Cybersport</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/biology/posts/" class="tm-publication-hub__link"><!--[--><span>Biology</span><!----><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><!----><!--[--><!--]--><!--]--></div></div><div class="tm-post-snippet__content-wrapper tm-post-snippet__content-wrapper_hide_gradient"><!----><div class="tm-post-snippet__content"><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p><strong><u>ChatGPT:</u> </strong>LOOKING FOR A<strong> <u>CAFFEINE</u> </strong>SUBSTITUTE</p><p>Although <strong><u>caffeine</u></strong> stimulates mental activity and aids in <strong>e</strong>Sports/games and late-night programming, it has many <strong>side effects</strong>, such as <u>increased blood pressure</u> and <u>crazy heart rate</u>, a sharp rise and quick drop in stimulation. Therefore, we need a high-quality alternative to caffeine, and we will search for it using AI. Potential candidates to replace caffeine are Theacrine (or TeaCrine) and N-Phenethyldimethylamine Citrate (USA FDA said Ok). </p><p>ChatGPT successfully created a very complex table, even with a calculated column based on FUZZY criteria (if you can do this in SQL — you're a genius!), but it struggled with sorting the table. Attention: there is an image below, links are not clickable.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/6b1/bb7/423/6b1bb74234ca5fee1cbbe9b90c08a901.png" alt="this is an image, links are not clickable" title="this is an image, links are not clickable" width="1200" height="366"><div><figcaption>this is an image, links are not clickable</figcaption></div></figure><p>In the first numeric column, it failed to sort the numbers in descending order. I spent about 15-20 minutes trying. I experimented with various prompts and explanations. This is strange.</p><p>This tool (<strong>ChatGPT</strong>) <u>understands table manipulation commands very well</u>. In this example, I asked it to create a table based on data from large stores, specified which columns were needed and what information they should contain, indicated the order of the columns, including relative positioning — for instance, "insert a column with such-and-such data before this column" — and even more. </p><p>IT was able to create a <strong>SUMMARY</strong> column based on previously generated columns — this is the column with weighted sums of substance weights from other columns, and IT independently found the weighting coefficients quite accurately. </p><p>Moreover, for each product, IT managed to identify the substance composition based on specific criteria and listed them, creating a separate column. Not all substances, but only those filtered by certain criteria (only those that are not caffeine but have an effect similar to caffeine — try programming such a query in SQL manually without AI, taking into account the <strong>fuzzy criterion</strong> of similarity of effects, and also determine the similarity coefficient for creating the weighted sum of substance masses per serving of the dietary supplement). And it even partially managed to sort by the <u>weighted sum</u>. </p><p><strong>But despite completing so much complex work, it still made a small mistake with sorting</strong>.</p></div></div><!----><!----></div><div></div></div></div><div class="tm-separated-list tm-separated-list_clipped tm-post-snippet__meta-list"><span class="tm-separated-list__title">Tags:</span><ul class="tm-separated-list__list"><!--[--><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[coffee]" class="tm-tags-list__link"><span>coffee</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[chatgpt]" class="tm-tags-list__link"><span>chatgpt</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[biohhackers]" class="tm-tags-list__link"><span>biohhackers</span></a><!--]--></li><li class="tm-separated-list__item"><!--[--><a href="/en/search/?target_type=posts&order=relevance&q=[biohaking]" class="tm-tags-list__link"><span>biohaking</span></a><!--]--></li><!--]--><!----></ul></div><div class="tm-data-icons tm-data-icons tm-data-icons_space-big tm-post-snippet__icons" data-test-id="article-stats-icons"><div class="article-rating tm-data-icons__item" data-v-86aec4a7><div class="tm-votes-lever tm-votes-lever tm-votes-lever_appearance-article votes-switcher" title="Total votes 2: ↑1 and ↓1" data-v-86aec4a7><button class="tm-votes-lever__button" data-test-id="votes-lever-upvote-button" title="Like" type="button"><svg class="tm-svg-img tm-votes-lever__icon" height="24" width="24"><title>Like</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-vote"></use></svg></button><div class="tm-votes-lever__score tm-votes-lever__score_appearance-article tm-votes-lever__score"><!--[--><span><span class="tm-votes-lever__score-counter tm-votes-lever__score-counter" data-test-id="votes-score-counter">0</span></span><!--]--></div><button class="tm-votes-lever__button" data-test-id="votes-lever-downvote-button" title="Dislike" type="button"><svg class="tm-svg-img tm-votes-lever__icon tm-votes-lever__icon_arrow-down" height="24" width="24"><title>Dislike</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-vote"></use></svg></button></div><!--teleport start--><!--teleport end--><!----></div><!----><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">3</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/posts/906578/#publication-comments" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!----><!--]--><!--teleport start--><!--teleport end--><!----></div><!----><!----></div><!----></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="905934" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/kaze_no_saga/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="kaze_no_saga"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/dcc/532/f26/dcc532f26204fdcf8498d744aefac55d.jpg" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/kaze_no_saga/" class="tm-user-info__username">kaze_no_saga <!----></a><!--[--><a href="/en/companies/postgrespro/articles/905934/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-30T12:59:08.000Z" title="2025-04-30, 15:59"> Apr 30 at 15:59</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/companies/postgrespro/articles/905934/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>PostgreSQL 18: Part 4, or CommitFest 2025-01</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-medium"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-medium"></use></svg></span><span class="tm-article-complexity__label">Medium</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">13 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="706">706</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/companies/postgrespro/articles/" class="tm-publication-hub__link"><!--[--><span>Postgres Professional corporate blog</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/postgresql/" class="tm-publication-hub__link"><!--[--><span>PostgreSQL</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/sql/" class="tm-publication-hub__link"><!--[--><span>SQL</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-digest" data-v-9fa2fafc><span>Digest</span></div><!--[--><div class="tm-publication-label tm-publication-label_variant-translation" data-v-9fa2fafc><span>Translation</span></div><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><!----><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-1"><p><img src="https://habrastorage.org/webt/fc/ru/ch/fcruchd4hzgooayvankxaup0gpe.png"></p><br> <p>We continue to follow the news about PostgreSQL 18. The January CommitFest brings in some notable improvements to monitoring, as well as other new features.</p><br> <p>You can find previous reviews of PostgreSQL 18 CommitFests here: <a href="https://postgrespro.com/blog/pgsql/5971431" rel="nofollow noopener noreferrer">2024-07</a>, <a href="https://postgrespro.com/blog/pgsql/5971632" rel="nofollow noopener noreferrer">2024-09</a>, <a href="https://postgrespro.com/blog/pgsql/5971769" rel="nofollow noopener noreferrer">2024-11</a>.</p></div></div><!----><!----></div><a href="/en/companies/postgrespro/articles/905934/" class="tm-article-snippet__readmore"><!--[--><span>Read more →</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Rating</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value">0</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">1</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/companies/postgrespro/articles/905934/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><div class="tm-article-feed-blocks"><!----></div><!--]--></div><!--]--><!--[--><a name="more-news"></a><article id="905812" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/sochix/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="sochix"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/1b5/f6f/090/1b5f6f09059737acf3954c4ee8076ca1.jpg" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/sochix/" class="tm-user-info__username">sochix <!----></a><!--[--><a href="/en/articles/905812/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-30T07:44:12.000Z" title="2025-04-30, 10:44"> Apr 30 at 10:44</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/905812/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>How I Created Perfect Wiki and Reached $250K in Annual Revenue Without Investors</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">6 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="84692">85K</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/startuprise/" class="tm-publication-hub__link"><!--[--><span>Start-up development</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/business_models/" class="tm-publication-hub__link"><!--[--><span>Business Models</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/productpm/" class="tm-publication-hub__link"><!--[--><span>Product Management</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/web_monetization/" class="tm-publication-hub__link"><!--[--><span>Web services monetization</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-retrospective" data-v-9fa2fafc><span>Retrospective</span></div><!--[--><div class="tm-publication-label tm-publication-label_variant-translation" data-v-9fa2fafc><span>Translation</span></div><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/9ac/319/7a7/9ac3197a7f489007bedf5826bd13a07c.png" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>Hi, my name is Ilia. I founded <strong>Perfect Wiki</strong> — a SaaS product for creating internal company knowledge bases that works directly within Microsoft Teams. We created a simple and convenient tool for storing, editing, and sharing knowledge within companies. It all started with the idea to resolve one specific pain point: the built-in Wiki in Microsoft Teams offered was inconvenient, and there was no worthy alternatives with full integration to the platform.</p><p>In this article, I want to share how the idea came about, the mistakes I made, how I found my first customers, and how I gradually grew to a steady income of $250,000 a year over five years. All of this — without investors, a 20-person team, or a “Series A” round.</p></div></div><!----><!----></div><a href="/en/articles/905812/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Total votes 2: ↑2 and ↓0</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_positive tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value" title="Total votes 2: ↑2 and ↓0">+5</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">1</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/905812/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">2</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="905288" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/YuriPanchul/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="YuriPanchul"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/0a9/21b/7c1/0a921b7c13a624616c9da17b980b69a9.jpg" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/YuriPanchul/" class="tm-user-info__username">YuriPanchul <!----></a><!--[--><a href="/en/articles/905288/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-29T14:35:08.000Z" title="2025-04-29, 17:35"> Apr 29 at 17:35</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/905288/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>How to Fail Those Students Who Rely on ChatGPT</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><!----><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">3 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="1816">1.8K</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/fpga/" class="tm-publication-hub__link"><!--[--><span>FPGA</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/controllers/" class="tm-publication-hub__link"><!--[--><span>Programming microcontrollers</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/machine_learning/" class="tm-publication-hub__link"><!--[--><span>Machine learning</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/artificial_intelligence/" class="tm-publication-hub__link"><!--[--><span>Artificial Intelligence</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/cpu/" class="tm-publication-hub__link"><!--[--><span>CPU</span><!----><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><!----><!--[--><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/a16/b7a/b92/a16b7ab92f1354de24ba7c81c2a206ff.png" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>We at <a href="https://verilog-meetup.com/" rel="noopener noreferrer nofollow">Verilog Meetup</a> constructed an <a href="https://verilog-meetup.com/2025/02/11/a-new-edition-of-systemverilog-homework-adds-exercises-that-use-fpu-of-an-open-source-cpu/" rel="noopener noreferrer nofollow">exam/interview problem</a> that has an interesting property: if a student tries to figure out a solution by thinking by himself, he usually succeeds; however if he dumps the problem on ChatGPT, the solution fails (does not pass the automated test), and the student goes into a death spiral of futility, kicking ChatGPT to get the solution right.</p><p>There is nothing weird about the problem, we do this in the industry all the time:</p></div></div><!----><!----></div><a href="/en/articles/905288/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Total votes 4: ↑4 and ↓0</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_positive tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value" title="Total votes 4: ↑4 and ↓0">+6</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">0</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/905288/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="905468" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/profleaddev/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="profleaddev"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/850/f1c/026/850f1c026e8139b72b529e7eafd76ac2.jpg" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/profleaddev/" class="tm-user-info__username">profleaddev <!----></a><!--[--><a href="/en/articles/905468/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-29T09:54:44.000Z" title="2025-04-29, 12:54"> Apr 29 at 12:54</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/905468/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>Google ADK: Easiest Way to Build an AI Agent</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">7 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="1538">1.5K</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/artificial_intelligence/" class="tm-publication-hub__link"><!--[--><span>Artificial Intelligence</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/programming/" class="tm-publication-hub__link"><!--[--><span>Programming</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/python/" class="tm-publication-hub__link"><!--[--><span>Python</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-tutorial" data-v-9fa2fafc><span>Tutorial</span></div><!--[--><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/d27/161/d35/d27161d35715ad45f1019b8c54abcfe5.png" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>In this tutorial, I’ll explain in simple terms what AI, AI agents, and workflows are, and then I’ll walk you through building your very first AI agent in Python using Google’s Agent Development Kit (ADK). By the end, you’ll understand the differences between these concepts and have a working content-assistant agent you can run from your terminal or a web interface.</p></div></div><!----><!----></div><a href="/en/articles/905468/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Total votes 2: ↑2 and ↓0</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_positive tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value" title="Total votes 2: ↑2 and ↓0">+4</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">2</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/905468/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><div class="tm-article-feed-blocks"><!----></div><!--]--></div><!--]--><!--[--><!----><article id="905392" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/chevapiops/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="chevapiops"><div class="tm-entity-image"><!--[--><img alt="" class="tm-entity-image__pic" height="24" src="https://assets.habr.com/habr-web/img/avatars/075.png" width="24"><!--]--></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/chevapiops/" class="tm-user-info__username">chevapiops <!----></a><!--[--><a href="/en/articles/905392/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-29T07:28:15.000Z" title="2025-04-29, 10:28"> Apr 29 at 10:28</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/905392/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>It’s Never Too Late: My Start into DevOps</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">8 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="1045">1K</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/career/" class="tm-publication-hub__link"><!--[--><span>IT career</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/devops/" class="tm-publication-hub__link"><!--[--><span>DevOps</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/it-infrastructure/" class="tm-publication-hub__link"><!--[--><span>IT Infrastructure</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/study/" class="tm-publication-hub__link"><!--[--><span>Studying in IT</span><!----><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><!----><!--[--><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/152/9c5/e7a/1529c5e7a5e3b4d57d06f4ebebae3d82.png" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p><strong>It’s Never Too Late: My Start into DevOps</strong></p><p>Summary</p><p>Learn about the challenges, growth, and lessons gained — from juggling work, studies, and a pet project to achieving a dream.</p></div></div><!----><!----></div><a href="/en/articles/905392/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Rating</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value">0</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">1</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/905392/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="895522" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/melanny20/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="melanny20"><div class="tm-entity-image"><!--[--><img alt="" class="tm-entity-image__pic" height="24" src="https://assets.habr.com/habr-web/img/avatars/055.png" width="24"><!--]--></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/melanny20/" class="tm-user-info__username">melanny20 <!----></a><!--[--><a href="/en/companies/postgrespro/articles/895522/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-28T11:00:21.000Z" title="2025-04-28, 14:00"> Apr 28 at 14:00</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/companies/postgrespro/articles/895522/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>By next year, we'll be talking to databases in natural language</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">4 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="590">590</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/companies/postgrespro/articles/" class="tm-publication-hub__link"><!--[--><span>Postgres Professional corporate blog</span><!----><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/postgresql/" class="tm-publication-hub__link"><!--[--><span>PostgreSQL</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/sql/" class="tm-publication-hub__link"><!--[--><span>SQL</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-review" data-v-9fa2fafc><span>Review</span></div><!--[--><div class="tm-publication-label tm-publication-label_variant-translation" data-v-9fa2fafc><span>Translation</span></div><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w780/getpro/habr/upload_files/e8a/a36/e48/e8aa36e4891c53488f773392655bba6c.jpg" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>According to Gartner, natural language queries will replace SQL as early as 2026. </p><p>While Gartner's prediction may be optimistic, the shift toward natural language interfaces for databases is inevitable. The timeline may vary, but the transition itself is a certainty.</p></div></div><!----><!----></div><a href="/en/companies/postgrespro/articles/895522/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Rating</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value">0</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">2</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/companies/postgrespro/articles/895522/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="904848" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/slinkinone/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="slinkinone"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/761/a26/617/761a26617e647a881c58e966d0d0ba83.png" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/slinkinone/" class="tm-user-info__username">slinkinone <!----></a><!--[--><a href="/en/articles/904848/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-28T07:00:25.000Z" title="2025-04-28, 10:00"> Apr 28 at 10:00</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/904848/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>What is DPI Engine?</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-medium"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-medium"></use></svg></span><span class="tm-article-complexity__label">Medium</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">25 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="1194">1.2K</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/infosecurity/" class="tm-publication-hub__link"><!--[--><span>Information Security</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/network_technologies/" class="tm-publication-hub__link"><!--[--><span>Network technologies</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-translation" data-v-9fa2fafc><span>Translation</span></div><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/39a/e91/946/39ae91946f880ee58dd231182b758d64.png" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>For people familiar with the term DPI (<strong>Deep Packet Inspection</strong>), it often carries an unpleasant association: blocking, regulators, censorship, tightening controls. In reality, DPI is simply the name of a technology whose essence lies in the deep analysis of network traffic. Deep traffic analysis involves identifying protocols, extracting the most significant fields and metadata, classifying internet services, and analyzing the nature of network flows. I will explain how such solutions work in this article.</p></div></div><!----><!----></div><a href="/en/articles/904848/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Total votes 1: ↑1 and ↓0</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_positive tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value" title="Total votes 1: ↑1 and ↓0">+1</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">2</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/904848/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">1</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><div class="tm-article-feed-blocks"><div class="banner-wrapper leaderboard" style="--38f3d936:200px;--78a3cd06:auto;" data-v-f4bf0d24><!--[--><div class="placeholder-wrapper placeholder" data-v-f4bf0d24><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><div class="adfox-banner-placeholder leaderboard" data-v-12f7bcca><div class="image loads" data-v-12f7bcca></div><div class="lines" data-v-12f7bcca><div class="line loads" data-v-12f7bcca></div><div class="line loads" data-v-12f7bcca></div><div class="line loads" data-v-12f7bcca></div></div></div><!----><!----><!----></div><div id="adfox_164725660339535756" class="tm-adfox-banner" data-v-f4bf0d24></div><!--]--></div></div><!--]--></div><!--]--><!--[--><!----><article id="904856" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/xini/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="xini"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/a5a/149/19a/a5a14919ad309826f0fda9cae0417fa9.jpg" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/xini/" class="tm-user-info__username">xini <!----></a><!--[--><a href="/en/articles/904856/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-27T12:53:15.000Z" title="2025-04-27, 15:53"> Apr 27 at 15:53</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/904856/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>Build better, faster using TDD</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">16 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="1008">1K</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/it_testing/" class="tm-publication-hub__link"><!--[--><span>IT systems testing</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/tdd/" class="tm-publication-hub__link"><!--[--><span>TDD</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/refactoring/" class="tm-publication-hub__link"><!--[--><span>Designing and refactoring</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-opinion" data-v-9fa2fafc><span>Opinion</span></div><!--[--><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w780/getpro/habr/upload_files/b8b/159/055/b8b15905564c5aaee9246bc26f1256ac.jpeg" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>We all strive to build better software, and to do it faster. I believe Test-driven Development offers us a path towards this goal. Still struggling to efficiently utilize this approach? Then I invite you to discuss my tips and tricks to unlock the benefits of TDD!</p></div></div><!----><!----></div><a href="/en/articles/904856/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Rating</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value">0</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">2</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/904856/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="903870" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/kentavr009/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="kentavr009"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/b05/458/3a7/b054583a7ca1cc5b058bb65d3f5f46b0.jpeg" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/kentavr009/" class="tm-user-info__username">kentavr009 <!----></a><!--[--><a href="/en/articles/903870/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-24T06:04:42.000Z" title="2025-04-24, 09:04"> Apr 24 at 09:04</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/903870/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>GeeTest CAPTCHA Bypass: How to Solve a Sophisticated Anti-Bot System</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">13 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="1446">1.4K</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/python/" class="tm-publication-hub__link"><!--[--><span>Python</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-review" data-v-9fa2fafc><span>Review</span></div><!--[--><div class="tm-publication-label tm-publication-label_variant-translation" data-v-9fa2fafc><span>Translation</span></div><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/1c0/e0d/e86/1c0e0de861cc3a7e34c8673585939765.png" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>One could write, “Experienced developers working on parsing and automation often face the need to bypass modern CAPTCHAs.” But that’s too boring… I’d rather start like this—continuing to explore the amusing world of CAPTCHAs, I finally stumbled upon the Chinese variant of protection: the GeeTest CAPTCHA. Let’s break down what this beast is, where it dwells, and why you should (or shouldn’t) fear it… You’ll understand as we go!</p><p>GeeTest is one of the advanced anti-bot systems combining user puzzles with behavioral analysis. I decided to take a close look at recognizing the GeeTest CAPTCHA under real-world conditions and figure out how to bypass GeeTest with various methods. But first—a classic introduction (which, by the way, may be more interesting than the practical part of the article, since bypassing the GeeTest CAPTCHA is already a non-trivial task for many readers).</p></div></div><!----><!----></div><a href="/en/articles/903870/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Total votes 1: ↑1 and ↓0</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_positive tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value" title="Total votes 1: ↑1 and ↓0">+1</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">2</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/903870/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="903490" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/zangico/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="zangico"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/756/b19/ec1/756b19ec1a28939c5ff3bbb5a1f66630.png" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/zangico/" class="tm-user-info__username">zangico <!----></a><!--[--><a href="/en/articles/903490/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-23T07:16:18.000Z" title="2025-04-23, 10:16"> Apr 23 at 10:16</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/903490/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>Yandex huge privacy issue or not?</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><!----><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">2 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="1710">1.7K</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/infosecurity/" class="tm-publication-hub__link"><!--[--><span>Information Security</span><span class="tm-article-snippet__profiled-hub" title="Core hub">*</span><!--]--></a></span><span class="tm-publication-hub__link-container"><a href="/en/hubs/itcompanies/" class="tm-publication-hub__link"><!--[--><span>IT-companies</span><!----><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-sandbox" data-v-9fa2fafc><a href="/en/sandbox/" class="">From sandbox</a></div><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/547/c43/7c5/547c437c54bad054db1277259b4f8094.png" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>Hi to everyone!</p><p>I'm new here. Someone told me that Habr is like russian reddit for developers (and maybe not). And I'm here today to share my story and get opinions from you, part of this community.</p><p>In August 2024 I visited Moscow, and got Russian starter pack, even if foregneir :-)<br>Will be useful later because I'm moving here, Русский язык coming soon, извините!</p><p>So let's start with getting a new bank account, make a new mobile number and start to register to some essential service platforms like Metro, Gorod, ВВ, Perekrostak and Yandex for delivery and taxis. And in every service I found something strange. A certain "Ivan" (I've changed the name for privacy) is present in all my accounts where I try to register. <br>That's it! The phone number that my bank gave me was just.... recyled! So I could start to get personal data through all these existing account on this new phone number of mine but the most shocking thing occured today!</p><p>Alarm on 9:00, I woke up and I got a message by Yandex:</p></div></div><!----><!----></div><a href="/en/articles/903490/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Total votes 4: ↑4 and ↓0</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_positive tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value" title="Total votes 4: ↑4 and ↓0">+5</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">1</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/903490/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">1</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--[--><!----><article id="903436" class="tm-articles-list__item" data-navigatable data-test-id="articles-list-item" tabindex="0"><div class="tm-article-snippet tm-article-snippet"><!--[--><div class="publication-type-label publication-type-label_type-article"><span class="publication-type-label__label publication-type-label__label_type-article">Article</span></div><!--]--><div class="tm-article-snippet__meta-container"><div class="tm-article-snippet__meta"><span class="tm-user-info tm-article-snippet__author"><a href="/en/users/klimkovsky/" class="tm-user-info__userpic" data-test-id="user-info-pic" title="klimkovsky"><div class="tm-entity-image"><img alt="" class="tm-entity-image__pic" height="24" src="//habrastorage.org/r/w48/getpro/habr/avatars/870/341/6a5/8703416a58aeb2f3580e8fa11a90a8ef.jpg" width="24"></div></a><span class="tm-user-info__user tm-user-info__user_appearance-default" data-test-id="user-info-description"><a href="/en/users/klimkovsky/" class="tm-user-info__username">klimkovsky <!----></a><!--[--><a href="/en/articles/903436/" class="tm-article-datetime-published tm-article-datetime-published_link"><!--[--><time datetime="2025-04-23T03:36:16.000Z" title="2025-04-23, 06:36"> Apr 23 at 06:36</time><!--]--></a><!--]--></span></span></div><!----></div><h2 class="tm-title tm-title_h2" data-test-id="articleTitle"><!--[--><a href="/en/articles/903436/" class="tm-title__link" data-article-link="true" data-test-id="article-snippet-title-link"><span>Horsehead Nebula</span></a><!--]--></h2><div class="tm-article-snippet__stats" data-test-id="articleStats"><div class="tm-article-complexity tm-article-complexity_complexity-low"><span class="tm-svg-icon__wrapper tm-article-complexity__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Level of difficulty</title><use xlink:href="/img/megazord-v28.7909a852..svg#complexity-low"></use></svg></span><span class="tm-article-complexity__label">Easy</span></div><div class="tm-article-reading-time"><span class="tm-svg-icon__wrapper tm-article-reading-time__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Reading time</title><use xlink:href="/img/megazord-v28.7909a852..svg#clock"></use></svg></span><span class="tm-article-reading-time__label">6 min</span></div><span class="tm-icon-counter tm-data-icons__item"><svg class="tm-svg-img tm-icon-counter__icon" height="24" width="24"><title>Views</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-views"></use></svg><span class="tm-icon-counter__value" title="1049">1K</span></span></div><div class="tm-publication-hubs__container" data-test-id="articleHubsList"><div class="tm-publication-hubs"><!--[--><span class="tm-publication-hub__link-container"><a href="/en/hubs/astronomy/" class="tm-publication-hub__link"><!--[--><span>Astronomy</span><!----><!--]--></a></span><!--]--></div></div><div class="tm-article-labels" data-test-id="articleLabels" data-v-9fa2fafc><div class="tm-article-labels__container" data-v-9fa2fafc><!----><!--[--><div class="tm-publication-label tm-publication-label_variant-review" data-v-9fa2fafc><span>Review</span></div><!--[--><!--]--><!--]--></div></div><!----><div class="tm-article-body tm-article-snippet__lead"><div class="tm-article-snippet__cover_cover tm-article-snippet__cover"><img class="tm-article-snippet__lead-image" data-test-id="articleLeadImage" src="https://habrastorage.org/r/w780/getpro/habr/upload_files/ffa/299/09b/ffa29909b927a73d88b22889301f3f3d.jpg" style="object-position: 0% 0%"></div><div><div><div class="article-formatted-body article-formatted-body article-formatted-body_version-2"><p>The whimsical image of a chess knight in profile among the stars is perhaps the most recognizable among deep space objects. It can be said that the Horsehead Nebula tops the recognition rankings among nebulae and galaxies. Perhaps the Andromeda and Orion Nebulae resonate more with the general public, but only specialists and advanced amateurs know what they look like. Even among them, there are often cases when the famous Andromeda Galaxy is confused with another galaxy, even by experienced popularizers of astronomy. The Orion Nebula, too, can look different in pictures taken with various filters. Yet, the profile of the chess knight allows every inhabitant of Earth to recognize that in front of them is the one-of-a-kind and completely unique Horsehead Nebula.</p><p>Let's begin by noting that when we talk about the Horsehead Nebula, we refer to two fundamentally different formations in this region of our Galaxy. Only together do they create this memorable visual image. Moreover, what we see—the glowing diffuse background—is not the Horsehead Nebula. It is a dark silhouette against a light background—a bizarrely shaped dust cloud opaque to the visible radiation of stars and nebulae. If there were no relatively bright emission nebula behind it, we might not even know about any dark gas-dust cosmic horse.</p><p>The background for the recognizable horse profile is created by the hydrogen nebula IC 434, discovered by William Herschel in the late 18th century. However, Herschel did not notice any amusing details in the outline of this nebula, although he was an excellent observer—much more keen-sighted and attentive than most of his followers. There are also objective reasons for this—telescopes in Herschel's era were imperfect, and their dark metal mirrors lost from 50% to 80% of the light that entered them.</p></div></div><!----><!----></div><a href="/en/articles/903436/" class="tm-article-snippet__readmore"><!--[--><span>Read more</span><!--]--></a></div></div><div class="tm-articles-list__item-footer"><div class="tm-data-icons tm-data-icons tm-data-icons_space-big" data-test-id="article-stats-icons"><!----><div class="tm-votes-meter tm-data-icons__item"><svg class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon tm-votes-meter__icon_appearance-article" height="24" width="24"><title>Rating</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-rating"></use></svg><span class="tm-votes-meter__value tm-votes-meter__value_appearance-article tm-votes-meter__value_rating tm-votes-meter__value" data-test-id="votes-meter-value">0</span></div><!----><button class="bookmarks-button tm-data-icons__item" title="Add to bookmarks" type="button"><span class="tm-svg-icon__wrapper bookmarks-button__icon"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Add to bookmarks</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-favorite"></use></svg></span><span class="bookmarks-button__counter" title="Users added publication to bookmarks">2</span></button><div class="tm-sharing tm-data-icons__item" title="Share"><button class="tm-sharing__button" type="button"><svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="tm-sharing__icon"><path fill="currentColor" d="M13.8 13.8V18l7.2-6.6L13.8 5v3.9C5 8.9 3 18.6 3 18.6c2.5-4.4 6-4.8 10.8-4.8z"></path></svg></button><!--teleport start--><!--teleport end--></div><div class="tm-article-comments-counter-link tm-data-icons__item" title="Read comments"><a href="/en/articles/903436/comments/" class="tm-article-comments-counter-link__link" data-test-id="counter-comments"><!--[--><svg class="tm-svg-img tm-article-comments-counter-link__icon" height="24" width="24"><title>Comments</title><use xlink:href="/img/megazord-v28.7909a852..svg#counter-comments"></use></svg><span class="tm-article-comments-counter-link__value">0</span><!--]--></a><!----></div><!--[--><!--]--><!--teleport start--><!--teleport end--><!----></div></div></article><div class="tm-articles-list__after-article"><!--[--><!----><!----><!--]--></div><!--]--><!--]--></div><div class="tm-articles-list__after-articles"><!--[--><!--]--></div><div class="tm-pagination" data-test-id="pagination"><div id="pagination-prev-page" class="tm-pagination__navigation-link" data-test-id="pagination-prev-page" data-pagination-prev="true"><!--[--><svg class="tm-svg-img tm-pagination__arrow tm-pagination__arrow_prev" height="16" width="16"><title>Back</title><use xlink:href="/img/megazord-v28.7909a852..svg#arrow-back"></use></svg><span class="tm-pagination__navigation-link-title">Here</span><!--]--></div><div class="tm-pagination__pages"><!--[--><!--]--><span class="tm-pagination__page tm-pagination__page_current" data-test-id="pagination-current-page">1</span><!--[--><div class="tm-pagination__page-group"><!--[--><!--[--><a class="tm-pagination__page" href="/en/feed/page2/">2</a><!--]--><!--[--><a class="tm-pagination__page" href="/en/feed/page3/">3</a><!--]--><!--]--><span class="tm-pagination__page tm-pagination__page_skip"> ... </span></div><div class="tm-pagination__page-group"><!--[--><!--[--><a class="tm-pagination__page" href="/en/feed/page49/">49</a><!--]--><!--[--><a class="tm-pagination__page" href="/en/feed/page50/">50</a><!--]--><!--]--><!----></div><!--]--></div><!--[--><a id="pagination-next-page" class="tm-pagination__navigation-link tm-pagination__navigation-link_active" data-test-id="pagination-next-page" data-pagination-next="true" href="/en/feed/page2/" rel="next"><!--[--><span class="tm-pagination__navigation-link-title">There</span><svg class="tm-svg-img tm-pagination__arrow tm-pagination__arrow_next" height="16" width="16"><title>Back</title><use xlink:href="/img/megazord-v28.7909a852..svg#arrow-back"></use></svg><!--]--></a><!--]--></div><!--]--></div><!--]--><!--]--></div></div><div class="tm-page__sidebar"><!--[--><div class="tm-layout-sidebar"><div class="tm-layout-sidebar__placeholder_initial"></div><div class="tm-sexy-sidebar_initial tm-sexy-sidebar" style="margin-top:0px;"><!--[--><!--]--><!----><div class="tm-layout-sidebar__ads_initial tm-layout-sidebar__ads"><div class="banner-wrapper half-page tm-layout-sidebar__banner tm-layout-sidebar__banner_top" style="--38f3d936:600px;--78a3cd06:auto;" data-v-f4bf0d24><!--[--><div class="placeholder-wrapper placeholder" data-v-f4bf0d24><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><div class="adfox-banner-placeholder half-page" data-v-12f7bcca><div class="image loads" data-v-12f7bcca></div><div class="lines" data-v-12f7bcca><div class="line loads" data-v-12f7bcca></div><div class="line loads" data-v-12f7bcca></div><div class="line loads" data-v-12f7bcca></div></div></div><!----><!----><!----></div><div id="adfox_164725680533065327" class="tm-adfox-banner" data-v-f4bf0d24></div><!--]--></div></div><!--[--><!----><!----><!--]--><div class="banner-wrapper medium-rectangle tm-layout-sidebar__banner tm-layout-sidebar__banner_bottom" style="--38f3d936:250px;--78a3cd06:auto;" data-v-f4bf0d24><!--[--><div class="placeholder-wrapper placeholder" data-v-f4bf0d24><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><div class="adfox-banner-placeholder medium-rectangle" data-v-12f7bcca><div class="image loads" data-v-12f7bcca></div><div class="lines" data-v-12f7bcca><div class="line loads" data-v-12f7bcca></div><div class="line loads" data-v-12f7bcca></div><div class="line loads" data-v-12f7bcca></div></div></div><!----><!----><!----></div><div id="adfox_164725691003361602" class="tm-adfox-banner" data-v-f4bf0d24></div><!--]--></div></div></div><!--]--></div></div><!----><!--]--></div></div></main><!----></div><div class="tm-footer-menu"><div class="tm-page-width"><!--[--><div class="tm-footer-menu__container"><!--[--><div class="tm-footer-menu__block"><p class="tm-footer-menu__block-title">Your account</p><div class="tm-footer-menu__block-content"><ul class="tm-footer-menu__list"><!--[--><li class="tm-footer-menu__list-item"><a href="/kek/v1/auth/habrahabr/?back=/en/feed/&hl=en" rel="nofollow" target="_self">Log in</a></li><li class="tm-footer-menu__list-item"><a href="/kek/v1/auth/habrahabr-register/?back=/en/feed/&hl=en" rel="nofollow" target="_self">Sign up</a></li><!--]--></ul></div></div><div class="tm-footer-menu__block"><p class="tm-footer-menu__block-title">Sections</p><div class="tm-footer-menu__block-content"><ul class="tm-footer-menu__list"><!--[--><li class="tm-footer-menu__list-item"><a href="/en/articles/" class="footer-menu__item-link">Articles</a></li><li class="tm-footer-menu__list-item"><a href="/en/news/" class="footer-menu__item-link">News</a></li><li class="tm-footer-menu__list-item"><a href="/en/hubs/" class="footer-menu__item-link">Hubs</a></li><li class="tm-footer-menu__list-item"><a href="/en/users/" class="footer-menu__item-link">Authors</a></li><li class="tm-footer-menu__list-item"><a href="/en/sandbox/" class="footer-menu__item-link">Sandbox</a></li><!--]--></ul></div></div><div class="tm-footer-menu__block"><p class="tm-footer-menu__block-title">Information</p><div class="tm-footer-menu__block-content"><ul class="tm-footer-menu__list"><!--[--><li class="tm-footer-menu__list-item"><a href="/en/docs/help/" class="footer-menu__item-link">How it works</a></li><li class="tm-footer-menu__list-item"><a href="/en/docs/authors/codex/" class="footer-menu__item-link">For authors</a></li><li class="tm-footer-menu__list-item"><a href="/en/docs/companies/corpblogs/" class="footer-menu__item-link">For companies</a></li><li class="tm-footer-menu__list-item"><a href="/en/docs/docs/transparency/" class="footer-menu__item-link">Documents</a></li><li class="tm-footer-menu__list-item"><a href="https://account.habr.com/info/agreement/?hl=en_US" target="_blank">Agreement</a></li><li class="tm-footer-menu__list-item"><a href="https://account.habr.com/info/confidential/?hl=en_US" target="_blank">Confidential</a></li><!--]--></ul></div></div><div class="tm-footer-menu__block"><p class="tm-footer-menu__block-title">Services</p><div class="tm-footer-menu__block-content"><ul class="tm-footer-menu__list"><!--[--><li class="tm-footer-menu__list-item"><a href="https://company.habr.com/en/corporate-blogs/" target="_blank">Corporate blogs</a></li><li class="tm-footer-menu__list-item"><a href="https://company.habr.com/en/advertising/" target="_blank">Advertising</a></li><li class="tm-footer-menu__list-item"><a href="https://company.habr.com/en/native-special/" target="_blank">Native advertising</a></li><li class="tm-footer-menu__list-item"><a href="https://company.habr.com/en/education-programs/" target="_blank">Education programs</a></li><li class="tm-footer-menu__list-item"><a href="https://company.habr.com/en/hello-startup/" target="_blank">Startups</a></li><!--]--></ul></div></div><!--]--></div><!--]--></div></div><div class="tm-footer"><div class="tm-page-width"><!--[--><div class="tm-footer__container"><!----><div class="tm-footer__social"><!--[--><a class="tm-svg-icon__wrapper tm-social-icons__icon" href="https://www.facebook.com/habr.eng" rel="nofollow noopener noreferrer" target="_blank"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Facebook</title><use xlink:href="/img/new-social-icons-sprite.svg#social-logo-facebook"></use></svg></a><a class="tm-svg-icon__wrapper tm-social-icons__icon" href="https://twitter.com/habr_eng" rel="nofollow noopener noreferrer" target="_blank"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Twitter</title><use xlink:href="/img/new-social-icons-sprite.svg#social-logo-twitter"></use></svg></a><a class="tm-svg-icon__wrapper tm-social-icons__icon" href="https://t.me/habr_eng" rel="nofollow noopener noreferrer" target="_blank"><svg class="tm-svg-img tm-svg-icon" height="24" width="24"><title>Telegram</title><use xlink:href="/img/new-social-icons-sprite.svg#social-logo-telegram"></use></svg></a><!--]--></div><!--teleport start--><!--teleport end--><button class="tm-footer__link"><!----> Language settings</button><a href="/en/feedback/" class="tm-footer__link">Support</a><div class="tm-footer-copyright"><span class="tm-copyright"><span class="tm-copyright__years">© 2006–2025, </span><span class="tm-copyright__name"><a class="tm-copyright__link" href="https://company.habr.com/en/" rel="noopener" target="_blank">Habr</a></span></span></div></div><!--]--></div></div><!----><!--]--></div><!----></div><script>window.__INITIAL_STATE__={"adblock":{"hasAcceptableAdsFilter":false,"hasAdblock":false},"articlesList":{"articlesList":{"895520":{"id":"895520","timePublished":"2025-05-05T11:00:05+00:00","isCorporative":true,"lang":"en","titleHtml":"Database performance analysis using pg_profile and pgpro_pwr","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[{"type":"translation","typeOf":"system","title":"Translation","data":{"originalAuthorName":"Андрей Зубков","originalUrl":"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fpostgrespro\u002Farticles\u002F868174\u002F"}}],"author":{"id":"4316720","alias":"melanny20","fullname":null,"avatarUrl":null,"speciality":null},"statistics":{"commentsCount":0,"favoritesCount":0,"readingCount":98,"score":0,"votesCount":0,"votesCountPlus":0,"votesCountMinus":0},"hubs":[{"id":"19663","alias":"postgrespro","type":"corporative","title":"Postgres Professional corporate blog","titleHtml":"Postgres Professional corporate blog","isProfiled":false,"relatedData":null},{"id":"358","alias":"postgresql","type":"collective","title":"PostgreSQL","titleHtml":"PostgreSQL","isProfiled":true,"relatedData":null},{"id":"594","alias":"sql","type":"collective","title":"SQL","titleHtml":"SQL","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EDBAs often struggle to identify the most resource-hungry processes that degrade system performance. Back in 2017, DBA — and now Postgres Professional engineer — Andrey Zubkov faced the same challenge. This led him to develop \u003Ccode\u003Epg_profile\u003C\u002Fcode\u003E for PostgreSQL, which has since evolved into \u003Ccode\u003Epgpro_pwr\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\u003Cp\u003EIn this article, we’ll dive into strategic database monitoring and show you how to pinpoint bottlenecks in your databases using our tools.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fe0c\u002Fa17\u002F738\u002Fe0ca17738e3d8aa825d6fb281302983c.jpg","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fe0c\u002Fa17\u002F738\u002Fe0ca17738e3d8aa825d6fb281302983c.jpg","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"tutorial","readingTime":4,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"sql"},{"titleHtml":"dbms"},{"titleHtml":"db performance"},{"titleHtml":"db performance analysis"}]},"895522":{"id":"895522","timePublished":"2025-04-28T11:00:21+00:00","isCorporative":true,"lang":"en","titleHtml":"By next year, we'll be talking to databases in natural language","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[{"type":"translation","typeOf":"system","title":"Translation","data":{"originalAuthorName":"https:\u002F\u002Fhabr.com\u002Fru\u002Fusers\u002FSafreliy\u002F","originalUrl":"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fpostgrespro\u002Farticles\u002F895436\u002F"}}],"author":{"id":"4316720","alias":"melanny20","fullname":null,"avatarUrl":null,"speciality":null},"statistics":{"commentsCount":0,"favoritesCount":2,"readingCount":590,"score":0,"votesCount":0,"votesCountPlus":0,"votesCountMinus":0},"hubs":[{"id":"19663","alias":"postgrespro","type":"corporative","title":"Postgres Professional corporate blog","titleHtml":"Postgres Professional corporate blog","isProfiled":false,"relatedData":null},{"id":"358","alias":"postgresql","type":"collective","title":"PostgreSQL","titleHtml":"PostgreSQL","isProfiled":true,"relatedData":null},{"id":"594","alias":"sql","type":"collective","title":"SQL","titleHtml":"SQL","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EAccording to Gartner, natural language queries will replace SQL as early as 2026. \u003C\u002Fp\u003E\u003Cp\u003EWhile Gartner's prediction may be optimistic, the shift toward natural language interfaces for databases is inevitable. The timeline may vary, but the transition itself is a certainty.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fe8a\u002Fa36\u002Fe48\u002Fe8aa36e4891c53488f773392655bba6c.jpg","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fe8a\u002Fa36\u002Fe48\u002Fe8aa36e4891c53488f773392655bba6c.jpg","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"review","readingTime":4,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"sql"},{"titleHtml":"ai"},{"titleHtml":"artificial intelligence"},{"titleHtml":"dbms"}]},"903436":{"id":"903436","timePublished":"2025-04-23T03:36:16+00:00","isCorporative":false,"lang":"en","titleHtml":"Horsehead Nebula","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[],"author":{"id":"1098674","alias":"klimkovsky","fullname":"Андрей Климковский","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F870\u002F341\u002F6a5\u002F8703416a58aeb2f3580e8fa11a90a8ef.jpg","speciality":"CEO of NEANE Records"},"statistics":{"commentsCount":0,"favoritesCount":2,"readingCount":1049,"score":0,"votesCount":0,"votesCountPlus":0,"votesCountMinus":0},"hubs":[{"id":"22022","alias":"astronomy","type":"collective","title":"Astronomy","titleHtml":"Astronomy","isProfiled":false,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EThe whimsical image of a chess knight in profile among the stars is perhaps the most recognizable among deep space objects. It can be said that the Horsehead Nebula tops the recognition rankings among nebulae and galaxies. Perhaps the Andromeda and Orion Nebulae resonate more with the general public, but only specialists and advanced amateurs know what they look like. Even among them, there are often cases when the famous Andromeda Galaxy is confused with another galaxy, even by experienced popularizers of astronomy. The Orion Nebula, too, can look different in pictures taken with various filters. Yet, the profile of the chess knight allows every inhabitant of Earth to recognize that in front of them is the one-of-a-kind and completely unique Horsehead Nebula.\u003C\u002Fp\u003E\u003Cp\u003ELet's begin by noting that when we talk about the Horsehead Nebula, we refer to two fundamentally different formations in this region of our Galaxy. Only together do they create this memorable visual image. Moreover, what we see—the glowing diffuse background—is not the Horsehead Nebula. It is a dark silhouette against a light background—a bizarrely shaped dust cloud opaque to the visible radiation of stars and nebulae. If there were no relatively bright emission nebula behind it, we might not even know about any dark gas-dust cosmic horse.\u003C\u002Fp\u003E\u003Cp\u003EThe background for the recognizable horse profile is created by the hydrogen nebula IC 434, discovered by William Herschel in the late 18th century. However, Herschel did not notice any amusing details in the outline of this nebula, although he was an excellent observer—much more keen-sighted and attentive than most of his followers. There are also objective reasons for this—telescopes in Herschel's era were imperfect, and their dark metal mirrors lost from 50% to 80% of the light that entered them.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fffa\u002F299\u002F09b\u002Fffa29909b927a73d88b22889301f3f3d.jpg","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fffa\u002F299\u002F09b\u002Fffa29909b927a73d88b22889301f3f3d.jpg","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"review","readingTime":6,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"space"},{"titleHtml":"science"},{"titleHtml":"orion"},{"titleHtml":"universe"},{"titleHtml":"astronomy"},{"titleHtml":"nebulae"},{"titleHtml":"horsehead nebula"}]},"903490":{"id":"903490","timePublished":"2025-04-23T07:16:18+00:00","isCorporative":false,"lang":"en","titleHtml":"Yandex huge privacy issue or not?","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[{"type":"sandbox","typeOf":"system","title":"From sandbox","data":{"url":null}}],"author":{"id":"4982895","alias":"zangico","fullname":"Nico","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F756\u002Fb19\u002Fec1\u002F756b19ec1a28939c5ff3bbb5a1f66630.png","speciality":null},"statistics":{"commentsCount":1,"favoritesCount":1,"readingCount":1710,"score":5,"votesCount":4,"votesCountPlus":4,"votesCountMinus":0},"hubs":[{"id":"50","alias":"infosecurity","type":"collective","title":"Information Security","titleHtml":"Information Security","isProfiled":true,"relatedData":null},{"id":"22026","alias":"itcompanies","type":"collective","title":"IT-companies","titleHtml":"IT-companies","isProfiled":false,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EHi to everyone!\u003C\u002Fp\u003E\u003Cp\u003EI'm new here. Someone told me that Habr is like russian reddit for developers (and maybe not). And I'm here today to share my story and get opinions from you, part of this community.\u003C\u002Fp\u003E\u003Cp\u003EIn August 2024 I visited Moscow, and got Russian starter pack, even if foregneir :-)\u003Cbr\u003EWill be useful later because I'm moving here, Русский язык coming soon, извините!\u003C\u002Fp\u003E\u003Cp\u003ESo let's start with getting a new bank account, make a new mobile number and start to register to some essential service platforms like Metro, Gorod, ВВ, Perekrostak and Yandex for delivery and taxis. And in every service I found something strange. A certain \"Ivan\" (I've changed the name for privacy) is present in all my accounts where I try to register. \u003Cbr\u003EThat's it! The phone number that my bank gave me was just.... recyled! So I could start to get personal data through all these existing account on this new phone number of mine but the most shocking thing occured today!\u003C\u002Fp\u003E\u003Cp\u003EAlarm on 9:00, I woke up and I got a message by Yandex:\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F547\u002Fc43\u002F7c5\u002F547c437c54bad054db1277259b4f8094.png","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F547\u002Fc43\u002F7c5\u002F547c437c54bad054db1277259b4f8094.png","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":null,"readingTime":2,"complexity":null,"isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"security"},{"titleHtml":"yandex"},{"titleHtml":"privacy"},{"titleHtml":"yandex.ru"},{"titleHtml":"personal data"}]},"903870":{"id":"903870","timePublished":"2025-04-24T06:04:42+00:00","isCorporative":false,"lang":"en","titleHtml":"GeeTest CAPTCHA Bypass: How to Solve a Sophisticated Anti-Bot System","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[{"type":"translation","typeOf":"system","title":"Translation","data":{"originalAuthorName":"Alex","originalUrl":"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F903096\u002F"}}],"author":{"id":"1981533","alias":"kentavr009","fullname":"Alex","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fb05\u002F458\u002F3a7\u002Fb054583a7ca1cc5b058bb65d3f5f46b0.jpeg","speciality":"Marketing Specialist"},"statistics":{"commentsCount":0,"favoritesCount":2,"readingCount":1446,"score":1,"votesCount":1,"votesCountPlus":1,"votesCountMinus":0},"hubs":[{"id":"340","alias":"python","type":"collective","title":"Python","titleHtml":"Python","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EOne could write, “Experienced developers working on parsing and automation often face the need to bypass modern CAPTCHAs.” But that’s too boring… I’d rather start like this—continuing to explore the amusing world of CAPTCHAs, I finally stumbled upon the Chinese variant of protection: the GeeTest CAPTCHA. Let’s break down what this beast is, where it dwells, and why you should (or shouldn’t) fear it… You’ll understand as we go!\u003C\u002Fp\u003E\u003Cp\u003EGeeTest is one of the advanced anti-bot systems combining user puzzles with behavioral analysis. I decided to take a close look at recognizing the GeeTest CAPTCHA under real-world conditions and figure out how to bypass GeeTest with various methods. But first—a classic introduction (which, by the way, may be more interesting than the practical part of the article, since bypassing the GeeTest CAPTCHA is already a non-trivial task for many readers).\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F1c0\u002Fe0d\u002Fe86\u002F1c0e0de861cc3a7e34c8673585939765.png","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F1c0\u002Fe0d\u002Fe86\u002F1c0e0de861cc3a7e34c8673585939765.png","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"review","readingTime":13,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"geetest"}]},"904848":{"id":"904848","timePublished":"2025-04-28T07:00:25+00:00","isCorporative":false,"lang":"en","titleHtml":"What is DPI Engine?","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[{"type":"translation","typeOf":"system","title":"Translation","data":{"originalAuthorName":"Vyacheslav Slinkin","originalUrl":"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F889082\u002F"}}],"author":{"id":"874611","alias":"slinkinone","fullname":"Вячеслав Слинкин","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F761\u002Fa26\u002F617\u002F761a26617e647a881c58e966d0d0ba83.png","speciality":"R&D, Traffic Analysis"},"statistics":{"commentsCount":1,"favoritesCount":2,"readingCount":1194,"score":1,"votesCount":1,"votesCountPlus":1,"votesCountMinus":0},"hubs":[{"id":"50","alias":"infosecurity","type":"collective","title":"Information Security","titleHtml":"Information Security","isProfiled":true,"relatedData":null},{"id":"17123","alias":"network_technologies","type":"collective","title":"Network technologies","titleHtml":"Network technologies","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EFor people familiar with the term DPI (\u003Cstrong\u003EDeep Packet Inspection\u003C\u002Fstrong\u003E), it often carries an unpleasant association: blocking, regulators, censorship, tightening controls. In reality, DPI is simply the name of a technology whose essence lies in the deep analysis of network traffic. Deep traffic analysis involves identifying protocols, extracting the most significant fields and metadata, classifying internet services, and analyzing the nature of network flows. I will explain how such solutions work in this article.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F39a\u002Fe91\u002F946\u002F39ae91946f880ee58dd231182b758d64.png","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F39a\u002Fe91\u002F946\u002F39ae91946f880ee58dd231182b758d64.png","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":null,"readingTime":25,"complexity":"medium","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"dpi"},{"titleHtml":"deep packet inspection"},{"titleHtml":"network protocols"},{"titleHtml":"dpi framework"},{"titleHtml":"dpi engine"},{"titleHtml":"network traffic analysis"},{"titleHtml":"internet services"},{"titleHtml":"traffic classification"},{"titleHtml":"website blocking"},{"titleHtml":"service blocking"}]},"904856":{"id":"904856","timePublished":"2025-04-27T12:53:15+00:00","isCorporative":false,"lang":"en","titleHtml":"Build better, faster using TDD","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[],"author":{"id":"2768181","alias":"xini","fullname":"Максим","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fa5a\u002F149\u002F19a\u002Fa5a14919ad309826f0fda9cae0417fa9.jpg","speciality":"Senior Java Developer"},"statistics":{"commentsCount":0,"favoritesCount":2,"readingCount":1008,"score":0,"votesCount":0,"votesCountPlus":0,"votesCountMinus":0},"hubs":[{"id":"210","alias":"it_testing","type":"collective","title":"IT systems testing","titleHtml":"IT systems testing","isProfiled":true,"relatedData":null},{"id":"7606","alias":"tdd","type":"collective","title":"TDD","titleHtml":"TDD","isProfiled":true,"relatedData":null},{"id":"7504","alias":"refactoring","type":"collective","title":"Designing and refactoring","titleHtml":"Designing and refactoring","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EWe all strive to build better software, and to do it faster. I believe Test-driven Development offers us a path towards this goal. Still struggling to efficiently utilize this approach? Then I invite you to discuss my tips and tricks to unlock the benefits of TDD!\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fb8b\u002F159\u002F055\u002Fb8b15905564c5aaee9246bc26f1256ac.jpeg","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fb8b\u002F159\u002F055\u002Fb8b15905564c5aaee9246bc26f1256ac.jpeg","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"opinion","readingTime":16,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"agile"},{"titleHtml":"unit testing"},{"titleHtml":"tdd"},{"titleHtml":"software development"},{"titleHtml":"refactoring"},{"titleHtml":"testing"},{"titleHtml":"test-driven development"},{"titleHtml":"code quality"},{"titleHtml":"test first"}]},"905288":{"id":"905288","timePublished":"2025-04-29T14:35:08+00:00","isCorporative":false,"lang":"en","titleHtml":"How to Fail Those Students Who Rely on ChatGPT","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[],"author":{"id":"372461","alias":"YuriPanchul","fullname":"Юрий Панчул \u002F Yuri Panchul","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F0a9\u002F21b\u002F7c1\u002F0a921b7c13a624616c9da17b980b69a9.jpg","speciality":"Проектировщик CPU, GPU, сетевых микросхем"},"statistics":{"commentsCount":0,"favoritesCount":0,"readingCount":1816,"score":6,"votesCount":4,"votesCountPlus":4,"votesCountMinus":0},"hubs":[{"id":"19733","alias":"fpga","type":"collective","title":"FPGA","titleHtml":"FPGA","isProfiled":true,"relatedData":null},{"id":"19737","alias":"controllers","type":"collective","title":"Programming microcontrollers","titleHtml":"Programming microcontrollers","isProfiled":true,"relatedData":null},{"id":"19439","alias":"machine_learning","type":"collective","title":"Machine learning","titleHtml":"Machine learning","isProfiled":true,"relatedData":null},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Artificial Intelligence","titleHtml":"Artificial Intelligence","isProfiled":false,"relatedData":null},{"id":"21956","alias":"cpu","type":"collective","title":"CPU","titleHtml":"CPU","isProfiled":false,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EWe at \u003Ca href=\"https:\u002F\u002Fverilog-meetup.com\u002F\" rel=\"noopener noreferrer nofollow\"\u003EVerilog Meetup\u003C\u002Fa\u003E constructed an \u003Ca href=\"https:\u002F\u002Fverilog-meetup.com\u002F2025\u002F02\u002F11\u002Fa-new-edition-of-systemverilog-homework-adds-exercises-that-use-fpu-of-an-open-source-cpu\u002F\" rel=\"noopener noreferrer nofollow\"\u003Eexam\u002Finterview problem\u003C\u002Fa\u003E that has an interesting property: if a student tries to figure out a solution by thinking by himself, he usually succeeds; however if he dumps the problem on ChatGPT, the solution fails (does not pass the automated test), and the student goes into a death spiral of futility, kicking ChatGPT to get the solution right.\u003C\u002Fp\u003E\u003Cp\u003EThere is nothing weird about the problem, we do this in the industry all the time:\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fa16\u002Fb7a\u002Fb92\u002Fa16b7ab92f1354de24ba7c81c2a206ff.png","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fa16\u002Fb7a\u002Fb92\u002Fa16b7ab92f1354de24ba7c81c2a206ff.png","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":null,"readingTime":3,"complexity":null,"isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"fpga"},{"titleHtml":"verilog"},{"titleHtml":"asic"},{"titleHtml":"systemverilog"},{"titleHtml":"школа синтеза"},{"titleHtml":"chatgpt"},{"titleHtml":"школа синтеза цифровых схем"},{"titleHtml":"verilog meetup"},{"titleHtml":"wally cpu"},{"titleHtml":"functional verification"}]},"905392":{"id":"905392","timePublished":"2025-04-29T07:28:15+00:00","isCorporative":false,"lang":"en","titleHtml":"It’s Never Too Late: My Start into DevOps","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[],"author":{"id":"4950677","alias":"chevapiops","fullname":null,"avatarUrl":null,"speciality":null},"statistics":{"commentsCount":0,"favoritesCount":1,"readingCount":1045,"score":0,"votesCount":0,"votesCountPlus":0,"votesCountMinus":0},"hubs":[{"id":"20740","alias":"career","type":"collective","title":"IT career","titleHtml":"IT career","isProfiled":false,"relatedData":null},{"id":"20788","alias":"devops","type":"collective","title":"DevOps","titleHtml":"DevOps","isProfiled":true,"relatedData":null},{"id":"6398","alias":"it-infrastructure","type":"collective","title":"IT Infrastructure","titleHtml":"IT Infrastructure","isProfiled":true,"relatedData":null},{"id":"20696","alias":"study","type":"collective","title":"Studying in IT","titleHtml":"Studying in IT","isProfiled":false,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003E\u003Cstrong\u003EIt’s Never Too Late: My Start into DevOps\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003ESummary\u003C\u002Fp\u003E\u003Cp\u003ELearn about the challenges, growth, and lessons gained — from juggling work, studies, and a pet project to achieving a dream.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F152\u002F9c5\u002Fe7a\u002F1529c5e7a5e3b4d57d06f4ebebae3d82.png","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F152\u002F9c5\u002Fe7a\u002F1529c5e7a5e3b4d57d06f4ebebae3d82.png","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":null,"readingTime":8,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"history"},{"titleHtml":"education"},{"titleHtml":"work"},{"titleHtml":"technology"},{"titleHtml":"productivity"}]},"905468":{"id":"905468","timePublished":"2025-04-29T09:54:44+00:00","isCorporative":false,"lang":"en","titleHtml":"Google ADK: Easiest Way to Build an AI Agent","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[],"author":{"id":"3628465","alias":"profleaddev","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F850\u002Ff1c\u002F026\u002F850f1c026e8139b72b529e7eafd76ac2.jpg","speciality":"Helping Devs Stay Ahead with WebDev, AI & Tools"},"statistics":{"commentsCount":0,"favoritesCount":2,"readingCount":1538,"score":4,"votesCount":2,"votesCountPlus":2,"votesCountMinus":0},"hubs":[{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Artificial Intelligence","titleHtml":"Artificial Intelligence","isProfiled":false,"relatedData":null},{"id":"359","alias":"programming","type":"collective","title":"Programming","titleHtml":"Programming","isProfiled":true,"relatedData":null},{"id":"340","alias":"python","type":"collective","title":"Python","titleHtml":"Python","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EIn this tutorial, I’ll explain in simple terms what AI, AI agents, and workflows are, and then I’ll walk you through building your very first AI agent in Python using Google’s Agent Development Kit (ADK). By the end, you’ll understand the differences between these concepts and have a working content-assistant agent you can run from your terminal or a web interface.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fd27\u002F161\u002Fd35\u002Fd27161d35715ad45f1019b8c54abcfe5.png","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fd27\u002F161\u002Fd35\u002Fd27161d35715ad45f1019b8c54abcfe5.png","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"tutorial","readingTime":7,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"google"},{"titleHtml":"python"},{"titleHtml":"ai"},{"titleHtml":"python3"},{"titleHtml":"ai agent"},{"titleHtml":"ai agents"},{"titleHtml":"google adk"},{"titleHtml":"agent development kit"},{"titleHtml":"ai agent tutorial"},{"titleHtml":"how to build ai agent"}]},"905812":{"id":"905812","timePublished":"2025-04-30T07:44:12+00:00","isCorporative":false,"lang":"en","titleHtml":"How I Created Perfect Wiki and Reached $250K in Annual Revenue Without Investors","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[{"type":"translation","typeOf":"system","title":"Translation","data":{"originalAuthorName":"Ilia Pirozhenko","originalUrl":"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F903376\u002F"}}],"author":{"id":"95110","alias":"sochix","fullname":"ILIA","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F1b5\u002Ff6f\u002F090\u002F1b5f6f09059737acf3954c4ee8076ca1.jpg","speciality":"Solopreneur"},"statistics":{"commentsCount":2,"favoritesCount":1,"readingCount":84692,"score":5,"votesCount":2,"votesCountPlus":2,"votesCountMinus":0},"hubs":[{"id":"20722","alias":"startuprise","type":"collective","title":"Start-up development","titleHtml":"Start-up development","isProfiled":false,"relatedData":null},{"id":"20752","alias":"business_models","type":"collective","title":"Business Models","titleHtml":"Business Models","isProfiled":true,"relatedData":null},{"id":"20726","alias":"productpm","type":"collective","title":"Product Management","titleHtml":"Product Management","isProfiled":true,"relatedData":null},{"id":"20704","alias":"web_monetization","type":"collective","title":"Web services monetization","titleHtml":"Web services monetization","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EHi, my name is Ilia. I founded \u003Cstrong\u003EPerfect Wiki\u003C\u002Fstrong\u003E — a SaaS product for creating internal company knowledge bases that works directly within Microsoft Teams. We created a simple and convenient tool for storing, editing, and sharing knowledge within companies. It all started with the idea to resolve one specific pain point: the built-in Wiki in Microsoft Teams offered was inconvenient, and there was no worthy alternatives with full integration to the platform.\u003C\u002Fp\u003E\u003Cp\u003EIn this article, I want to share how the idea came about, the mistakes I made, how I found my first customers, and how I gradually grew to a steady income of $250,000 a year over five years. All of this — without investors, a 20-person team, or a “Series A” round.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F9ac\u002F319\u002F7a7\u002F9ac3197a7f489007bedf5826bd13a07c.png","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F9ac\u002F319\u002F7a7\u002F9ac3197a7f489007bedf5826bd13a07c.png","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"retrospective","readingTime":6,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"стартап"},{"titleHtml":"бизнес-модель"},{"titleHtml":"бизнес-модели"},{"titleHtml":"монетизация проекта"},{"titleHtml":"создание бизнеса"},{"titleHtml":"монетизация приложений"},{"titleHtml":"бизнес с нуля"},{"titleHtml":"продвижение продукта"}]},"905934":{"id":"905934","timePublished":"2025-04-30T12:59:08+00:00","isCorporative":true,"lang":"en","titleHtml":"PostgreSQL 18: Part 4, or CommitFest 2025-01","editorVersion":"1.0","postType":"article","publicationType":"article","postLabels":[{"type":"translation","typeOf":"system","title":"Translation","data":{"originalAuthorName":"Pavel Luzanov","originalUrl":"https:\u002F\u002Fhabr.com\u002Fen\u002Fcompanies\u002Fpostgrespro\u002Farticles\u002F886292\u002F"}}],"author":{"id":"686907","alias":"kaze_no_saga","fullname":"Александр Мелешко","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fdcc\u002F532\u002Ff26\u002Fdcc532f26204fdcf8498d744aefac55d.jpg","speciality":"Технический писатель"},"statistics":{"commentsCount":0,"favoritesCount":1,"readingCount":706,"score":0,"votesCount":0,"votesCountPlus":0,"votesCountMinus":0},"hubs":[{"id":"19663","alias":"postgrespro","type":"corporative","title":"Postgres Professional corporate blog","titleHtml":"Postgres Professional corporate blog","isProfiled":false,"relatedData":null},{"id":"358","alias":"postgresql","type":"collective","title":"PostgreSQL","titleHtml":"PostgreSQL","isProfiled":true,"relatedData":null},{"id":"594","alias":"sql","type":"collective","title":"SQL","titleHtml":"SQL","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003E\u003Cimg src=\"https:\u002F\u002Fhabrastorage.org\u002Fwebt\u002Ffc\u002Fru\u002Fch\u002Ffcruchd4hzgooayvankxaup0gpe.png\"\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\r\n\u003Cp\u003EWe continue to follow the news about PostgreSQL 18. The January CommitFest brings in some notable improvements to monitoring, as well as other new features.\u003C\u002Fp\u003E\u003Cbr\u003E\r\n\u003Cp\u003EYou can find previous reviews of PostgreSQL 18 CommitFests here: \u003Ca href=\"https:\u002F\u002Fpostgrespro.com\u002Fblog\u002Fpgsql\u002F5971431\" rel=\"nofollow noopener noreferrer\"\u003E2024-07\u003C\u002Fa\u003E, \u003Ca href=\"https:\u002F\u002Fpostgrespro.com\u002Fblog\u002Fpgsql\u002F5971632\" rel=\"nofollow noopener noreferrer\"\u003E2024-09\u003C\u002Fa\u003E, \u003Ca href=\"https:\u002F\u002Fpostgrespro.com\u002Fblog\u002Fpgsql\u002F5971769\" rel=\"nofollow noopener noreferrer\"\u003E2024-11\u003C\u002Fa\u003E.\u003C\u002Fp\u003E","imageUrl":null,"buttonTextHtml":"Read more →","image":null},"status":"published","plannedPublishTime":null,"checked":null,"format":"digest","readingTime":13,"complexity":"medium","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"sql"},{"titleHtml":"postgresql"},{"titleHtml":"postgres"},{"titleHtml":"18"},{"titleHtml":"commitfest"}]},"906578":{"id":"906578","publicationType":"post","timePublished":"2025-05-03T09:33:41+00:00","lang":"en","editorVersion":2,"textHtml":"\u003Cp\u003E\u003Cstrong\u003E\u003Cu\u003EChatGPT:\u003C\u002Fu\u003E \u003C\u002Fstrong\u003ELOOKING FOR A\u003Cstrong\u003E \u003Cu\u003ECAFFEINE\u003C\u002Fu\u003E \u003C\u002Fstrong\u003ESUBSTITUTE\u003C\u002Fp\u003E\u003Cp\u003EAlthough \u003Cstrong\u003E\u003Cu\u003Ecaffeine\u003C\u002Fu\u003E\u003C\u002Fstrong\u003E stimulates mental activity and aids in \u003Cstrong\u003Ee\u003C\u002Fstrong\u003ESports\u002Fgames and late-night programming, it has many \u003Cstrong\u003Eside effects\u003C\u002Fstrong\u003E, such as \u003Cu\u003Eincreased blood pressure\u003C\u002Fu\u003E and \u003Cu\u003Ecrazy heart rate\u003C\u002Fu\u003E, a sharp rise and quick drop in stimulation. Therefore, we need a high-quality alternative to caffeine, and we will search for it using AI. Potential candidates to replace caffeine are Theacrine (or TeaCrine) and N-Phenethyldimethylamine Citrate (USA FDA said Ok). \u003C\u002Fp\u003E\u003Cp\u003EChatGPT successfully created a very complex table, even with a calculated column based on FUZZY criteria (if you can do this in SQL — you're a genius!), but it struggled with sorting the table. Attention: there is an image below, links are not clickable.\u003C\u002Fp\u003E\u003Cfigure class=\"full-width \"\u003E\u003Cimg src=\"https:\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F6b1\u002Fbb7\u002F423\u002F6b1bb74234ca5fee1cbbe9b90c08a901.png\" alt=\"this is an image, links are not clickable\" title=\"this is an image, links are not clickable\" width=\"1200\" height=\"366\"\u003E\u003Cdiv\u003E\u003Cfigcaption\u003Ethis is an image, links are not clickable\u003C\u002Ffigcaption\u003E\u003C\u002Fdiv\u003E\u003C\u002Ffigure\u003E\u003Cp\u003EIn the first numeric column, it failed to sort the numbers in descending order. I spent about 15-20 minutes trying. I experimented with various prompts and explanations. This is strange.\u003C\u002Fp\u003E\u003Cp\u003EThis tool (\u003Cstrong\u003EChatGPT\u003C\u002Fstrong\u003E) \u003Cu\u003Eunderstands table manipulation commands very well\u003C\u002Fu\u003E. In this example, I asked it to create a table based on data from large stores, specified which columns were needed and what information they should contain, indicated the order of the columns, including relative positioning — for instance, \"insert a column with such-and-such data before this column\" — and even more. \u003C\u002Fp\u003E\u003Cp\u003EIT was able to create a \u003Cstrong\u003ESUMMARY\u003C\u002Fstrong\u003E column based on previously generated columns — this is the column with weighted sums of substance weights from other columns, and IT independently found the weighting coefficients quite accurately. \u003C\u002Fp\u003E\u003Cp\u003EMoreover, for each product, IT managed to identify the substance composition based on specific criteria and listed them, creating a separate column. Not all substances, but only those filtered by certain criteria (only those that are not caffeine but have an effect similar to caffeine — try programming such a query in SQL manually without AI, taking into account the \u003Cstrong\u003Efuzzy criterion\u003C\u002Fstrong\u003E of similarity of effects, and also determine the similarity coefficient for creating the weighted sum of substance masses per serving of the dietary supplement). And it even partially managed to sort by the \u003Cu\u003Eweighted sum\u003C\u002Fu\u003E. \u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EBut despite completing so much complex work, it still made a small mistake with sorting\u003C\u002Fstrong\u003E.\u003C\u002Fp\u003E","previewHtml":" ChatGPT: LOOKING FOR A CAFFEINE SUBSTITUTE Although...","isCorporative":false,"hubs":[{"id":"21912","alias":"biotech","type":"collective","title":"Biotechnologies","titleHtml":"Biotechnologies","isProfiled":false,"relatedData":null},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Artificial Intelligence","titleHtml":"Artificial Intelligence","isProfiled":false,"relatedData":null},{"id":"21996","alias":"health","type":"collective","title":"Health","titleHtml":"Health","isProfiled":false,"relatedData":null},{"id":"22002","alias":"cybersport","type":"collective","title":"Cybersport","titleHtml":"Cybersport","isProfiled":false,"relatedData":null},{"id":"22750","alias":"biology","type":"collective","title":"Biology","titleHtml":"Biology","isProfiled":false,"relatedData":null}],"tags":[{"titleHtml":"coffee"},{"titleHtml":"chatgpt"},{"titleHtml":"biohhackers"},{"titleHtml":"biohaking"}],"flows":[{"id":"7","alias":"popsci","title":"PopSci","titleHtml":"PopSci"}],"labels":[],"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"canModerateComments":false,"trackerSubscribed":false,"emailSubscribed":false},"statistics":{"commentsCount":0,"favoritesCount":3,"readingCount":9067,"score":0,"votesCount":2,"votesCountPlus":1,"votesCountMinus":1},"author":{"id":"2338175","alias":"Oksenija","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F33e\u002F7e0\u002Fa3c\u002F33e7e0a3c797bc7a7abb38eb3e7e1982.jpg","speciality":null},"rulesRemindEnabled":false,"checked":false,"commentsEnabled":{"status":true,"reason":null},"metadata":null,"status":"published","plannedPublishTime":null,"isInBlacklist":null,"flowNew":null,"votesEnabled":true},"906830":{"id":"906830","timePublished":"2025-05-05T17:36:36+00:00","isCorporative":true,"lang":"en","titleHtml":"One-click Postgres Pro optimization with pgpro_tune","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[{"type":"translation","typeOf":"system","title":"Translation","data":{"originalAuthorName":"https:\u002F\u002Fhabr.com\u002Fru\u002Fusers\u002FLesnoyChelovek\u002F","originalUrl":"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fpostgrespro\u002Farticles\u002F904462\u002F"}}],"author":{"id":"4316720","alias":"melanny20","fullname":null,"avatarUrl":null,"speciality":null},"statistics":{"commentsCount":0,"favoritesCount":2,"readingCount":433,"score":0,"votesCount":0,"votesCountPlus":0,"votesCountMinus":0},"hubs":[{"id":"19663","alias":"postgrespro","type":"corporative","title":"Postgres Professional corporate blog","titleHtml":"Postgres Professional corporate blog","isProfiled":false,"relatedData":null},{"id":"358","alias":"postgresql","type":"collective","title":"PostgreSQL","titleHtml":"PostgreSQL","isProfiled":true,"relatedData":null},{"id":"20788","alias":"devops","type":"collective","title":"DevOps","titleHtml":"DevOps","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EImagine a familiar situation: it’s Monday morning, tasks are piling up, and you need to quickly spin up a new service using Postgres Pro. Or maybe you’ve just upgraded your database server over the weekend — added more CPUs, more RAM. \u003C\u002Fp\u003E\u003Cp\u003EHere’s how to get your database tuned and ready to make the most of the new hardware and workload, without wasting time.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F33f\u002Ff13\u002Fd73\u002F33ff13d73671bd3c6be08800881c0a0d.jpg","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F33f\u002Ff13\u002Fd73\u002F33ff13d73671bd3c6be08800881c0a0d.jpg","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"review","readingTime":4,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"postgresql"},{"titleHtml":"optimization"},{"titleHtml":"database"},{"titleHtml":"setup"},{"titleHtml":"postgres pro"},{"titleHtml":"postgres pro enterprise"},{"titleHtml":"postgres pro standard"}]},"907210":{"id":"907210","timePublished":"2025-05-06T06:17:26+00:00","isCorporative":false,"lang":"en","titleHtml":"Tips and methods for conducting user research with children","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[],"author":{"id":"3573265","alias":"ArcaneGamingcom","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fbef\u002F009\u002F69d\u002Fbef00969db68a919adae3b19e7d45c55.png","speciality":null},"statistics":{"commentsCount":0,"favoritesCount":0,"readingCount":768,"score":1,"votesCount":1,"votesCountPlus":1,"votesCountMinus":0},"hubs":[{"id":"6345","alias":"mobile_dev","type":"collective","title":"Development of mobile applications","titleHtml":"Development of mobile applications","isProfiled":true,"relatedData":null},{"id":"17107","alias":"android_dev","type":"collective","title":"Development for Android","titleHtml":"Development for Android","isProfiled":true,"relatedData":null},{"id":"7773","alias":"gamedev","type":"collective","title":"Game development","titleHtml":"Game development","isProfiled":true,"relatedData":null},{"id":"19309","alias":"lib","type":"collective","title":"Professional literature","titleHtml":"Professional literature","isProfiled":true,"relatedData":null},{"id":"20844","alias":"game_promotion","type":"collective","title":"Games promotion","titleHtml":"Games promotion","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EWhen creating an app or any other software product for children, one of the hardest parts of the process is conducting user research correctly. Although working with kids might seem fun and entertaining, it takes certain skills to get them engaged in testing your product and voicing their opinion so you could gather all the necessary information. It’s important to understand that mentally kids function differently than adults, so working with a young target audience requires a different approach. Treating children like adults in the UX research process can lead to serious mistakes: they might not get a proper understanding of your product and you might end up getting wrong results, only wasting your time and budget. In order to avoid that, we’ve collected a few tips below that might help you communicate with kids more effectively for a productive and fruitful research session.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F2c5\u002Fe35\u002F82d\u002F2c5e3582dd9e3add15133913c93db06a.jpg","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F2c5\u002Fe35\u002F82d\u002F2c5e3582dd9e3add15133913c93db06a.jpg","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"roadmap","readingTime":5,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"ui"},{"titleHtml":"ux"},{"titleHtml":"kids"},{"titleHtml":"uitableview"},{"titleHtml":"uxrussia"},{"titleHtml":"uikit"},{"titleHtml":"design principles"},{"titleHtml":"uicollectionview"},{"titleHtml":"design system"},{"titleHtml":"uix"}]},"908240":{"id":"908240","timePublished":"2025-05-10T14:50:36+00:00","isCorporative":false,"lang":"en","titleHtml":"About the C++ static analyzer as a Clang plugin","editorVersion":"1.0","postType":"article","publicationType":"article","postLabels":[],"author":{"id":"97927","alias":"rsashka","fullname":"Александр Рябиков","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fad5\u002Fd5f\u002Feb2\u002Fad5d5feb2fbf547d4d74f65d041cb2c7.jpg","speciality":"Системный архитектор"},"statistics":{"commentsCount":0,"favoritesCount":2,"readingCount":702,"score":0,"votesCount":0,"votesCountPlus":0,"votesCountMinus":0},"hubs":[{"id":"559","alias":"cpp","type":"collective","title":"C++","titleHtml":"C++","isProfiled":true,"relatedData":null},{"id":"17188","alias":"compilers","type":"collective","title":"Compilers","titleHtml":"Compilers","isProfiled":true,"relatedData":null},{"id":"359","alias":"programming","type":"collective","title":"Programming","titleHtml":"Programming","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003E\u003Cimg src=\"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fwebt\u002Fy-\u002Ft8\u002F37\u002Fy-t837zqbk2jynlorochjcqfuty.jpeg\" alt=\"image\"\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\r\n\u003Cp\u003EThis article is based on the experience of developing the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frsashka\u002Fmemsafe\" rel=\"nofollow noopener noreferrer\"\u003Ememsafe\u003C\u002Fa\u003E library, which, using the Clang plugin, adds safe memory management and invalidation control of reference data types to C++ during source code compilation.\u003C\u002Fp\u003E","imageUrl":null,"buttonTextHtml":"Read more →","image":null},"status":"published","plannedPublishTime":null,"checked":null,"format":"retrospective","readingTime":9,"complexity":"medium","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"plugin"},{"titleHtml":"с++"},{"titleHtml":"clang"}]},"908464":{"id":"908464","timePublished":"2025-05-12T03:03:40+00:00","isCorporative":false,"lang":"en","titleHtml":"FunCaptcha (Arkose Labs) solver: Principles of Operation, Features, and Methods for Automated Bypass","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[{"type":"translation","typeOf":"system","title":"Translation","data":{"originalAuthorName":"Alex","originalUrl":"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F907218\u002F"}}],"author":{"id":"1981533","alias":"kentavr009","fullname":"Alex","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fb05\u002F458\u002F3a7\u002Fb054583a7ca1cc5b058bb65d3f5f46b0.jpeg","speciality":"Marketing Specialist"},"statistics":{"commentsCount":0,"favoritesCount":0,"readingCount":546,"score":0,"votesCount":0,"votesCountPlus":0,"votesCountMinus":0},"hubs":[{"id":"340","alias":"python","type":"collective","title":"Python","titleHtml":"Python","isProfiled":true,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EWe continue our journey through the world of CAPTCHAs (Fantastic CAPTCHAs and Where to Find Them, as well as Methods to Combat Them), and today we encounter yet another “tough nut” in the CAPTCHA universe – FunCaptcha (Arkose Labs).\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003EFunCaptcha\u003C\u002Fstrong\u003E is a type of CAPTCHA developed by Arkose Labs that offers users small puzzles instead of the usual tasks like recognizing distorted text or selecting images containing buses. In traditional CAPTCHAs (e.g., reCAPTCHA), verification often relies on recognizing distorted characters or simple images. Arkose Labs took a different route: their “entertaining” CAPTCHAs feature interactive challenges with 3D objects, logic puzzles, and audio questions. This approach is intended to be user-friendly for humans while complicating life for bots.\u003C\u002Fp\u003E\u003Cp\u003ETypical FunCaptcha challenges include:\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F932\u002Faa0\u002F6cf\u002F932aa06cf8b307028833012319c5cd4d.jpg","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F932\u002Faa0\u002F6cf\u002F932aa06cf8b307028833012319c5cd4d.jpg","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"review","readingTime":12,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"funcaptcha"},{"titleHtml":"arcose lab"}]},"908756":{"id":"908756","publicationType":"post","timePublished":"2025-05-12T16:24:43+00:00","lang":"en","editorVersion":2,"textHtml":"\u003Cp\u003EУ меня есть знакомый энтузиаст LLM, который также изучает верилог. Я попросил его написать инструкцию к упражнению с неким сенсором, который он интегрировал. Он разумеется сбросил это на LLM, я почитал и понял, что LLM нужно запретить как распостранение Экстази и \"солей\" среди молодежи. Точно так же как \"дизайнерские наркотики\" дают ощущение счастья и достижения без труда, сгенеренная LLM документация выглядит как реальная, вот только читателю она не поможет.\u003C\u002Fp\u003E\u003Cp\u003EЧто нужно читателю? Картинку как подцепить сенсор к плате, временную диаграмму сигналов которые от него выходят и пару слов про проблемы, которые у него возникнут (дребезг) и как их стоит решать. Так чтобы было достаточно информации, чтобы сесть и написать код на верилоге.\u003C\u002Fp\u003E\u003Cp\u003EЧто выдал LLM? Сначала пять абзацев мутного словестного описания что \"изменения переключателей проходят некоторую последовательность, позволяющую определить направление\", с галлюцинациями что движется и что неподвижно. Потом не имеющую отношения к задаче информацию, из каких материалов делаются эти сенсоры в разных странах мира, чтобы быть дешевыми для хоббистов и образовательных учреждений. Далее про разные способы решения проблемы дребезга, в том числе способы, не имеющие отношения к данной ситуации. И наконец, куски определения пинов из QSF и XDC файлов из случайных примеров в интернете, которые не имеют отношения к описанному примеру, так как в нем во-первых эти файлы не используются (другой вендор, другой способ задания пинов), а во-вторых, в нем эта часть проекта абстрагирована (пользователю вообше это не нужно это делать).\u003C\u002Fp\u003E\u003Cp\u003EТо есть текст просто водит читателя за нос, не давая ему никакой полезной информации для решения проблемы. Но даже это не важно, потому что читатель этот текст читать не будет, так как учует LLM в заголовке и убедится в третьем предложении, после чего перестанет читать. Текст является иллюстрацией терминов \"сделать на отцепись\" и \"из дерьма и палок\".\u003C\u002Fp\u003E\u003Cp\u003EUPD: И самое страшное: это 27 страниц вместо 1 страницы полезной инструкции, которую я ожидал. ДВАДЦАТЬ СЕМЬ СТРАНИЦ ЛАБУДЫ !!!\u003C\u002Fp\u003E\u003Cp\u003EЯ хочу обратно в годы, когда этого ужаса не было. Нашу цивилизацию ждут тяжелые времена. Я уже видел в ЖЖ посты агитирующие на перевод всей порноиндустрии на generative AI.\u003C\u002Fp\u003E","previewHtml":" У меня есть знакомый энтузиаст LLM, который также изучает...","isCorporative":false,"hubs":[{"id":"19439","alias":"machine_learning","type":"collective","title":"Machine learning","titleHtml":"Machine learning","isProfiled":true,"relatedData":null},{"id":"19733","alias":"fpga","type":"collective","title":"FPGA","titleHtml":"FPGA","isProfiled":true,"relatedData":null},{"id":"19737","alias":"controllers","type":"collective","title":"Programming microcontrollers","titleHtml":"Programming microcontrollers","isProfiled":true,"relatedData":null},{"id":"20732","alias":"edu","type":"collective","title":"Education abroad","titleHtml":"Education abroad","isProfiled":false,"relatedData":null},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Artificial Intelligence","titleHtml":"Artificial Intelligence","isProfiled":false,"relatedData":null}],"tags":[{"titleHtml":"ChatGPT"},{"titleHtml":"Groq"},{"titleHtml":"DeepSeek"},{"titleHtml":"Verilog"},{"titleHtml":"SystemVerilog"},{"titleHtml":"документация"},{"titleHtml":"страшное будущее"},{"titleHtml":"сенсоры"},{"titleHtml":"дребезг"},{"titleHtml":"плис"}],"flows":[{"id":"1","alias":"develop","title":"Development","titleHtml":"Development"},{"id":"3","alias":"management","title":"Management","titleHtml":"Management"},{"id":"7","alias":"popsci","title":"PopSci","titleHtml":"PopSci"}],"labels":[],"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"canModerateComments":false,"trackerSubscribed":false,"emailSubscribed":false},"statistics":{"commentsCount":18,"favoritesCount":1,"readingCount":5620,"score":14,"votesCount":15,"votesCountPlus":14,"votesCountMinus":1},"author":{"id":"372461","alias":"YuriPanchul","fullname":"Юрий Панчул \u002F Yuri Panchul","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F0a9\u002F21b\u002F7c1\u002F0a921b7c13a624616c9da17b980b69a9.jpg","speciality":"Проектировщик CPU, GPU, сетевых микросхем"},"rulesRemindEnabled":false,"checked":false,"commentsEnabled":{"status":true,"reason":null},"metadata":null,"status":"published","plannedPublishTime":null,"isInBlacklist":null,"flowNew":null,"votesEnabled":true},"909080":{"id":"909080","timePublished":"2025-05-13T14:36:22+00:00","isCorporative":false,"lang":"en","titleHtml":"VS Code Agent Mode: How It Helped Me Build a Django App in Minutes","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[],"author":{"id":"3628465","alias":"profleaddev","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002F850\u002Ff1c\u002F026\u002F850f1c026e8139b72b529e7eafd76ac2.jpg","speciality":"Helping Devs Stay Ahead with WebDev, AI & Tools"},"statistics":{"commentsCount":0,"favoritesCount":0,"readingCount":660,"score":0,"votesCount":0,"votesCountPlus":0,"votesCountMinus":0},"hubs":[{"id":"359","alias":"programming","type":"collective","title":"Programming","titleHtml":"Programming","isProfiled":true,"relatedData":null},{"id":"21922","alias":"artificial_intelligence","type":"collective","title":"Artificial Intelligence","titleHtml":"Artificial Intelligence","isProfiled":false,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EI’ve recently been playing with Agent Mode in VS Code, which looks promising. If you’re using VS Code and want to give your development a turbo boost, you’ll want to hear about this.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F02a\u002F3ad\u002F95f\u002F02a3ad95f43e6a6dfb30de7bcc04762b.png","buttonTextHtml":"Read more","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw1560\u002Fgetpro\u002Fhabr\u002Fupload_files\u002F02a\u002F3ad\u002F95f\u002F02a3ad95f43e6a6dfb30de7bcc04762b.png","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":"tutorial","readingTime":4,"complexity":"low","isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"ide"},{"titleHtml":"vscode"},{"titleHtml":"vs code"},{"titleHtml":"github copilot"},{"titleHtml":"vscode extension"},{"titleHtml":"github copilot chat"},{"titleHtml":"ai agent"},{"titleHtml":"ai agents"},{"titleHtml":"vs code agent"},{"titleHtml":"github copilot agent"}]},"909716":{"id":"909716","timePublished":"2025-05-17T12:20:51+00:00","isCorporative":false,"lang":"en","titleHtml":"Что такое EBITDA простыми словами: зачем он нужен и как его посчитать","editorVersion":"2.0","postType":"article","publicationType":"article","postLabels":[],"author":{"id":"4032140","alias":"NiyazUp","fullname":"Нияз","avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fbdd\u002F5dd\u002Fbbb\u002Fbdd5ddbbb5b41fe6bc00c90b7aecc912.png","speciality":null},"statistics":{"commentsCount":0,"favoritesCount":1,"readingCount":99,"score":1,"votesCount":1,"votesCountPlus":1,"votesCountMinus":0},"hubs":[{"id":"21928","alias":"finance","type":"collective","title":"Finance in IT","titleHtml":"Finance in IT","isProfiled":false,"relatedData":null},{"id":"20682","alias":"pm","type":"collective","title":"Project management","titleHtml":"Project management","isProfiled":true,"relatedData":null},{"id":"20722","alias":"startuprise","type":"collective","title":"Start-up development","titleHtml":"Start-up development","isProfiled":false,"relatedData":null}],"flows":null,"relatedData":{"vote":null,"unreadCommentsCount":0,"bookmarked":false,"canComment":false,"canEdit":false,"canViewVotes":false,"votePlus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false},"voteMinus":{"canVote":false,"isChargeEnough":false,"isKarmaEnough":false,"isVotingOver":false,"isPublicationLimitEnough":false}},"leadData":{"textHtml":"\u003Cp\u003EМногие предприниматели знают выручку, но не знают, сколько бизнес реально зарабатывает. В этой статье всё про EBITDA: что это такое, зачем и кому нужен.\u003C\u002Fp\u003E","imageUrl":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fa52\u002Fd9c\u002F352\u002Fa52d9c352c35c39c715272b4518383f6.jpg","buttonTextHtml":"Читать далее","image":{"url":"https:\u002F\u002Fhabrastorage.org\u002Fr\u002Fw780\u002Fgetpro\u002Fhabr\u002Fupload_files\u002Fa52\u002Fd9c\u002F352\u002Fa52d9c352c35c39c715272b4518383f6.jpg","fit":"cover","positionY":0,"positionX":0}},"status":"published","plannedPublishTime":null,"checked":null,"format":null,"readingTime":6,"complexity":null,"isInBlacklist":null,"flowNew":null,"tags":[{"titleHtml":"ebitda"},{"titleHtml":"что такое ebitda"},{"titleHtml":"как посчитать ebitda"},{"titleHtml":"расчет ebitda"},{"titleHtml":"пример ebitda"}]}},"articlesIds":{"MY_FEED":["909716","909080","908756","908464","908240","907210","906830","895520","906578","905934","905812","905288","905468","905392","895522","904848","904856","903870","903490","903436"]},"isLoading":false,"pagesCount":{"MY_FEED":50},"route":{"name":"MY_FEED","params":{"pageNum":1},"query":{}},"reasonsList":null,"postReasonsList":null,"view":"cards","lastVisitedRoute":{},"ssrCommentsArticleIds":[],"viewedPosts":[],"myFeedFilter":{"complexity":"all","score":"all","types":["articles","posts","news"]},"myFeedIsApplyFilters":false,"myFeedIsForce":false,"karma":{"userReasonsList":null}},"authorContribution":{"authors":{}},"betaTest":{"currentAnnouncement":null,"announcements":{},"announcementCards":null,"announcementComments":{},"announcementCommentThreads":{},"announcementCommentingStatuses":{},"archivedList":[]},"authorStatistics":{"articleRefs":{},"articleIds":{},"pagesCount":{},"route":{},"viewsCount":[],"maxStatsCount":{}},"career":{"seoLandings":[],"hubs":""},"comments":{"articleComments":{},"articlePinnedComments":{},"searchCommentsResults":null,"pagesCount":null,"commentAccess":{},"scrollParents":{},"pageArticleComments":{"lastViewedComment":0,"postId":null,"lastCommentTimestamp":"","moderated":[],"moderatedIds":[],"commentRoute":"","idempotenceKey":""}},"companies":{"companyRefs":{},"companyIds":{},"companyTopIds":{},"pagesCount":{},"companyProfiles":{},"companiesCategories":[],"companiesCategoriesTotalCount":0,"companiesWidgets":{},"companiesWorkers":{},"companiesFans":{},"multiwidgets":{},"route":{},"isLoading":false,"companyWorkersLoading":false,"companyFansLoading":false,"multiwidgetLoading":false,"vacancies":{},"companiesGalleries":{},"companiesBanners":{},"companiesLandingVacancies":{},"companiesTechnologies":{},"workplaceInfo":null},"companyAdmin":{"companyInfo":null,"companyInfoLoading":false,"faqArticles":null,"brandingPreviewImageUrl":null,"jivoStatus":0,"adminNotifications":null,"availableInvitesCount":{}},"companyAdd":{"currentStep":"","stepsData":{},"uncompletedSteps":[],"isStepLoading":true,"isStepCommitting":false,"isInitialized":false,"agreementContent":""},"companiesContribution":{"hubs":{},"flows":{},"companyRefs":{}},"companyHubsContribution":{"contributionRefs":{"hubRefs":{},"hubIds":{}}},"conversation":{"messages":[],"respondent":null,"isLoadMore":false},"conversations":{"conversations":[],"pagesCount":0},"docs":{"menu":{},"articles":{},"mainMenu":[],"loading":{"main":false,"dropdown":false,"article":false}},"feature":{"isProbablyVisible":true},"fixedBanner":{"isArticleStickyPanelVisible":false,"isArticleStickyPanelAtTheBottom":false,"isFixedBannerVisible":false},"flows":{"updates":{}},"global":{"isPwa":false,"device":"desktop","isHabrCom":true,"requestId":"fdd38047a4fcd740024025d03489ee62"},"hubs":{"hubRefs":{},"hubIds":{},"pagesCount":{},"isLoading":false,"route":{}},"hubsBlock":{"hubRefs":{},"hubIds":{}},"i18n":{"fl":"en","hl":"en"},"info":{"welcomePage":{},"isLoading":true},"location":{"urlStruct":{"protocol":null,"slashes":null,"auth":null,"host":null,"port":null,"hostname":null,"hash":null,"query":{},"pathname":"\u002Fen\u002Ffeed\u002F","path":"\u002Fen\u002Ffeed\u002F","href":"\u002Fen\u002Ffeed\u002F"}},"me":{"user":null,"uuid":null,"ppgDemanded":false,"karmaResetInfo":{"canReincarnate":null,"wasReincarnated":null,"currentScore":null},"notes":null,"userUpdates":{"feeds":{"newPostsCount":null,"newThreadsCount":null,"newNewsCount":null,"newCount":null},"conversationUnreadCount":0},"features":null},"mostReadingList":{"mostReadingListIds":[],"mostReadingListRefs":null,"promoPost":null},"onboarding":{"currentStep":null,"stepsData":{},"stepsErrors":{},"completedSteps":[],"isStepCommitting":false,"isCommitDisabled":true},"ppa":{"articles":{},"card":null,"transactions":null,"totalTransactions":null,"isAccessible":null},"projectsBlocks":{"activeBlocks":{}},"promoData":{"isLoading":false,"hasLoaded":false,"featurer":null,"megaposts":null,"promoLinks":null,"promoPosts":null,"sticker":null},"publicationStatistics":{"statsInfo":{},"statsFunnels":{},"statsGraph":{},"defaultSuggest":{},"suggest":{},"timeTracker":{},"isTrackingActivity":false,"isUserActive":true,"otherPublicationStats":{}},"pullRefresh":{"shouldRefresh":false},"sandbox":{"articleIds":[],"articleRefs":{},"pagesCount":null,"route":{},"lastVisitedRoute":{},"isLoading":false},"search":{"searchQueryError":null},"settingsOther":{"inputs":{"uiLang":{"errors":[],"ref":null,"value":""},"articlesLangEnglish":{"errors":[],"ref":null,"value":false},"articlesLangRussian":{"errors":[],"ref":null,"value":false},"agreement":{"errors":[],"ref":null,"value":false},"email":{"errors":[],"ref":null,"value":true},"digest":{"errors":[],"ref":null,"value":true}}},"similarList":{"similarListIds":[],"similarListRefs":null},"ssr":{"error":null,"isDataLoaded":true,"isDataLoading":false,"isHydrationFailed":false,"isServer":false},"stories":{"stories":null},"technotext":{"years":[],"technotextDocForNominees":null,"technotextDocForWinners":null,"technotextInfo":{},"technotextInfoLoading":false,"technotextWinners":{},"technotextWinnersLoading":false},"userHubsContribution":{"contributionRefs":{"hubRefs":{},"hubIds":{}}},"userInvites":{"availableInvites":0,"usedInvitesIds":[],"usedInvitesRefs":{},"usedInvitesPagesCount":0,"unusedInvitesIds":[],"unusedInvitesRefs":{},"unusedInvitesPagesCount":0},"userVotes":{"karmaVotesList":[],"karmaVotesPagesCount":null,"karmaVotesListLoading":false,"commentsVotesList":[],"commentsVotesPagesCount":null,"commentsVotesListLoading":false,"postsVotesList":[],"postsVotesPagesCount":null,"postsVotesListLoading":false,"userVotesList":[],"userVotesPagesCount":null,"userVotesListLoading":false},"users":{"authorRefs":{},"authorIds":{},"pagesCount":{},"authorProfiles":{},"userHubs":{},"userInvitations":{},"authorFollowers":{},"authorFollowed":{},"userSpecialization":{},"karmaStats":[],"statistics":null,"isLoading":false,"authorFollowersLoading":false,"authorFollowedLoading":false,"userHubsLoading":false,"userInvitationsLoading":false,"route":{}},"viewport":{"prevScrollY":{},"scrollY":0,"width":0},"tracker":{"notificationsLoading":false,"notificationsList":[],"notificationsPageCount":0,"pendingMarkNotificationsRead":[],"publicationsLoading":true,"publicationsList":[],"publicationsPageCount":0,"pendingDeletePublications":false,"pendingMarkPublicationsRead":false},"events":{"eventRefs":{},"eventIds":[],"pagesCount":0,"categories":[],"cities":[],"actualEvents":null,"currentEvent":null,"eventsFilter":{"city":"all","timeStarted":null,"timeEnded":null}},"wysiwyg":{"WYSIWYGRulesRefs":null},"refs":{"specializationRefs":[]},"hint":{"hints":{}}};(function(){var s;(s=document.currentScript||document.scripts[document.scripts.length-1]).parentNode.removeChild(s);}());</script><script src="https://assets.habr.com/habr-web/js/chunk-vendors.2cea9754.js" defer></script><script src="https://assets.habr.com/habr-web/js/page-my-feed.88444767.js" defer></script><script src="https://assets.habr.com/habr-web/js/app.e98f8fcb.js" defer></script></div> <div id="overlays"><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--><!----><!--teleport anchor--></div> <script async src="https://www.googletagmanager.com/gtag/js?id=G-S28W1WC23F"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); </script> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); </script> <script type="text/javascript"> window.addEventListener('load', function () { setTimeout(() => { const img = new Image(); img.src = 'https://vk.com/rtrg?p=VK-RTRG-421343-57vKE'; }, 0); }); </script> </body> </html>