<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Славный АйТи]]></title><description><![CDATA[Уроки программирования, технологии, GoLang]]></description><link>https://slavniy.com/</link><image><url>https://slavniy.com/favicon.png</url><title>Славный АйТи</title><link>https://slavniy.com/</link></image><generator>Ghost 5.80</generator><lastBuildDate>Sat, 18 Apr 2026 03:52:36 GMT</lastBuildDate><atom:link href="https://slavniy.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Продвинутый zero-downtime рестарт сервиса на Go]]></title><description><![CDATA[<p><a href="https://slavniy.com/kak-nie-potieriat-kliientskiie-zaprosy-i-nie-piatisotit-pri-riestartie-siervisa-na-go/"><strong>&#x41F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; zero-downtime</strong></a><strong> (&#x445;&#x43E;&#x442;&#x44C; &#x438; &#x43D;&#x435; &#x43F;&#x440;&#x44F;&#x43C; &quot;zero&quot;) &#x44F; &#x432;&#x430;&#x43C; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43B;, &#x438; &#x43E;&#x431;&#x435;&#x449;&#x430;&#x43B; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x441;&#x43B;</strong></p>]]></description><link>https://slavniy.com/prodvinutyi-zero-downtime-riestart-siervisa-na-go/</link><guid isPermaLink="false">68dc78df37204d2a066c6d9f</guid><category><![CDATA[📝 Статьи]]></category><category><![CDATA[🦦 GoLang]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Wed, 01 Oct 2025 00:46:21 GMT</pubDate><content:encoded><![CDATA[<p><a href="https://slavniy.com/kak-nie-potieriat-kliientskiie-zaprosy-i-nie-piatisotit-pri-riestartie-siervisa-na-go/"><strong>&#x41F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; zero-downtime</strong></a><strong> (&#x445;&#x43E;&#x442;&#x44C; &#x438; &#x43D;&#x435; &#x43F;&#x440;&#x44F;&#x43C; &quot;zero&quot;) &#x44F; &#x432;&#x430;&#x43C; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x43B;, &#x438; &#x43E;&#x431;&#x435;&#x449;&#x430;&#x43B; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x44B;&#x439; (&#x443;&#x436;&#x435; &#x43F;&#x440;&#x44F;&#x43C; zero).</strong></p><p>&#x41F;&#x43E;&#x43C;&#x438;&#x43C;&#x43E; socket-activation &#x435;&#x441;&#x442;&#x44C; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;: &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x451;&#x442; &#x441;&#x43E;&#x43A;&#x435;&#x442; &#x440;&#x435;&#x431;&#x451;&#x43D;&#x43A;&#x443;, &#x438; &#x442;&#x43E;&#x442; &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x435;&#x442; &#x435;&#x433;&#x43E; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x442;&#x43E;&#x433;&#x434;&#x430;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x432;&#x441;&#x451; &#x43F;&#x440;&#x43E;&#x438;&#x43D;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43B;. &#x41F;&#x43E;&#x441;&#x43B;&#x435; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x438; &#x43E;&#x442;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x441;&#x438;&#x433;&#x43D;&#x430;&#x43B; &#x440;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44E;, &#x438; &#x442;&#x43E;&#x442; &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x430;&#x435;&#x442; &#x441;&#x432;&#x43E;&#x44E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x443;. &#x418;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x440;&#x435;&#x431;&#x451;&#x43D;&#x43A;&#x430; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; <em>&#x440;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C;</em>.</p><p>&#x414;&#x430;&#x43B;&#x435;&#x435; &#x44F; &#x43F;&#x43E;&#x43A;&#x430;&#x436;&#x443; &#x44D;&#x442;&#x43E; &#x43D;&#x430; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x435; Linux &#x438; systemd, &#x445;&#x43E;&#x442;&#x44F; &#x441;&#x430;&#x43C; &#x43C;&#x435;&#x445;&#x430;&#x43D;&#x438;&#x437;&#x43C; &#x434;&#x43E;&#x43B;&#x436;&#x435;&#x43D; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x43B;&#x44E;&#x431;&#x43E;&#x43C; UNIX. &#x418; &#x434;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x43F;&#x43E;&#x43A;&#x430; &#x432;&#x43E;&#x442; &#x43A;&#x430;&#x43A; &#x434;&#x43E;&#x433;&#x43E;&#x432;&#x43E;&#x440;&#x438;&#x43C;&#x441;&#x44F;: &#x44F; &#x43F;&#x43E;&#x43A;&#x430;&#x436;&#x443; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x43E;&#x443;&#x440;&#x43E;&#x432;&#x43D;&#x435;&#x432;&#x443;&#x44E; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44E; &#x441; &#x433;&#x43E;&#x442;&#x43E;&#x432;&#x43E;&#x439; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x43E;&#x439; &#x43E;&#x442; cloudflare, &#x430; &#x435;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x437;&#x430;&#x445;&#x43E;&#x442;&#x438;&#x442;&#x435;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x44F; &#x43A;&#x43E;&#x43F;&#x43D;&#x443;&#x43B; &#x433;&#x43B;&#x443;&#x431;&#x436;&#x435;, &#x432;&#x44B; &#x43E;&#x431; &#x44D;&#x442;&#x43E;&#x43C; &#x43D;&#x430;&#x43F;&#x438;&#x448;&#x435;&#x442;&#x435; <a href="https://t.me/VyacheArt?ref=slavniy.com">&#x432; Telegram &#x43A;&#x430;&#x43D;&#x430;&#x43B;&#x435;</a>. &#x418;&#x43D;&#x430;&#x447;&#x435; &#x432;&#x441;&#x451;-&#x432;&#x441;&#x451; &#x432; &#x43F;&#x43E;&#x441;&#x442; &#x43D;&#x435; &#x443;&#x43C;&#x435;&#x441;&#x442;&#x438;&#x448;&#x44C; &#x43F;&#x440;&#x438; &#x432;&#x441;&#x451;&#x43C; &#x436;&#x435;&#x43B;&#x430;&#x43D;&#x438;&#x438; &#x1F642;&#xA0;</p><h3 id="%D0%BA%D0%B0%D0%BA-%D1%8D%D1%82%D0%BE-%D0%B2%D1%8B%D0%B3%D0%BB%D1%8F%D0%B4%D0%B8%D1%82-%D0%BD%D0%B0-%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B5"><strong>&#x41A;&#x430;&#x43A; &#x44D;&#x442;&#x43E; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x43D;&#x430; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A;&#x435;?</strong>&#xA0; &#xA0;</h3><p>&#x41D;&#x430;&#x43C; &#x43F;&#x43E;&#x43D;&#x430;&#x434;&#x43E;&#x431;&#x438;&#x442;&#x441;&#x44F; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x430;:&#xA0;</p><pre><code>go get -u github.com/cloudflare/tableflip</code></pre><p><strong>tableflip</strong> &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437; &#x438;&#x43D;&#x43A;&#x430;&#x43F;&#x441;&#x443;&#x43B;&#x438;&#x440;&#x443;&#x435;&#x442; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A; &#x441;&#x43B;&#x443;&#x448;&#x430;&#x442;&#x435;&#x43B;&#x44F;, &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x447;&#x443; &#x441;&#x43E;&#x43A;&#x435;&#x442;&#x430; &#x440;&#x435;&#x431;&#x451;&#x43D;&#x43A;&#x443; &#x438; &#x43E;&#x431;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x441;&#x438;&#x433;&#x43D;&#x430;&#x43B; &#x43E;&#x431; &#x443;&#x441;&#x43F;&#x435;&#x448;&#x43D;&#x43E;&#x43C; &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x438;&#x438;.&#xA0;</p><p>&#x41A;&#x43E;&#x434; &#x43D;&#x430; Go:&#xA0;</p><pre><code class="language-go">package main

import (
	&quot;context&quot;
	&quot;errors&quot;
	&quot;fmt&quot;
	&quot;log&quot;
	&quot;net/http&quot;
	&quot;os&quot;
	&quot;os/signal&quot;
	&quot;syscall&quot;
	&quot;time&quot;

	&quot;github.com/cloudflare/tableflip&quot;
)

const (
	addr            = &quot;:8080&quot;
	shutdownTimeout = 30 * time.Second // &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x43D;&#x430; graceful shutdown
)

func main() {
	upg, err := tableflip.New(tableflip.Options{
		PIDFile: &quot;/run/my-app2.pid&quot;,
	})
	if err != nil {
		log.Fatalf(&quot;tableflip: %v&quot;, err)
	}
	defer upg.Stop()

	log.Printf(&quot;PID=%d starting...&quot;, os.Getpid())

	mux := http.NewServeMux()
	mux.HandleFunc(&quot;/&quot;, func(w http.ResponseWriter, _ *http.Request) {
		w.Write([]byte(fmt.Sprintf(&quot;Hello from PID %d\n&quot;, os.Getpid())))
	})

	srv := &amp;http.Server{Handler: mux}
	ln, err := upg.Listen(&quot;tcp&quot;, addr) // tableflip &#x441;&#x430;&#x43C; &#x43D;&#x430;&#x441;&#x43B;&#x435;&#x434;&#x443;&#x435;&#x442;/&#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x451;&#x442; FD
	if err != nil {
		log.Fatalf(&quot;listen: %v&quot;)
	}

	log.Printf(&quot;PID=%d: initializing...&quot;, os.Getpid())

	// &#x418;&#x43C;&#x438;&#x442;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x434;&#x43E;&#x43B;&#x433;&#x443;&#x44E; &#x438;&#x43D;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44E;
	time.Sleep(5 * time.Second)
	// &#x417;&#x434;&#x435;&#x441;&#x44C; &#x43C;&#x44B; &#x43A;&#x430;&#x43A; &#x431;&#x44B; &#x438;&#x43D;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43B;&#x438;&#x441;&#x44C;

	// &#x417;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x43C; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;
	go func() {
		log.Printf(&quot;PID=%d serving on %s&quot;, os.Getpid(), addr)
		if err := srv.Serve(ln); err != nil &amp;&amp; !errors.Is(err, http.ErrServerClosed) {
			log.Printf(&quot;serve: %v&quot;, err)
		}
	}()

	// &#x421;&#x43E;&#x43E;&#x431;&#x449;&#x430;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x433;&#x43E;&#x442;&#x43E;&#x432;&#x44B; &#x43F;&#x440;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x442;&#x44C; &#x442;&#x440;&#x430;&#x444;&#x438;&#x43A;, &#x442;&#x43E;&#x433;&#x434;&#x430; &#x440;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442; Exit() (&#x43D;&#x438;&#x436;&#x435;)
	if err := upg.Ready(); err != nil {
		log.Fatalf(&quot;ready: %v&quot;, err)
	}
	log.Printf(&quot;PID=%d: READY (accepting traffic)&quot;, os.Getpid())

	// &#x41E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x435;&#x43C; &#x441;&#x438;&#x433;&#x43D;&#x430;&#x43B;&#x44B; SIGHUP/SIGUSR2 &#x434;&#x43B;&#x44F; reload &#x438; SIGTERM/SIGINT &#x434;&#x43B;&#x44F; shutdown
	waitForSignals(upg)

	// &#x41A;&#x430;&#x43A; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441; &#x441;&#x43A;&#x430;&#x436;&#x435;&#x442; Ready(), &#x441;&#x442;&#x430;&#x440;&#x44B;&#x439; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442; Exit()
	waitForExitAndShutdown(upg.Exit(), srv)

	select {} // &#x432;&#x44B;&#x448;&#x435; &#x443;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x43C; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x43E;&#x43C; &#x441;&#x430;&#x43C;&#x438;
}

func waitForSignals(upg *tableflip.Upgrader) {
	sigs := make(chan os.Signal, 1)
	signal.Notify(sigs, syscall.SIGHUP, syscall.SIGUSR2, syscall.SIGTERM, syscall.SIGINT)
	go func() {
		for s := range sigs {
			switch s {
			// &#x421;&#x438;&#x433;&#x43D;&#x430;&#x43B; &#x440;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44E; &#x43F;&#x440;&#x438; `reload`
			case syscall.SIGHUP, syscall.SIGUSR2:
				log.Printf(&quot;PID=%d: upgrade requested&quot;, os.Getpid())
				if err := upg.Upgrade(); err != nil {
					log.Printf(&quot;upgrade: %v&quot;, err)
				}

			case syscall.SIGTERM, syscall.SIGINT:
				log.Printf(&quot;PID=%d: stop requested&quot;, os.Getpid())
				upg.Stop() // &#x440;&#x430;&#x437;&#x431;&#x443;&#x434;&#x438;&#x442; upg.Exit()
			}
		}
	}()
}

func waitForExitAndShutdown(exit &lt;-chan struct{}, srv *http.Server) {
	go func() {
		&lt;-exit // = upg.Exit()
		log.Printf(&quot;PID=%d: received Exit -&gt; graceful shutdown&quot;, os.Getpid())
		ctx, cancel := context.WithTimeout(context.Background(), shutdownTimeout)
		defer cancel()

		// &#x41E;&#x442;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C; keep-alive, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43A;&#x43B;&#x438;&#x435;&#x43D;&#x442;&#x44B; &#x43D;&#x435; &#xAB;&#x437;&#x430;&#x432;&#x438;&#x441;&#x430;&#x43B;&#x438;&#xBB; &#x43D;&#x430; &#x441;&#x442;&#x430;&#x440;&#x43E;&#x43C; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x435;
		srv.SetKeepAlivesEnabled(false)
		if err := srv.Shutdown(ctx); err != nil {
			log.Printf(&quot;failed to shutdown server: %v&quot;, err)
		}

		// &#x418;&#x43C;&#x438;&#x442;&#x430;&#x446;&#x438;&#x44F; &#x434;&#x43E;&#x43B;&#x433;&#x43E;&#x433;&#x43E; &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x438;&#x44F;: &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x442;&#x44C; &#x411;&#x414;, &#x434;&#x43E;&#x436;&#x434;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x43E;&#x432; &#x438; &#x442;.&#x43F;.
		log.Printf(&quot;PID=%d: post-shutdown cleanup...&quot;, os.Getpid())
		time.Sleep(5 * time.Second)
		os.Exit(0) // &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x430;&#x435;&#x43C; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;
	}()
}
</code></pre><p>&#x418;, &#x440;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x435;&#x442;&#x441;&#x44F;, <code>myapp2.service</code> &#x444;&#x430;&#x439;&#x43B; &#x434;&#x43B;&#x44F; systemd:&#xA0;</p><pre><code class="language-systemd">[Unit]
Description=My Go App (tableflip)
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/myapp2
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/my-app2.pid

# &#x427;&#x442;&#x43E;&#x431;&#x44B; systemd &#x43D;&#x435; &#x443;&#x431;&#x438;&#x43B; &#xAB;&#x440;&#x435;&#x431;&#x451;&#x43D;&#x43A;&#x430;&#xBB; &#x432;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x430;&#x43F;&#x433;&#x440;&#x435;&#x439;&#x434;&#x430;:
KillMode=process
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target</code></pre><p></p><p><strong>&#x422;&#x435;&#x441;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;</strong></p><p>&#x412;&#x441;&#x451; &#x43A;&#x430;&#x43A; &#x432; &#x43F;&#x440;&#x43E;&#x448;&#x43B;&#x44B;&#x439; &#x440;&#x430;&#x437;: &#x441;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x443;&#x439;&#x442;&#x435; &#x431;&#x438;&#x43D;&#x430;&#x440;&#x43D;&#x438;&#x43A; &#x432; /usr/bin/myapp2 &#x441; &#x43F;&#x440;&#x430;&#x432;&#x430;&#x43C;&#x438; &#x43D;&#x430; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x435;, &#x441;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x443;&#x439;&#x442;&#x435; myapp2.service &#x432; /etc/systemd/system/. &#x417;&#x430;&#x442;&#x435;&#x43C; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442;&#x435; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441; &#x447;&#x435;&#x440;&#x435;&#x437; systemd start myapp2.</p><p>&#x414;&#x43B;&#x44F; &#x442;&#x435;&#x441;&#x442;&#x430; &#x432;&#x441;&#x451; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442;&#x435; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x443; &#x432; &#x441;&#x43E;&#x441;&#x435;&#x434;&#x43D;&#x435;&#x439; &#x432;&#x43A;&#x43B;&#x430;&#x434;&#x43A;&#x435; &#x442;&#x435;&#x440;&#x43C;&#x438;&#x43D;&#x430;&#x43B;&#x430;:&#xA0;</p><pre><code class="language-shell">while true; do &#xA0; printf &apos;%s &apos; &quot;$(date +&apos;%Y-%m-%dT%H:%M:%S%z&apos;)&quot;; &#xA0; curl -s -w &quot; | time=%{time_total}s\n&quot; 127.0.0.1:8080; &#xA0; sleep 0.2; done</code></pre><p>&#x412;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x442;&#x435; &#x432;&#x438;&#x434;&#x435;&#x442;&#x44C; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x43D;&#x43E; &#x442;&#x430;&#x43A;&#x43E;&#x435;:&#xA0;</p><pre><code>2025-10-01T04:10:05+0400 Hello from PID 7767
&#xA0;| time=0.000731s
2025-10-01T04:10:05+0400 Hello from PID 7767
&#xA0;| time=0.000517s</code></pre><p>&#x417;&#x430;&#x442;&#x435;&#x43C; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442;&#x435; systemctl reload myapp2, &#x438; &#x441;&#x43F;&#x443;&#x441;&#x442;&#x44F; 5 &#x441;&#x435;&#x43A;&#x443;&#x43D;&#x434;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x43C;&#x438; &#x43C;&#x44B; &#x432;&#x44B;&#x448;&#x435; &#x438;&#x43C;&#x438;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43B;&#x438; &quot;&#x438;&#x43D;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44E;&quot; (&#x43A;&#x43E;&#x43D;&#x43D;&#x435;&#x43A;&#x442; &#x441; &#x431;&#x430;&#x437;&#x430;&#x43C;&#x438;, &#x447;&#x442;&#x435;&#x43D;&#x438;&#x435; &#x444;&#x430;&#x439;&#x43B;&#x430; &#x438; &#x442;&#x430;&#x43A; &#x434;&#x430;&#x43B;&#x435;&#x435;) &#x43B;&#x43E;&#x433; &#x441;&#x442;&#x430;&#x43D;&#x435;&#x442; &#x442;&#x430;&#x43A;&#x438;&#x43C;:&#xA0;</p><pre><code>2025-10-01T04:10:05+0400 Hello from PID 7767
&#xA0;| time=0.000517s
2025-10-01T04:10:06+0400 Hello from PID 7767
&#xA0;| time=0.000477s
2025-10-01T04:10:06+0400 Hello from PID 22231
&#xA0;| time=0.000612s
2025-10-01T04:10:06+0400 Hello from PID 22231
&#xA0;| time=0.000467s</code></pre><p>PID &#x441;&#x43C;&#x435;&#x43D;&#x438;&#x43B;&#x441;&#x44F;, &#x430; &#x43C;&#x44B; &#x43D;&#x435; &#x441;&#x43B;&#x43E;&#x432;&#x438;&#x43B;&#x438; &#x43D;&#x438;&#x43A;&#x430;&#x43A;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x44F;!&#xA0;</p><h3 id="%D0%BF%D1%80%D0%BE-pidfile"><strong>&#x41F;&#x440;&#x43E; PIDFile</strong></h3><p>PIDFile &#x43D;&#x443;&#x436;&#x435;&#x43D; &#x434;&#x43B;&#x44F; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E;&#x431;&#x44B; systemd &#x437;&#x43D;&#x430;&#x43B; &#x430;&#x43A;&#x442;&#x443;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; ID &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x43E;&#x433;&#x43E; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x430;. &#x418;&#x43D;&#x430;&#x447;&#x435; &#x43F;&#x440;&#x438; &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x438;&#x438; &#x440;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44F; &#x43E;&#x43D; &#x431;&#x443;&#x434;&#x435;&#x442; &#x434;&#x443;&#x43C;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441; &#x443;&#x43C;&#x435;&#x440;, &#x445;&#x43E;&#x442;&#x44F; &#x440;&#x435;&#x431;&#x451;&#x43D;&#x43E;&#x43A; &#x432; &#x44D;&#x442;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x43F;&#x440;&#x435;&#x43A;&#x440;&#x430;&#x441;&#x43D;&#x43E; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442;. &#x42D;&#x442;&#x43E; &#x43D;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;, &#x43D;&#x43E; &#x432; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x435; &#x430;&#x43B;&#x44C;&#x442;&#x435;&#x440;&#x43D;&#x430;&#x442;&#x438;&#x432;&#x44B; &#x431;&#x435;&#x437; &#x444;&#x430;&#x439;&#x43B;&#x430; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x432; systemd MAINPID &#x438;&#x437; &#x440;&#x435;&#x431;&#x451;&#x43D;&#x43A;&#x430;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43E;&#x43D; &#x433;&#x43E;&#x442;&#x43E;&#x432; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x44B;.</p><p><strong>tableflip</strong> &#x43F;&#x438;&#x448;&#x435;&#x442; &#x43D;&#x43E;&#x432;&#x44B;&#x439; PID &#x432;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x430; Ready(), &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;. &#x415;&#x441;&#x43B;&#x438; &#x440;&#x435;&#x431;&#x451;&#x43D;&#x43E;&#x43A; &#x43D;&#x435; &#x441;&#x43C;&#x43E;&#x436;&#x435;&#x442; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x442;&#x44C;&#x441;&#x44F;, &#x442;&#x43E; &#x440;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C; &#x43E;&#x441;&#x442;&#x430;&#x43D;&#x435;&#x442;&#x441;&#x44F; &#x438; &#x431;&#x443;&#x434;&#x435;&#x442; &#x432; MAINPID &#x443; systemd.&#xA0;</p><h3 id="%D0%BC%D0%B8%D0%BD%D1%83%D1%81%D1%8B-%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D0%B0"><strong>&#x41C;&#x438;&#x43D;&#x443;&#x441;&#x44B; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;&#x430;</strong></h3><p>&#x41E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x43E;&#x439; &#x2013; &#x44D;&#x442;&#x43E;, &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;, &#x434;&#x432;&#x43E;&#x439;&#x43D;&#x43E;&#x439; &#x440;&#x430;&#x441;&#x445;&#x43E;&#x434; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438; &#x432; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442;&#x435; (&#x441;&#x442;&#x430;&#x440;&#x44B;&#x439; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441; + &#x43D;&#x43E;&#x432;&#x44B;&#x439;). &#x418; &#x435;&#x449;&#x451; &#x43C;&#x43D;&#x435; &#x43D;&#x435; &#x43D;&#x440;&#x430;&#x432;&#x438;&#x442;&#x441;&#x44F; select {}, &#x43D;&#x43E; &#x44F; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x43F;&#x43E;&#x43A;&#x430; &#x43D;&#x435; &#x43F;&#x440;&#x438;&#x434;&#x443;&#x43C;&#x430;&#x43B;, &#x43A;&#x430;&#x43A; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43B;&#x443;&#x447;&#x448;&#x435;.</p><p>&#x410; &#x432; &#x43E;&#x441;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x44F; &#x43F;&#x43E;&#x43A;&#x430; &#x447;&#x442;&#x43E; &#x43D;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43A;&#x43E;&#x432; &#x43D;&#x435; &#x432;&#x438;&#x436;&#x443;, &#x43F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x431;&#x443;&#x434;&#x443; &#x440;&#x430;&#x434; &#x432;&#x430;&#x448;&#x435;&#x43C;&#x443; &#x44D;&#x43A;&#x441;&#x43F;&#x435;&#x440;&#x442;&#x43D;&#x43E;&#x43C;&#x443; &#x43A;&#x43E;&#x43C;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x440;&#x438;&#x44E; <a href="https://t.me/VyacheArt?ref=slavniy.com">&#x432; Telegram &#x43A;&#x430;&#x43D;&#x430;&#x43B;&#x435;</a> &#x1F44B;</p>]]></content:encoded></item><item><title><![CDATA[Как не потерять клиентские запросы и не пятисотить при рестарте сервиса на Go?]]></title><description><![CDATA[<p>&#x41F;&#x43E;&#x43A;&#x430;&#x436;&#x443; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x443;&#x44E; &#x442;&#x435;&#x445;&#x43D;&#x438;&#x43A;&#x443;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x43C;&#x430; &#x43F;&#x440;&#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;</p>]]></description><link>https://slavniy.com/kak-nie-potieriat-kliientskiie-zaprosy-i-nie-piatisotit-pri-riestartie-siervisa-na-go/</link><guid isPermaLink="false">68d40d3a37204d2a066c6d8b</guid><category><![CDATA[📝 Статьи]]></category><category><![CDATA[🦦 GoLang]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Wed, 24 Sep 2025 15:27:15 GMT</pubDate><content:encoded><![CDATA[<p>&#x41F;&#x43E;&#x43A;&#x430;&#x436;&#x443; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x443;&#x44E; &#x442;&#x435;&#x445;&#x43D;&#x438;&#x43A;&#x443;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x43C;&#x430; &#x43F;&#x440;&#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; systemd (&#x43D;&#x435; &#x43F;&#x43E;&#x434;&#x43E;&#x439;&#x434;&#x451;&#x442; &#x434;&#x43B;&#x44F; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x439; &#x432; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x439;&#x43D;&#x435;&#x440;&#x435;).</p><p>&#x421;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434; &quot;Socket activation&quot; &#x2013; &#x44D;&#x442;&#x43E; &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x432;&#x44B; &#x434;&#x435;&#x43B;&#x435;&#x433;&#x438;&#x440;&#x443;&#x435;&#x442;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x43B;&#x443;&#x448;&#x438;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x43E;&#x43A;&#x435;&#x442;&#x430; &#x43D;&#x430; systemd. &#x422;&#x43E;&#x433;&#x434;&#x430;, &#x434;&#x430;&#x436;&#x435; &#x435;&#x441;&#x43B;&#x438; &#x432;&#x430;&#x448;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43D;&#x435; &#x437;&#x430;&#x43F;&#x443;&#x449;&#x435;&#x43D;&#x43E;, &#x43D;&#x443;&#x436;&#x43D;&#x44B;&#x439; &#x441;&#x43E;&#x43A;&#x435;&#x442;/&#x43F;&#x43E;&#x440;&#x442; <strong>&#x443;&#x436;&#x435;</strong> &#x43F;&#x440;&#x43E;&#x441;&#x43B;&#x443;&#x448;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F;, &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x43D;&#x435; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; (&#x43D;&#x435; &#x43F;&#x440;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x442;&#x441;&#x44F;), &#x438; &#x441;&#x43E;&#x435;&#x434;&#x438;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x43A;&#x43E;&#x43F;&#x44F;&#x442;&#x441;&#x44F; &#x432; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438;. &#x417;&#x430;&#x442;&#x435;&#x43C;, &#x432;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430; &#x441;&#x43B;&#x443;&#x448;&#x430;&#x442;&#x435;&#x43B;&#x44F;, &#x432;&#x430;&#x448;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x435;&#x442; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x43E;&#x435;&#x434;&#x438;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x44F;&#x43C;&#x43E; &#x438;&#x437; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &quot;&#x430;&#x43A;&#x442;&#x438;&#x432;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x433;&#x43E;&quot; &#x441;&#x43E;&#x43A;&#x435;&#x442;&#x430;.</p><h3 id="%D0%BA%D0%B0%D0%BA-%D1%8D%D1%82%D0%BE-%D0%B2%D1%8B%D0%B3%D0%BB%D1%8F%D0%B4%D0%B8%D1%82-%D0%BD%D0%B0-%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B5">&#x41A;&#x430;&#x43A; &#x44D;&#x442;&#x43E; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x43D;&#x430; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A;&#x435;?</h3><pre><code>package main

import (
	&quot;context&quot;
	&quot;errors&quot;
	&quot;fmt&quot;
	&quot;log&quot;
	&quot;net/http&quot;
	&quot;os&quot;
	&quot;os/signal&quot;
	&quot;syscall&quot;
	&quot;time&quot;

	&quot;github.com/coreos/go-systemd/v22/activation&quot;
	&quot;github.com/coreos/go-systemd/v22/daemon&quot;
)

func main() {
	pid := os.Getpid()

	mux := http.NewServeMux()
	mux.HandleFunc(&quot;/&quot;, func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, &quot;ok pid=%d\n&quot;, pid)
	})

	srv := &amp;http.Server{Handler: mux}

	// &#x437;&#x430;&#x43F;&#x440;&#x430;&#x448;&#x438;&#x432;&#x430;&#x435;&#x43C; &#x441;&#x43E;&#x43A;&#x435;&#x442; &#x443; systemd
	ls, err := activation.Listeners()
	if err != nil {
		log.Fatalf(&quot;activation.Listeners: %v&quot;, err)
	}
	if len(ls) == 0 {
		log.Fatal(&quot;no socket activation listener found&quot;)
	}

	// &#x443; &#x43D;&#x430;&#x441; &#x432; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x435; &#x43E;&#x434;&#x438;&#x43D; &#x441;&#x43E;&#x43A;&#x435;&#x442;, &#x43F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x431;&#x435;&#x440;&#x435;&#x43C; &#x43F;&#x435;&#x440;&#x432;&#x44B;&#x439;
	ln := ls[0]

	// &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x43C; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440; &#x432; &#x43E;&#x442;&#x434;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x433;&#x43E;&#x440;&#x443;&#x442;&#x438;&#x43D;&#x435;
	go func() {
		if err := srv.Serve(ln); err != nil &amp;&amp; !errors.Is(err, http.ErrServerClosed) {
			log.Fatalf(&quot;serve: %v&quot;, err)
		}
	}()

	_, _ = daemon.SdNotify(false, &quot;READY=1&quot;)
	log.Printf(&quot;started pid=%d&quot;, pid)

	sigc := make(chan os.Signal, 1)
	signal.Notify(sigc, syscall.SIGTERM, syscall.SIGINT)
	&lt;-sigc
	log.Print(&quot;signal received: graceful shutdown&quot;)

	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
	defer cancel()

	// &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x430;&#x435;&#x43C; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;
	if err := srv.Shutdown(ctx); err != nil {
		log.Printf(&quot;Shutdown error: %v&quot;, err)
	}

	// &#x438;&#x43C;&#x438;&#x442;&#x430;&#x446;&#x438;&#x44F; &#x43A;&#x430;&#x43A;&#x43E;&#x439;-&#x442;&#x43E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x43F;&#x435;&#x440;&#x435;&#x434; &#x437;&#x430;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x438;&#x435;&#x43C;
	time.Sleep(2 * time.Second)
}

</code></pre><p>&#x41D;&#x435; &#x437;&#x430;&#x431;&#x443;&#x434;&#x44C; &#x43F;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x43F;&#x430;&#x43A;&#x435;&#x442;:<br><code>go get -u github.com/coreos/go-systemd/v22</code></p><p>&#x418; &#x432;&#x438;&#x43D;&#x43E;&#x432;&#x43D;&#x438;&#x43A; &#x442;&#x43E;&#x440;&#x436;&#x435;&#x441;&#x442;&#x432;&#x430;! <code>myapp.socket</code> &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x442;&#x430;&#x43A;:</p><pre><code>[Unit]
Description=MyApp socket

[Socket]
ListenStream=127.0.0.1:8080

[Install]
WantedBy=sockets.target
</code></pre><p>&#x418; <code>myapp.service</code> :</p><pre><code>[Unit]
Description=MyApp service
Requires=myapp.socket
After=myapp.socket

[Service]
Type=notify
ExecStart=/usr/local/bin/myapp

[Install]
WantedBy=multi-user.target
</code></pre><h3 id="%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">&#x422;&#x435;&#x441;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;</h3><p>&#x421;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x443;&#x439;&#x442;&#x435; &#x431;&#x438;&#x43D;&#x430;&#x440;&#x43D;&#x438;&#x43A; &#x432; <code>/usr/local/bin/myapp</code> , &#x441;&#x434;&#x435;&#x43B;&#x430;&#x439;&#x442;&#x435; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x43D;&#x44F;&#x435;&#x43C;&#x44B;&#x43C;, &#x438; &#x43D;&#x435; &#x437;&#x430;&#x431;&#x443;&#x434;&#x44C;&#x442;&#x435; &#x441;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; systemd &#x444;&#x430;&#x439;&#x43B;&#x44B; &#x432; <code>/etc/systemd/system/</code> . &#x417;&#x430;&#x442;&#x435;&#x43C; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x442;&#x435; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441; &#x447;&#x435;&#x440;&#x435;&#x437; <code>systemd start myapp</code>.</p><p>&#x410; &#x437;&#x430;&#x442;&#x435;&#x43C; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x432; &#x441;&#x43E;&#x441;&#x435;&#x434;&#x43D;&#x435;&#x439; &#x432;&#x43A;&#x43B;&#x430;&#x434;&#x43A;&#x435; &#x442;&#x435;&#x440;&#x43C;&#x438;&#x43D;&#x430;&#x43B;&#x430; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x442;&#x44C; &#x442;&#x430;&#x43A;&#x43E;&#x435;:</p><pre><code>while true; do   printf &apos;%s &apos; &quot;$(date +&apos;%Y-%m-%dT%H:%M:%S%z&apos;)&quot;;   curl -s -w &quot; | time=%{time_total}s\n&quot; 127.0.0.1:8080;   sleep 0.2; done
</code></pre><p>&#x41E;&#x43D;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x442; &#x440;&#x430;&#x437; &#x432; 200 &#x43C;&#x441;&#x435;&#x43A; &#x43E;&#x442;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441; &#x43D;&#x430; &#x43F;&#x43E;&#x440;&#x442; <code>8080</code> &#x438; &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x43E;&#x442;&#x432;&#x435;&#x442;&#x430;.<br>&#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x435;&#x441;&#x43B;&#x438; &#x43F;&#x43E;&#x440;&#x435;&#x441;&#x442;&#x430;&#x440;&#x442;&#x438;&#x442;&#x44C; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441; &#x447;&#x435;&#x440;&#x435;&#x437; <code>systemd restart myapp</code> &#x438; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x442;&#x44C; &#x43D;&#x430; &#x432;&#x44B;&#x432;&#x43E;&#x434;:</p><pre><code>2025-09-24T04:37:00+0400 ok pid=8715
 | time=0.000296s
2025-09-24T04:37:00+0400 ok pid=8715
 | time=0.000254s
2025-09-24T04:37:01+0400 ok pid=8914
 | time=1.894271s
2025-09-24T04:37:03+0400 ok pid=8914
 | time=0.000416s

</code></pre><p>&#x422;&#x43E; &#x432;&#x44B; &#x443;&#x432;&#x438;&#x434;&#x438;&#x442;&#x435;, &#x447;&#x442;&#x43E; PID &#x441;&#x43C;&#x435;&#x43D;&#x438;&#x43B;&#x441;&#x44F;, &#x430; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442; &#x440;&#x435;&#x441;&#x442;&#x430;&#x440;&#x442; &#x441;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x441;&#x44F;, &#x43D;&#x43E; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441; &#x43D;&#x435; &#x43E;&#x442;&#x432;&#x430;&#x43B;&#x438;&#x43B;&#x441;&#x44F;, &#x43F;&#x440;&#x438;&#x448;&#x43B;&#x43E;&#x441;&#x44C; &#x43B;&#x438; &#x43F;&#x43E;&#x434;&#x43E;&#x436;&#x434;&#x430;&#x442;&#x44C; &#x442;&#x435; &#x441;&#x430;&#x43C;&#x44B;&#x435; 2 &#x441;&#x435;&#x43A;&#x443;&#x43D;&#x434;&#x44B;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43C;&#x44B; &#x437;&#x430;&#x43B;&#x43E;&#x436;&#x438;&#x43B;&#x438; &#x43F;&#x43E;&#x434; &#x440;&#x435;&#x441;&#x442;&#x430;&#x440;&#x442;.</p><h3 id="%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80-%D0%BE%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D0%B8">&#x420;&#x430;&#x437;&#x43C;&#x435;&#x440; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x438;</h3><p>&#x41E;&#x431;&#x440;&#x430;&#x442;&#x438;&#x442;&#x435; &#x43E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x432;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x435; &#x43D;&#x430; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x43A;&#x443; <code>Backlog</code> &#x432; <code>.socket</code> &#x444;&#x430;&#x439;&#x43B;&#x435;: &#x43E;&#x43D;&#x430; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x432;&#x430;&#x43C; &#x443;&#x432;&#x435;&#x43B;&#x438;&#x447;&#x438;&#x442;&#x44C; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C;, &#x435;&#x441;&#x43B;&#x438; &#x432;&#x434;&#x440;&#x443;&#x433; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x43E;&#x432; &#x432; &#x432;&#x430;&#x448;&#x435;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;, &#x438; &#x43D;&#x430; &#x432;&#x441;&#x435; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x43E;&#x442;&#x432;&#x435;&#x442;&#x438;&#x442;&#x44C;. &#x41F;&#x43E;&#x43B;&#x43D;&#x44B;&#x439; &#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x43E;&#x43F;&#x446;&#x438;&#x439; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x442;&#x44C; &#x442;&#x443;&#x442; <a href="https://www.freedesktop.org/software/systemd/man/latest/systemd.socket.html?ref=slavniy.com">https://www.freedesktop.org/software/systemd/man/latest/systemd.socket.html</a>.</p><h3 id="%D0%BC%D0%B8%D0%BD%D1%83%D1%81%D1%8B-%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D0%B0-%D0%B8-%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0-%D1%82%D0%B0%D0%BA%D0%BE%D0%B9-%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1-%D0%BD%D0%B5-%D0%BF%D0%BE%D0%B4%D0%BE%D0%B9%D0%B4%D1%91%D1%82">&#x41C;&#x438;&#x43D;&#x443;&#x441;&#x44B; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;&#x430; &#x438; &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x43D;&#x435; &#x43F;&#x43E;&#x434;&#x43E;&#x439;&#x434;&#x451;&#x442;</h3><p>&#x41A;&#x430;&#x43A; &#x432;&#x44B; &#x437;&#x430;&#x43C;&#x435;&#x442;&#x438;&#x43B;&#x438;, &#x432; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442; &#x440;&#x435;&#x441;&#x442;&#x430;&#x440;&#x442;&#x430; &#x43D;&#x43E;&#x432;&#x44B;&#x435; &#x441;&#x43E;&#x435;&#x434;&#x438;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x445;&#x43E;&#x442;&#x44C; &#x438; &#x43D;&#x435; &#x441;&#x431;&#x440;&#x430;&#x441;&#x44B;&#x432;&#x430;&#x44E;&#x442;&#x441;&#x44F;, &#x43D;&#x43E; &#x432;&#x441;&#x451; &#x440;&#x430;&#x432;&#x43D;&#x43E; <strong>&#x436;&#x434;&#x443;&#x442;</strong>, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x438;&#x445; &#x43D;&#x430;&#x447;&#x43D;&#x451;&#x442; &#x43E;&#x431;&#x441;&#x43B;&#x443;&#x436;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x438;&#x43D;&#x441;&#x442;&#x430;&#x43D;&#x441;. &#x42D;&#x442;&#x43E; &#x442;&#x435;&#x440;&#x43F;&#x438;&#x43C;&#x43E;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x432;&#x430;&#x448; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441; &#x441;&#x442;&#x430;&#x440;&#x442;&#x443;&#x435;&#x442; &#x431;&#x44B;&#x441;&#x442;&#x440;&#x43E;, &#x43D;&#x43E; &#x435;&#x441;&#x43B;&#x438; &#x435;&#x43C;&#x443; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x441;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x432; &#x431;&#x430;&#x437;&#x443;, &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x435;&#x442;&#x44C; &#x43A;&#x435;&#x448; &#x438; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x435; <em>&#x434;&#x43B;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x435;</em>, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x434;&#x440;&#x443;&#x433;&#x430;&#x44F; &#x442;&#x435;&#x445;&#x43D;&#x438;&#x43A;&#x430;: &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x447;&#x430; &#x441;&#x43E;&#x43A;&#x435;&#x442;&#x430; &#x43D;&#x43E;&#x432;&#x43E;&#x43C;&#x443; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x443; &#x442;&#x43E;&#x433;&#x434;&#x430;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441; &#x433;&#x43E;&#x442;&#x43E;&#x432; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x43E;&#x435;&#x434;&#x438;&#x43D;&#x435;&#x43D;&#x438;&#x44F;. &#x421;&#x432;&#x43E;&#x435;&#x433;&#x43E; &#x440;&#x43E;&#x434;&#x430; <code>reload</code>. </p>]]></content:encoded></item><item><title><![CDATA[Почему time.Now() в Go работает НАСТОЛЬКО быстро? | Разбор для Linux, Windows и macOS]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/jm7nOgrkJ28?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="&#x41F;&#x43E;&#x447;&#x435;&#x43C;&#x443; time.Now() &#x432; Go &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x41D;&#x410;&#x421;&#x422;&#x41E;&#x41B;&#x42C;&#x41A;&#x41E; &#x431;&#x44B;&#x441;&#x442;&#x440;&#x43E;? | &#x420;&#x430;&#x437;&#x431;&#x43E;&#x440; &#x434;&#x43B;&#x44F; Linux, Windows &#x438; macOS"></iframe></figure><h1 id="%D0%BA%D0%B0%D0%BA-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82-timenow-%D0%B2-go-%D0%BF%D1%83%D1%82%D0%B5%D1%88%D0%B5%D1%81%D1%82%D0%B2%D0%B8%D0%B5-%D0%BE%D1%82-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%BE%D0%B2-%D0%B4%D0%BE-%D0%BD%D0%B0%D0%BD%D0%BE%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4">&#x41A;&#x430;&#x43A; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; time.Now() &#x432; Go: &#x43F;&#x443;&#x442;&#x435;&#x448;&#x435;&#x441;&#x442;&#x432;&#x438;&#x435; &#x43E;&#x442; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x445; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x43E;&#x432; &#x434;&#x43E; &#x43D;&#x430;&#x43D;&#x43E;</h1>]]></description><link>https://slavniy.com/pochiemu-time-now-v-go-rabotaiet-nastolko-bystro-razbor-dlia-linux-windows-i-macos/</link><guid isPermaLink="false">68533acb9f1e5a05a0698620</guid><category><![CDATA[🎬 Видео]]></category><category><![CDATA[🦦 GoLang]]></category><category><![CDATA[📝 Статьи]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Wed, 18 Jun 2025 22:17:32 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/jm7nOgrkJ28?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="&#x41F;&#x43E;&#x447;&#x435;&#x43C;&#x443; time.Now() &#x432; Go &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x41D;&#x410;&#x421;&#x422;&#x41E;&#x41B;&#x42C;&#x41A;&#x41E; &#x431;&#x44B;&#x441;&#x442;&#x440;&#x43E;? | &#x420;&#x430;&#x437;&#x431;&#x43E;&#x440; &#x434;&#x43B;&#x44F; Linux, Windows &#x438; macOS"></iframe></figure><h1 id="%D0%BA%D0%B0%D0%BA-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82-timenow-%D0%B2-go-%D0%BF%D1%83%D1%82%D0%B5%D1%88%D0%B5%D1%81%D1%82%D0%B2%D0%B8%D0%B5-%D0%BE%D1%82-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%BE%D0%B2-%D0%B4%D0%BE-%D0%BD%D0%B0%D0%BD%D0%BE%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4">&#x41A;&#x430;&#x43A; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; time.Now() &#x432; Go: &#x43F;&#x443;&#x442;&#x435;&#x448;&#x435;&#x441;&#x442;&#x432;&#x438;&#x435; &#x43E;&#x442; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x445; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x43E;&#x432; &#x434;&#x43E; &#x43D;&#x430;&#x43D;&#x43E;&#x441;&#x435;&#x43A;&#x443;&#x43D;&#x434;</h1><p>&#x411;&#x435;&#x43D;&#x447;&#x43C;&#x430;&#x440;&#x43A;&#x438;, &#x43B;&#x43E;&#x433;&#x438;, &#x431;&#x430;&#x437;&#x44B; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445;, &#x438;&#x433;&#x440;&#x43E;&#x432;&#x44B;&#x435; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x44B; &#x2014; &#x43B;&#x44E;&#x431;&#x43E;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43D;&#x430; Go &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442; &#x432;&#x440;&#x435;&#x43C;&#x44F;. &#x42D;&#x442;&#x43E; &#x431;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x44F; &#x438;, &#x43A;&#x430;&#x437;&#x430;&#x43B;&#x43E;&#x441;&#x44C; &#x431;&#x44B;, &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x430;&#x44F; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x44F;. &#x41D;&#x43E; &#x437;&#x430;&#x434;&#x443;&#x43C;&#x44B;&#x432;&#x430;&#x43B;&#x438;&#x441;&#x44C; &#x43B;&#x438; &#x432;&#x44B;, &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; <code>time.Now()</code> &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x441; &#x440;&#x430;&#x437;&#x43D;&#x43E;&#x439; &#x441;&#x43A;&#x43E;&#x440;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x43D;&#x430; &#x43E;&#x434;&#x43D;&#x43E;&#x43C; &#x438; &#x442;&#x43E;&#x43C; &#x436;&#x435; &#x43A;&#x43E;&#x43C;&#x43F;&#x44C;&#x44E;&#x442;&#x435;&#x440;&#x435;? &#x41E;&#x442;&#x43A;&#x443;&#x434;&#x430; Go &#x432;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x431;&#x435;&#x440;&#x451;&#x442; &#x432;&#x440;&#x435;&#x43C;&#x44F;? &#x418; &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x438; Linux, Windows &#x438; macOS &#x440;&#x435;&#x448;&#x438;&#x43B;&#x438; &#x43E;&#x434;&#x43D;&#x443; &#x438; &#x442;&#x443; &#x436;&#x435; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x443; &#x441;&#x43E;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x43D;&#x43E; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x43C;&#x438; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x430;&#x43C;&#x438;?</p><p>&#x421;&#x435;&#x433;&#x43E;&#x434;&#x43D;&#x44F; &#x43C;&#x44B; &#x440;&#x430;&#x437;&#x431;&#x435;&#x440;&#x451;&#x43C;&#x441;&#x44F; &#x441; &#x44D;&#x442;&#x438;&#x43C;&#x438; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x430;&#x43C;&#x438; &#x438; &#x434;&#x430;&#x436;&#x435; &#x43D;&#x430;&#x43F;&#x438;&#x448;&#x435;&#x43C; &#x441;&#x432;&#x43E;&#x439; &#x441;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x43D;&#x44B;&#x439; <code>time.Now()</code>.</p><h2 id="%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%BE%D0%B9-%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F">&#x41E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x43E;&#x439; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x432;&#x440;&#x435;&#x43C;&#x44F;</h2><p>&#x41D;&#x430;&#x447;&#x43D;&#x451;&#x43C; &#x441; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x433;&#x43E; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x430;: &#x43A;&#x442;&#x43E; &#x43D;&#x430; &#x432;&#x430;&#x448;&#x435;&#x43C; &#x43A;&#x43E;&#x43C;&#x43F;&#x44C;&#x44E;&#x442;&#x435;&#x440;&#x435; &#x437;&#x43D;&#x430;&#x435;&#x442; &#x432;&#x440;&#x435;&#x43C;&#x44F;? &#x41E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x430;&#x44F; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430;. &#x418;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x432; &#x43D;&#x435;&#x439; &#x432;&#x44B; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x430;&#x438;&#x432;&#x430;&#x435;&#x442;&#x435; &#x447;&#x430;&#x441;&#x43E;&#x432;&#x43E;&#x439; &#x43F;&#x43E;&#x44F;&#x441;, &#x441;&#x438;&#x43D;&#x445;&#x440;&#x43E;&#x43D;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44E; &#x438; &#x43F;&#x440;&#x43E;&#x447;&#x435;&#x435;.</p><p>&#x41A;&#x430;&#x43A; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x44D;&#x442;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x432; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x435;? &#x41D;&#x443;&#x436;&#x43D;&#x43E; &#x441;&#x43F;&#x440;&#x43E;&#x441;&#x438;&#x442;&#x44C; &#x443; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x43E;&#x439; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B; &#x447;&#x435;&#x440;&#x435;&#x437; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x435; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x44B; &#x2014; &#x441;&#x432;&#x43E;&#x435;&#x433;&#x43E; &#x440;&#x43E;&#x434;&#x430; API &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x43E;&#x439; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B;. &#x412; Linux &#x434;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; <a href="https://man7.org/linux/man-pages/man2/settimeofday.2.html?ref=slavniy.com"><code>gettimeofday</code></a>:</p><pre><code class="language-go">package syscall

import (
    &quot;fmt&quot;
    &quot;syscall&quot;
    &quot;unsafe&quot;
)

type timespec struct {
    Sec  int64
    Msec int64
}

func Now() (int64, int64, error) {
    var ts timespec
    _, _, errno := syscall.Syscall(syscall.SYS_GETTIMEOFDAY, 
        uintptr(unsafe.Pointer(&amp;ts)), 0, 0)
    
    if errno != 0 {
        return 0, 0, fmt.Errorf(&quot;error getting time: %s&quot;, errno.Error())
    }
    
    return ts.Sec, ts.Msec, nil
}
</code></pre><p>&#x417;&#x430;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x432; &#x44D;&#x442;&#x43E;&#x442; &#x43A;&#x43E;&#x434;, &#x43C;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43C; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x435;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F;:</p><pre><code class="language-bash">$ go run main.go
Unix Now: 1745090299, Time Now: 1745090299</code></pre><p>&#x420;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;! &#x41D;&#x43E; &#x434;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x441;&#x440;&#x430;&#x432;&#x43D;&#x438;&#x43C; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43D;&#x430;&#x448;&#x435;&#x439; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438; &#x441;&#x43E; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442;&#x43D;&#x43E;&#x439;:</p><pre><code>BenchmarkSyscall-2     6638930      178.0 ns/op
BenchmarkTimeNow-2    26734690       45.47 ns/op
</code></pre><p>&#x420;&#x430;&#x437;&#x43D;&#x438;&#x446;&#x430; &#x43F;&#x43E;&#x447;&#x442;&#x438; &#x432; 4 &#x440;&#x430;&#x437;&#x430;! &#x41D;&#x43E; &#x447;&#x442;&#x43E;, &#x435;&#x441;&#x43B;&#x438; &#x44F; &#x43D;&#x435;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x44E; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44E;? &#x41F;&#x43E;&#x441;&#x43B;&#x435; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43D;&#x435;&#x43A;&#x43E;&#x435;&#x433;&#x43E; <a href="https://man7.org/linux/man-pages/man7/vdso.7.html?ref=slavniy.com"><strong><em>vDSO</em></strong></a> (&#x434;&#x430;&#x43B;&#x435;&#x435; &#x440;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x436;&#x443;) &#x43C;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x43C; &#x441;&#x43E;&#x432;&#x441;&#x435;&#x43C; &#x434;&#x440;&#x443;&#x433;&#x438;&#x435; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B;:</p><pre><code>BenchmarkVdso-2       26806431       42.00 ns/op
BenchmarkTimeNow-2    26515209       45.92 ns/op
</code></pre><p>&#x41C;&#x44B; &#x434;&#x430;&#x436;&#x435; &#x43E;&#x431;&#x43E;&#x433;&#x43D;&#x430;&#x43B;&#x438; <code>time.Now</code>! &#x41A;&#x430;&#x43A; &#x442;&#x430;&#x43A; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C;? &#x414;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x440;&#x430;&#x437;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C;&#x441;&#x44F;.</p><h2 id="%D1%86%D0%B5%D0%BD%D0%B0-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%BE%D0%B2-%D0%B8-vdso">&#x426;&#x435;&#x43D;&#x430; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x445; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x43E;&#x432; &#x438; vDSO</h2><p>&#x41F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x430; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x435; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x44B; &#x2014; &#x44D;&#x442;&#x43E; &#x43A;&#x430;&#x43A; &#x435;&#x441;&#x43B;&#x438; &#x431;&#x44B; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x439; &#x440;&#x430;&#x437;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x432;&#x44B; &#x445;&#x43E;&#x442;&#x438;&#x442;&#x435; &#x43F;&#x43E;&#x43F;&#x438;&#x442;&#x44C;, &#x432;&#x430;&#x43C; &#x43F;&#x440;&#x438;&#x445;&#x43E;&#x434;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x431;&#x44B; &#x438;&#x434;&#x442;&#x438; &#x432; &#x43C;&#x430;&#x433;&#x430;&#x437;&#x438;&#x43D; &#x437;&#x430; &#x43F;&#x430;&#x440;&#x43E;&#x439; &#x433;&#x43B;&#x43E;&#x442;&#x43E;&#x447;&#x43A;&#x43E;&#x432;.</p><p>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x435; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x44B; &#x43F;&#x43E;&#x434;&#x440;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x432;&#x430;&#x44E;&#x442; <strong>&#x441;&#x43C;&#x435;&#x43D;&#x443; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x44F;</strong> &#x441; &#x43A;&#x43E;&#x434;&#x430; &#x432;&#x430;&#x448;&#x435;&#x439; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B; &#x43D;&#x430; &#x43A;&#x43E;&#x434; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x43E;&#x439; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B;, &#x430; &#x437;&#x430;&#x442;&#x435;&#x43C; &#x2014; <strong>&#x432;&#x43E;&#x441;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430;</strong> &#x432;&#x430;&#x448;&#x435;&#x439; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B;. &#x42D;&#x442;&#x43E; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x43E;, &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x447;&#x442;&#x43E; &#x432; &#x43A;&#x43E;&#x434;&#x435; &#x432;&#x430;&#x448;&#x435;&#x439; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B; &#x444;&#x438;&#x437;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x43D;&#x435;&#x442; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438;. &#x418; &#x442;&#x430;&#x43A;&#x43E;&#x435; &#x43F;&#x435;&#x440;&#x435;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x441;&#x44A;&#x435;&#x434;&#x430;&#x435;&#x442; &#x434;&#x440;&#x430;&#x433;&#x43E;&#x446;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x43D;&#x430;&#x43D;&#x43E;&#x441;&#x435;&#x43A;&#x443;&#x43D;&#x434;&#x44B;.</p><figure class="kg-card kg-image-card"><img src="https://slavniy.com/content/images/2025/07/image.png" class="kg-image" alt loading="lazy" width="2000" height="641" srcset="https://slavniy.com/content/images/size/w600/2025/07/image.png 600w, https://slavniy.com/content/images/size/w1000/2025/07/image.png 1000w, https://slavniy.com/content/images/size/w1600/2025/07/image.png 1600w, https://slavniy.com/content/images/2025/07/image.png 2000w" sizes="(min-width: 720px) 720px"></figure><p>&#x415;&#x441;&#x43B;&#x438; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x430; &#x432; &#x43E;&#x442;&#x441;&#x443;&#x442;&#x441;&#x442;&#x432;&#x438;&#x438; &#x43A;&#x43E;&#x434;&#x430; &#x432; &#x43D;&#x430;&#x448;&#x435;&#x439; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x435;, &#x442;&#x43E; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x435; &#x2014; &#x43F;&#x43E;&#x434;&#x43A;&#x438;&#x43D;&#x443;&#x442;&#x44C; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44E; &#x43F;&#x440;&#x438; &#x441;&#x442;&#x430;&#x440;&#x442;&#x435; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B;! &#x418;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x442;&#x430;&#x43A; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x43B;&#x441;&#x44F; <a href="https://man7.org/linux/man-pages/man7/vdso.7.html?ref=slavniy.com"><strong>vDSO</strong></a> (Virtual Dynamic Shared Object).</p><p>&#x412;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x430;&#x44F; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x430; &#x43C;&#x430;&#x43F;&#x43F;&#x438;&#x442; &#x437;&#x430;&#x440;&#x430;&#x43D;&#x435;&#x435; &#x43F;&#x43E;&#x434;&#x433;&#x43E;&#x442;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x43D;&#x443;&#x44E; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x443; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x439; &#x434;&#x43B;&#x44F; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438;. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://slavniy.com/content/images/2025/07/SCR-20250526-cxij.png" class="kg-image" alt loading="lazy" width="1528" height="446" srcset="https://slavniy.com/content/images/size/w600/2025/07/SCR-20250526-cxij.png 600w, https://slavniy.com/content/images/size/w1000/2025/07/SCR-20250526-cxij.png 1000w, https://slavniy.com/content/images/2025/07/SCR-20250526-cxij.png 1528w" sizes="(min-width: 720px) 720px"><figcaption><a href="https://man7.org/linux/man-pages/man7/vdso.7.html?ref=slavniy.com#ARCHITECTURE-SPECIFIC_NOTES"><span style="white-space: pre-wrap;">https://man7.org/linux/man-pages/man7/vdso.7.html#ARCHITECTURE-SPECIFIC_NOTES</span></a></figcaption></figure><p>&#x41F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x435;&#x442;&#x441;&#x44F;, &#x431;&#x443;&#x434;&#x442;&#x43E; &#x432; &#x43A;&#x43E;&#x434;&#x435; &#x432;&#x430;&#x448;&#x435;&#x439; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B; &#x432;&#x43D;&#x435;&#x437;&#x430;&#x43F;&#x43D;&#x43E; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x43B;&#x438;&#x441;&#x44C; &#x43D;&#x443;&#x436;&#x43D;&#x44B;&#x435; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;. &#x42D;&#x442;&#x43E; &#x43A;&#x430;&#x43A; &#x435;&#x441;&#x43B;&#x438; &#x431;&#x44B; &#x43C;&#x430;&#x433;&#x430;&#x437;&#x438;&#x43D; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x441;&#x442;&#x438;&#x43B; &#x43F;&#x440;&#x438;&#x43B;&#x430;&#x432;&#x43E;&#x43A; &#x441; &#x432;&#x43E;&#x434;&#x43E;&#x439; &#x43F;&#x440;&#x44F;&#x43C;&#x43E; &#x443; &#x432;&#x430;&#x441; &#x432; &#x43A;&#x432;&#x430;&#x440;&#x442;&#x438;&#x440;&#x435;.</p><figure class="kg-card kg-image-card"><img src="https://slavniy.com/content/images/2025/07/image-1.png" class="kg-image" alt loading="lazy" width="2000" height="723" srcset="https://slavniy.com/content/images/size/w600/2025/07/image-1.png 600w, https://slavniy.com/content/images/size/w1000/2025/07/image-1.png 1000w, https://slavniy.com/content/images/size/w1600/2025/07/image-1.png 1600w, https://slavniy.com/content/images/2025/07/image-1.png 2000w" sizes="(min-width: 720px) 720px"></figure><p>&#x412;&#x43E;&#x442; &#x43A;&#x430;&#x43A; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430; &#x441; vDSO:</p><pre><code class="language-go">package vdso

import (
	&quot;fmt&quot;
	_ &quot;unsafe&quot;

	&quot;golang.org/x/sys/unix&quot;
)

// vdsoClockgettimePtr holds the address found by the runtime.
//
//go:linkname vdsoClockgettimePtr runtime.vdsoClockgettimeSym
var vdsoClockgettimePtr uintptr

// vdsoCallClockgettimeAsm is the Go declaration for our internal assembly function.
// Implementation is in vdso_asm_arm64.s
func vdsoCallClockgettimeAsm(vdsoFuncPtr uintptr, clockid uintptr, ts *unix.Timespec) int64

// vdsoClockGettimeAsmWrapper calls the assembly function and interprets the result.
// Internal helper function.
func vdsoClockGettimeAsmWrapper(clockid int) (sec int64, nsec int64, err error) {
	var ts unix.Timespec
	ret := vdsoCallClockgettimeAsm(vdsoClockgettimePtr, uintptr(clockid), &amp;ts)

	if ret != 0 { // ret should be -1 on error
		return 0, 0, fmt.Errorf(&quot;vDSO assembly call failed (ret=%d)&quot;, ret)
	}
	return ts.Sec, ts.Nsec, nil
}

// Now returns the current time using CLOCK_REALTIME.
// It attempts to use the vDSO via assembly for performance,
// falling back to a standard syscall if vDSO is unavailable or fails.
func Now() (sec int64, nsec int64, err error) {
	// Try vDSO first if the pointer is available
	if vdsoClockgettimePtr != 0 {
		sec, nsec, err = vdsoClockGettimeAsmWrapper(unix.CLOCK_REALTIME)
		// If vDSO call succeeded, return the result
		if err == nil {
			return sec, nsec, nil
		}
	}

	// Fallback to standard syscall if vDSO pointer is null or vDSO call failed
	var ts unix.Timespec
	syscallErr := unix.ClockGettime(unix.CLOCK_REALTIME, &amp;ts)
	if syscallErr != nil {
		// If both vDSO (if attempted) and syscall failed, return the syscall error
		return 0, 0, fmt.Errorf(&quot;vdso: syscall fallback failed: %w&quot;, syscallErr)
	}

	// Return result from successful syscall fallback
	return ts.Sec, ts.Nsec, nil
}</code></pre><p>&#x414;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x43F;&#x43E; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43A;&#x443; &#x440;&#x430;&#x437;&#x431;&#x435;&#x440;&#x451;&#x43C; &#x441;&#x430;&#x43C;&#x43E;&#x435; &#x43D;&#x435;&#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x43E;&#x435;:</p><ol><li><code>var vdsoClockgettimePtr uintptr</code> &#x2013;&#xA0;&#x430;&#x434;&#x440;&#x435;&#x441; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; clockgettime &#x432; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x435; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x430;</li><li><code>//go:linkname vdsoClockgettimePtr runtime.vdsoClockgettimeSym</code> &#x2013; &#x43D;&#x438;&#x447;&#x442;&#x43E; &#x438;&#x43D;&#x43E;&#x435;, &#x43A;&#x430;&#x43A; &#x445;&#x430;&#x43A; &#x432; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x446;&#x435;&#x43B;&#x44F;&#x445;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43D;&#x435; &#x43C;&#x430;&#x43F;&#x43F;&#x438;&#x442;&#x44C; &#x430;&#x434;&#x440;&#x435;&#x441;&#x430; clockgettime &#x43D;&#x430; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x439; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440;&#x435; &#x441;&#x430;&#x43C;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;. &#x412; Go &#x443;&#x436;&#x435; &#x435;&#x441;&#x442;&#x44C; &#x432;&#x441;&#x435; &#x44D;&#x442;&#x438; &#x430;&#x434;&#x440;&#x435;&#x441;&#x430;, &#x438; &#x447;&#x435;&#x440;&#x435;&#x437; <code>go:linkname</code> &#x44F; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x43B;&#x438;&#x448;&#x44C; &#x43F;&#x440;&#x43E;&#x448;&#x443; &#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x44F;&#x442;&#x43E;&#x440; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x442;&#x430;&#x43A;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43E;&#x431;&#x440;&#x430;&#x449;&#x435;&#x43D;&#x438;&#x435; &#x43A; vdsoClockgettimePtr &#x431;&#x44B;&#x43B;&#x43E; &#x43D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x43E;&#x431;&#x440;&#x430;&#x449;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x43A; &#x432;&#x43D;&#x443;&#x442;&#x440;&#x435;&#x43D;&#x43D;&#x435;&#x439; <code>runtime.vdsoClockgettimeSym</code></li><li><code>func vdsoCallClockgettimeAsm(vdsoFuncPtr uintptr, clockid uintptr, ts *unix.Timespec) int64</code> &#x2013;&#xA0;&#x430; &#x432;&#x43E;&#x442; &#x442;&#x443;&#x442; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E;! &#x417;&#x430;&#x433;&#x43E;&#x43B;&#x43E;&#x432;&#x43E;&#x43A; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x435;&#x441;&#x442;&#x44C;, &#x430; &#x432;&#x43E;&#x442; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44F; &#x432; &#x441;&#x43E;&#x441;&#x435;&#x434;&#x43D;&#x435;&#x43C; &#x444;&#x430;&#x439;&#x43B;&#x435; <code>vdso_asm_arm64.s</code></li></ol><pre><code class="language-asm">TEXT &#xB7;vdsoCallClockgettimeAsm(SB), NOSPLIT, $0-32
    MOVD vdsoFuncPtr+0(FP), R10    // &#x410;&#x434;&#x440;&#x435;&#x441; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; vDSO
    MOVD clockid+8(FP), R0         // &#x41F;&#x435;&#x440;&#x432;&#x44B;&#x439; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;
    MOVD ts+16(FP), R1             // &#x412;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x430;&#x440;&#x433;&#x443;&#x43C;&#x435;&#x43D;&#x442;
    CALL (R10)                     // &#x412;&#x44B;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;
    MOVD R0, ret+24(FP)           // &#x412;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x449;&#x430;&#x435;&#x43C; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;
    RET
</code></pre><p>&#x410; &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x43F;&#x43E;&#x442;&#x440;&#x435;&#x431;&#x43E;&#x432;&#x430;&#x43B;&#x441;&#x44F; &#x430;&#x441;&#x441;&#x435;&#x43C;&#x431;&#x43B;&#x435;&#x440;? </p><p>&#x41E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x430;&#x44F; &#x43F;&#x440;&#x438;&#x447;&#x438;&#x43D;&#x430; &#x434;&#x43B;&#x44F; &#x43C;&#x435;&#x43D;&#x44F; &#x2013;&#xA0;&#x44F; &#x43D;&#x435; &#x437;&#x43D;&#x430;&#x44E; &#x43A;&#x430;&#x43A; &#x43D;&#x430; Go &#x432;&#x44B;&#x437;&#x432;&#x430;&#x442;&#x44C; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; &#x43F;&#x43E; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44E; <code>vdsoClockgettimePtr</code>. &#x41F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x44F; &#x441;&#x430;&#x43C;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43A;&#x43B;&#x430;&#x434;&#x443; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x432; &#x440;&#x435;&#x433;&#x438;&#x441;&#x442;&#x440;&#x44B; &#x438; &#x432;&#x44B;&#x437;&#x44B;&#x432;&#x430;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E; &#x447;&#x435;&#x440;&#x435;&#x437; <code>CALL</code>. </p><h2 id="%D0%BA%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D0%BD%D0%BE-%D0%B2-macos-commpage">&#x41A;&#x430;&#x43A; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x43D;&#x43E; &#x432; macOS: commpage</h2><p>&#x41D;&#x430; macOS &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x439; &#x432;&#x44B;&#x437;&#x43E;&#x432; &#x442;&#x43E;&#x436;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x43C;&#x435;&#x434;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;:</p><pre><code>BenchmarkSyscall-10     5107172      231.6 ns/op
BenchmarkTimeNow-10    29132193       41.96 ns/op
</code></pre><p>&#x420;&#x430;&#x437;&#x43D;&#x438;&#x446;&#x430; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x447;&#x435;&#x43C; &#x432; 5 &#x440;&#x430;&#x437;! &#x41D;&#x43E; vDSO &#x442;&#x430;&#x43C; &#x43D;&#x435;&#x442; (&#x43F;&#x43E;&#x432;&#x435;&#x440;&#x44C;&#x442;&#x435;).  &#x41A;&#x430;&#x43A; &#x436;&#x435; &#x442;&#x43E;&#x433;&#x434;&#x430;?</p><p>macOS &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;: &#x432;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x43E;&#x43D;&#x430; &#x434;&#x430;&#x451;&#x442; &#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F; &#x43A; &#x43E;&#x441;&#x43E;&#x431;&#x43E;&#x43C;&#x443; &#x440;&#x435;&#x433;&#x438;&#x43E;&#x43D;&#x443; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x43F;&#x435;&#x440;&#x438;&#x43E;&#x434;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x44F;&#x435;&#x442; &#x432;&#x440;&#x435;&#x43C;&#x44F;. &#x42D;&#x442;&#x43E; &#x43A;&#x430;&#x43A; &#x435;&#x441;&#x43B;&#x438; &#x431;&#x44B; &#x432;&#x43E;&#x434;&#x430; &#x443;&#x434;&#x438;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x43C; &#x43F;&#x43E;&#x44F;&#x432;&#x43B;&#x44F;&#x43B;&#x430;&#x441;&#x44C; &#x43F;&#x440;&#x44F;&#x43C;&#x43E; &#x43D;&#x430; &#x432;&#x430;&#x448;&#x435;&#x43C; &#x441;&#x442;&#x43E;&#x43B;&#x435;.</p><p>&#x422;&#x430;&#x43A;&#x430;&#x44F; &#x43E;&#x431;&#x449;&#x430;&#x44F; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x438;&#x446;&#x430; &#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; <a href="https://docs.darlinghq.org/internals/macos-specifics/commpage.html?ref=slavniy.com"><strong>commpage</strong></a>, &#x438; Go &#x43A; &#x43D;&#x435;&#x439; &#x434;&#x430;&#x436;&#x435; <strong>&#x43D;&#x435; &#x43E;&#x431;&#x440;&#x430;&#x449;&#x430;&#x435;&#x442;&#x441;&#x44F;</strong> &#x43D;&#x430;&#x43F;&#x440;&#x44F;&#x43C;&#x443;&#x44E;! &#x412;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x44D;&#x442;&#x43E;&#x433;&#x43E; Go &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x443;&#x44E; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x443;:</p><pre><code class="language-go">func Now() (int64, int64, error) {
    var ts unix.Timespec
    // &#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x43E;&#x443;&#x440;&#x43E;&#x432;&#x43D;&#x435;&#x432;&#x443;&#x44E; &#x43E;&#x431;&#x451;&#x440;&#x442;&#x43A;&#x443; &#x432;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x441;&#x44B;&#x440;&#x43E;&#x433;&#x43E; syscall
    err := unix.ClockGettime(unix.CLOCK_REALTIME, &amp;ts)
    if err != nil {
        return 0, 0, err
    }
    return ts.Sec, ts.Nsec, nil
}
</code></pre><p>&#x410; <code>unix.ClockGettime</code> &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x438;&#x442; &#x43A;&#x430;&#x43A;:</p><figure class="kg-card kg-code-card"><pre><code class="language-go">func ClockGettime(clockid int32, time *Timespec) (err error) {
	_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
	if e1 != 0 {
		err = errnoErr(e1)
	}
	return
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">libc_clock_gettime_trampoline_addr</span></p></figcaption></figure><p>&#x418; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F;&#x442; &#x441;&#x430;&#x43C;&#x438; &#x437;&#x430; &#x441;&#x435;&#x431;&#x44F;:</p><pre><code>BenchmarkSyscall-10    21755354       48.90 ns/op
BenchmarkTimeNow-10    28316968       42.57 ns/op
</code></pre><p>&#x421;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x430;&#x44F; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x430; &#x437;&#x43D;&#x430;&#x435;&#x442; &#x43F;&#x440;&#x43E; commpage &#x438; &#x441;&#x430;&#x43C;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x440;&#x435;&#x448;&#x430;&#x435;&#x442;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x435;&#x451;, &#x430; &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x2014; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x439; &#x432;&#x44B;&#x437;&#x43E;&#x432;.</p><h2 id="%D0%BA%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D0%BD%D0%BE-%D0%B2-windows-user-shared-data">&#x41A;&#x430;&#x43A; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x43D;&#x43E; &#x432; Windows: User Shared Data</h2><p>Windows &#x43F;&#x43E;&#x448;&#x43B;&#x430; &#x43F;&#x43E; &#x43F;&#x443;&#x442;&#x438;, &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x435;&#x43C;&#x443; &#x43D;&#x430; macOS. &#x422;&#x440;&#x430;&#x434;&#x438;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x43E; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x438;&#x43C; &#x43D;&#x430; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x44B; &#x441; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; Windows API:</p><pre><code>BenchmarkWinApi-4      29055982       41.50 ns/op
BenchmarkTimeNow-4     352143674       3.412 ns/op
</code></pre><p>&#x412;&#x430;&#x443;! <code>time.Now()</code> &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x432; 12 &#x440;&#x430;&#x437; &#x431;&#x44B;&#x441;&#x442;&#x440;&#x435;&#x435;! &#x41A;&#x430;&#x43A; Windows &#x434;&#x43E;&#x431;&#x438;&#x43B;&#x430;&#x441;&#x44C; &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x441;&#x43A;&#x43E;&#x440;&#x43E;&#x441;&#x442;&#x438;?</p><p>&#x41E;&#x442;&#x432;&#x435;&#x442; &#x2014; &#x432; &#x43F;&#x440;&#x44F;&#x43C;&#x43E;&#x43C; &#x447;&#x442;&#x435;&#x43D;&#x438;&#x438; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;. &#x412; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x430; &#x435;&#x441;&#x442;&#x44C; &#x43E;&#x441;&#x43E;&#x431;&#x430;&#x44F; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x438;&#x446;&#x430; <strong>User Shared Data</strong>, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x43F;&#x43E; &#x444;&#x438;&#x43A;&#x441;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x43C;&#x443; &#x430;&#x434;&#x440;&#x435;&#x441;&#x443; <code>0x7FFE0000</code>:</p><pre><code class="language-go">const (
    systemTimeAddr uintptr = 0x7ffe0014
    epochOffset int64 = 116444736000000000  // &#x420;&#x430;&#x437;&#x43D;&#x438;&#x446;&#x430; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x44D;&#x43F;&#x43E;&#x445;&#x430;&#x43C;&#x438; Windows &#x438; Unix
)

func Now() (sec int64, nsec int64, err error) {
    // &#x427;&#x438;&#x442;&#x430;&#x435;&#x43C; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x43D;&#x430;&#x43F;&#x440;&#x44F;&#x43C;&#x443;&#x44E; &#x438;&#x437; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;
    ticks := *(*int64)(unsafe.Pointer(systemTimeAddr))
    
    // &#x41A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x438;&#x440;&#x443;&#x435;&#x43C; &#x438;&#x437; Windows-&#x44D;&#x43F;&#x43E;&#x445;&#x438; &#x432; Unix-&#x44D;&#x43F;&#x43E;&#x445;&#x443;
    unixTicks := ticks - epochOffset
    totalNsec := unixTicks * 100
    
    sec = totalNsec / int64(time.Second)
    nsec = totalNsec % int64(time.Second)
    
    return sec, nsec, nil
}
</code></pre><p>&#x418; &#x435;&#x441;&#x43B;&#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; User Shared Data, &#x442;&#x43E; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442; &#x432;&#x430;&#x441; &#x443;&#x434;&#x438;&#x432;&#x438;&#x442;:</p><pre><code>BenchmarkWinShared-4   1000000000      0.3412 ns/op
BenchmarkTimeNow-4      344631338      3.439 ns/op
</code></pre><p>&#x41D;&#x430;&#x448;&#x430; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x430;&#x446;&#x438;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x432; 10 &#x440;&#x430;&#x437; &#x431;&#x44B;&#x441;&#x442;&#x440;&#x435;&#x435;! &#x42D;&#x442;&#x43E; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;, &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x434;&#x435;&#x43B;&#x430;&#x435;&#x43C; &#x43C;&#x438;&#x43D;&#x438;&#x43C;&#x443;&#x43C; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x2014; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x447;&#x438;&#x442;&#x430;&#x435;&#x43C; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x438;&#x437; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;. Go &#x436;&#x435; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x44F;&#x435;&#x442; &#x434;&#x43E;&#x43F;&#x43E;&#x43B;&#x43D;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x435; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43A;&#x438; &#x438; &#x43F;&#x440;&#x435;&#x43E;&#x431;&#x440;&#x430;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;.</p><p>&#x418;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E;, &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x43C;&#x438;&#x43C;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; &#x432; User Shared Data &#x435;&#x441;&#x442;&#x44C; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x438;: &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x43E;&#x440;&#x43E;&#x432;, &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x430;, &#x43D;&#x43E;&#x43C;&#x435;&#x440; &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x438; &#x41E;&#x421; &#x438; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;&#x435; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x435;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://slavniy.com/content/images/2025/07/SCR-20250610-dekl.png" class="kg-image" alt loading="lazy" width="2000" height="1250" srcset="https://slavniy.com/content/images/size/w600/2025/07/SCR-20250610-dekl.png 600w, https://slavniy.com/content/images/size/w1000/2025/07/SCR-20250610-dekl.png 1000w, https://slavniy.com/content/images/size/w1600/2025/07/SCR-20250610-dekl.png 1600w, https://slavniy.com/content/images/2025/07/SCR-20250610-dekl.png 2000w" sizes="(min-width: 720px) 720px"><figcaption><a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-kuser_shared_data?ref=slavniy.com"><span style="white-space: pre-wrap;">https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-kuser_shared_data</span></a></figcaption></figure><h2 id="%D0%BC%D0%BE%D0%BD%D0%BE%D1%82%D0%BE%D0%BD%D0%BD%D0%BE%D0%B5-%D0%B8-%D0%BD%D0%B0%D1%81%D1%82%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F">&#x41C;&#x43E;&#x43D;&#x43E;&#x442;&#x43E;&#x43D;&#x43D;&#x43E;&#x435; &#x438; &#x43D;&#x430;&#x441;&#x442;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F;</h2><p>&#x41D;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x435;&#x449;&#x451; &#x43E;&#x434;&#x43D;&#x430; &#x437;&#x430;&#x433;&#x430;&#x434;&#x43A;&#x430;. Linux &#x43F;&#x440;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x442; &#x446;&#x435;&#x43B;&#x443;&#x44E; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44E;, &#x43D;&#x43E; Windows &#x438; macOS &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; <em>&#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x44F;&#x44E;&#x442;</em> &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x432; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;. &#x41D;&#x43E; &#x43E;&#x43D;&#x438; &#x436;&#x435; &#x43D;&#x435; &#x43C;&#x43E;&#x433;&#x443;&#x442; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x44D;&#x442;&#x43E; &#x43A;&#x430;&#x436;&#x434;&#x443;&#x44E; &#x43D;&#x430;&#x43D;&#x43E;&#x441;&#x435;&#x43A;&#x443;&#x43D;&#x434;&#x443;! &#x41E;&#x442;&#x43A;&#x443;&#x434;&#x430; &#x442;&#x43E;&#x433;&#x434;&#x430; &#x431;&#x435;&#x440;&#x451;&#x442;&#x441;&#x44F; &#x43D;&#x430;&#x43D;&#x43E;&#x441;&#x435;&#x43A;&#x443;&#x43D;&#x434;&#x43D;&#x430;&#x44F; &#x442;&#x43E;&#x447;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x432; &#x431;&#x435;&#x43D;&#x447;&#x43C;&#x430;&#x440;&#x43A;&#x430;&#x445;?</p><p>&#x418; &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x43E;&#x439;&#x434;&#x451;&#x442;, &#x435;&#x441;&#x43B;&#x438; &#x432;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x431;&#x435;&#x43D;&#x447;&#x43C;&#x430;&#x440;&#x43A;&#x430; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x438;&#x442;&#x44C; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x43E;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x43D;&#x430; &#x447;&#x430;&#x441; &#x43D;&#x430;&#x437;&#x430;&#x434;? &#x41F;&#x43E;&#x43A;&#x430;&#x436;&#x435;&#x442; &#x43B;&#x438; &#x431;&#x435;&#x43D;&#x447;&#x43C;&#x430;&#x440;&#x43A; &#x43E;&#x442;&#x440;&#x438;&#x446;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F;?</p><p>&#x41E;&#x442;&#x432;&#x435;&#x442; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; &#x434;&#x432;&#x430; &#x442;&#x438;&#x43F;&#x430; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438;:</p><ol><li><strong>&#x41D;&#x430;&#x441;&#x442;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F;</strong> (wall clock time) &#x2014; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x432;&#x44B; &#x432;&#x438;&#x434;&#x438;&#x442;&#x435; &#x43D;&#x430; &#x447;&#x430;&#x441;&#x430;&#x445;. &#x415;&#x433;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x432;&#x43F;&#x435;&#x440;&#x451;&#x434; &#x438;&#x43B;&#x438; &#x43D;&#x430;&#x437;&#x430;&#x434;, &#x43E;&#x43D;&#x43E; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43A;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43E;&#x442; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x430; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438;.</li><li><strong>&#x41C;&#x43E;&#x43D;&#x43E;&#x442;&#x43E;&#x43D;&#x43D;&#x43E;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F;</strong> (monotonic time) &#x2014; &#x43D;&#x435;&#x43F;&#x440;&#x435;&#x43A;&#x43B;&#x43E;&#x43D;&#x43D;&#x44B;&#x439; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x441;&#x447;&#x451;&#x442;&#x447;&#x438;&#x43A; &#x441; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442;&#x430; &#x432;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43A;&#x43E;&#x43C;&#x43F;&#x44C;&#x44E;&#x442;&#x435;&#x440;&#x430;. &#x41E;&#x43D;&#x43E; &#x43D;&#x438;&#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43D;&#x435; &#x438;&#x434;&#x451;&#x442; &#x432;&#x441;&#x43F;&#x44F;&#x442;&#x44C; &#x438; &#x43D;&#x435; &#x443;&#x441;&#x43A;&#x43E;&#x440;&#x44F;&#x435;&#x442;&#x441;&#x44F;, &#x438; &#x432; &#x44D;&#x442;&#x43E;&#x43C; &#x435;&#x433;&#x43E; &#x43F;&#x440;&#x435;&#x43B;&#x435;&#x441;&#x442;&#x44C;.</li></ol><p>&#x41A;&#x43E;&#x433;&#x434;&#x430; &#x432; Go &#x432;&#x44B; &#x432;&#x44B;&#x447;&#x438;&#x442;&#x430;&#x435;&#x442;&#x435; &#x43E;&#x434;&#x43D;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x438;&#x437; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x433;&#x43E;<code>time.Sub(...)</code>, Go &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x44F;&#x435;&#x442; &#x43D;&#x430;&#x43B;&#x438;&#x447;&#x438;&#x435; &#x43C;&#x43E;&#x43D;&#x43E;&#x442;&#x43E;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; &#x432; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x435; &#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x435;&#x433;&#x43E;:</p><pre><code class="language-go">// &#x412; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x435; time.Time &#x435;&#x441;&#x442;&#x44C; &#x43F;&#x43E;&#x43B;&#x435; &#x434;&#x43B;&#x44F; &#x43C;&#x43E;&#x43D;&#x43E;&#x442;&#x43E;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438;
type Time struct {
    wall uint64
    ext  int64    // &#x41C;&#x43E;&#x436;&#x435;&#x442; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x430;&#x442;&#x44C; &#x43C;&#x43E;&#x43D;&#x43E;&#x442;&#x43E;&#x43D;&#x43D;&#x43E;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F;
    loc  *Location
}
</code></pre><pre><code class="language-go">func (t Time) Sub(u Time) Duration {
    //&#x415;&#x441;&#x43B;&#x438; &#x435;&#x441;&#x442;&#x44C; &#x43C;&#x43E;&#x43D;&#x43E;&#x442;&#x43E;&#x43D;&#x43D;&#x43E;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F;, &#x442;&#x43E;...
	if t.wall&amp;u.wall&amp;hasMonotonic != 0 {
        //&#x432;&#x44B;&#x447;&#x438;&#x442;&#x430;&#x435;&#x43C; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x435;&#x433;&#x43E;!
		return subMono(t.ext, u.ext)
	}
	d := Duration(t.sec()-u.sec())*Second + Duration(t.nsec()-u.nsec())
	// Check for overflow or underflow.
	switch {
	case u.Add(d).Equal(t):
		return d // d is correct
	case t.Before(u):
		return minDuration // t - u is negative out of range
	default:
		return maxDuration // t - u is positive out of range
	}
}

func subMono(t, u int64) Duration {
	d := Duration(t - u)
	if d &lt; 0 &amp;&amp; t &gt; u {
		return maxDuration // t - u is positive out of range
	}
	if d &gt; 0 &amp;&amp; t &lt; u {
		return minDuration // t - u is negative out of range
	}
	return d
}</code></pre><p>&#x411;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x431;&#x435;&#x43D;&#x447;&#x43C;&#x430;&#x440;&#x43A;&#x438; &#x432;&#x441;&#x435;&#x433;&#x434;&#x430; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E;&#x442; &#x440;&#x435;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x43F;&#x440;&#x43E;&#x448;&#x435;&#x434;&#x448;&#x435;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x44F;, &#x43D;&#x435;&#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E; &#x43E;&#x442; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x439; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x445; &#x447;&#x430;&#x441;&#x43E;&#x432;.</p><h2 id="%D0%B8%D1%82%D0%BE%D0%B3%D0%B8">&#x418;&#x442;&#x43E;&#x433;&#x438;</h2><p>&#x41F;&#x43E;&#x434;&#x432;&#x435;&#x434;&#x451;&#x43C; &#x438;&#x442;&#x43E;&#x433;&#x438; &#x43D;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x43F;&#x443;&#x442;&#x435;&#x448;&#x435;&#x441;&#x442;&#x432;&#x438;&#x44F;:</p><ol><li><strong>&#x41D;&#x430;&#x438;&#x432;&#x43D;&#x44B;&#x439; &#x43F;&#x43E;&#x434;&#x445;&#x43E;&#x434;</strong> &#x441; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x44B;&#x43C;&#x438; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x430;&#x43C;&#x438; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;, &#x43D;&#x43E; <strong>&#x43C;&#x435;&#x434;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;</strong> &#x438;&#x437;-&#x437;&#x430; &#x43F;&#x435;&#x440;&#x435;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x430;.</li><li><strong>&#x41A;&#x430;&#x436;&#x434;&#x430;&#x44F; &#x41E;&#x421; &#x440;&#x435;&#x448;&#x430;&#x435;&#x442; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x443; &#x43F;&#x43E;-&#x441;&#x432;&#x43E;&#x435;&#x43C;&#x443;</strong>:<ul><li>Linux &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442; <strong>vDSO</strong> &#x2014; &#x43F;&#x43E;&#x434;&#x43A;&#x438;&#x434;&#x44B;&#x432;&#x430;&#x435;&#x442; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x432; &#x430;&#x434;&#x440;&#x435;&#x441;&#x43D;&#x43E;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x440;&#x430;&#x43D;&#x441;&#x442;&#x432;&#x43E; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x430;</li><li>macOS &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442; <strong>commpage</strong> &#x2014; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x44F;&#x435;&#x43C;&#x443;&#x44E; &#x44F;&#x434;&#x440;&#x43E;&#x43C; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x438;&#x446;&#x443; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;, &#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F; &#x43A; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x43E;&#x440;&#x433;&#x430;&#x43D;&#x438;&#x437;&#x443;&#x435;&#x442; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x43D;&#x430;&#x44F; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x430;</li><li>Windows &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442; <strong>User Shared Data</strong> &#x2014; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x438;&#x446;&#x443; &#x43F;&#x43E; &#x444;&#x438;&#x43A;&#x441;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x43E;&#x43C;&#x443; &#x430;&#x434;&#x440;&#x435;&#x441;&#x443;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x443;&#x44E; &#x43C;&#x44B; &#x447;&#x438;&#x442;&#x430;&#x435;&#x43C; &#x43D;&#x430;&#x43F;&#x440;&#x44F;&#x43C;&#x443;&#x44E;</li></ul></li><li><strong>&#x414;&#x432;&#x430; &#x442;&#x438;&#x43F;&#x430; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438;</strong> &#x440;&#x435;&#x448;&#x430;&#x44E;&#x442; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x435; &#x437;&#x430;&#x434;&#x430;&#x447;&#x438;: &#x43D;&#x430;&#x441;&#x442;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x434;&#x43B;&#x44F; &#x43E;&#x442;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F;, &#x43C;&#x43E;&#x43D;&#x43E;&#x442;&#x43E;&#x43D;&#x43D;&#x43E;&#x435; &#x434;&#x43B;&#x44F; &#x438;&#x437;&#x43C;&#x435;&#x440;&#x435;&#x43D;&#x438;&#x439;.</li></ol><p>&#x412;&#x43E;&#x442; &#x442;&#x430;&#x43A; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x430;&#x44F; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x44F; <code>time.Now()</code> &#x43E;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x43E;&#x43C; &#x434;&#x435;&#x441;&#x44F;&#x442;&#x438;&#x43B;&#x435;&#x442;&#x438;&#x439; &#x43E;&#x43F;&#x442;&#x438;&#x43C;&#x438;&#x437;&#x430;&#x446;&#x438;&#x439; &#x438; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440;&#x43D;&#x44B;&#x445; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x439;. &#x412; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x439; &#x440;&#x430;&#x437;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x431;&#x443;&#x434;&#x435;&#x442;&#x435; &#x438;&#x437;&#x43C;&#x435;&#x440;&#x44F;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x441;&#x432;&#x43E;&#x435;&#x433;&#x43E; &#x43A;&#x43E;&#x434;&#x430;, &#x432;&#x441;&#x43F;&#x43E;&#x43C;&#x43D;&#x438;&#x442;&#x435;, &#x43A;&#x430;&#x43A;&#x43E;&#x439; &#x43F;&#x443;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x439; &#x432;&#x44B;&#x437;&#x43E;&#x432; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; &#x2014; &#x43E;&#x442; &#x432;&#x430;&#x448;&#x435;&#x439; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B; &#x447;&#x435;&#x440;&#x435;&#x437; &#x445;&#x438;&#x442;&#x440;&#x44B;&#x435; &#x43E;&#x43F;&#x442;&#x438;&#x43C;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x43E;&#x439; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B; &#x434;&#x43E; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x445; &#x441;&#x447;&#x451;&#x442;&#x447;&#x438;&#x43A;&#x43E;&#x432; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x43E;&#x440;&#x430;.</p><p>&#x41D;&#x435; &#x437;&#x430;&#x431;&#x44B;&#x432;&#x430;&#x439;&#x442;&#x435; &#x43F;&#x43E;&#x434;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x438; &#x43D;&#x430; Telegram &#x43A;&#x430;&#x43D;&#x430;&#x43B;, &#x442;&#x430;&#x43C; &#x44F; &#x43F;&#x443;&#x431;&#x43B;&#x438;&#x43A;&#x443;&#x44E; &#x432; &#x442;&#x43E;&#x43C; &#x447;&#x438;&#x441;&#x43B;&#x435; &#x43A;&#x43E;&#x440;&#x43E;&#x442;&#x43A;&#x438;&#x435; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x438; &#x43E; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x445; &#x432;&#x43D;&#x443;&#x442;&#x440;&#x435;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x44F;&#x445; Go:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://t.me/VyacheArt?ref=slavniy.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x421;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x439; &#x410;&#x439;&#x422;&#x438; &#x2013; &#x430;&#x43D;&#x43E;&#x43D;&#x441;&#x44B;, &#x442;&#x435;&#x445;&#x43D;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x438;, GoLang</div><div class="kg-bookmark-description">&#x41F;&#x440;&#x438;&#x432;&#x435;&#x442;! &#x42F; GoLang &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;, &#x442;&#x438;&#x43C;&#x43B;&#x438;&#x434; &#x438; &#x430;&#x432;&#x442;&#x43E;&#x440; &#x43A;&#x430;&#x43D;&#x430;&#x43B;&#x430; &#x43F;&#x440;&#x43E; &#x430;&#x439;&#x442;&#x438;&#x448;&#x435;&#x447;&#x43A;&#x443; https://www.youtube.com/@VyacheArt &#x411;&#x443;&#x434;&#x443; &#x440;&#x430;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x430;&#x441; &#x440;&#x43E;&#x43B;&#x438;&#x43A;&#x430;&#x43C;&#x438; &#x43F;&#x440;&#x43E; &#x445;&#x430;&#x439;&#x43B;&#x43E;&#x430;&#x434;, &#x440;&#x435;&#x43A;&#x43B;&#x430;&#x43C;&#x443; &#x438; &#x43F;&#x440;&#x43E; &#x432;&#x441;&#x451; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x44F; &#x437;&#x43D;&#x430;&#x44E;, &#x430; &#x432;&#x430;&#x43C; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E; &#x43F;&#x43E;&#x441;&#x43B;&#x443;&#x448;&#x430;&#x442;&#x44C;. @VyacheslavG</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://telegram.org/img/apple-touch-icon.png" alt><span class="kg-bookmark-author">Telegram</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://cdn4.cdn-telegram.org/file/S1v0dIDbQ9gPoCQAP9UvwcwAPx2giE-NJj5HPzygOtxlFyrHptCt92PT29Ncu_L8M8rNzm-Sjy4jANPMUjxK9KFotIDZx21cyzs2SnVdfYgTr7K9mRiixuyaEgJsqB6qaYaYGWcw8WyXIMdjEMmCje27_jvi142PGWsR3Usakax4vjvLHNGzKrboyWbgCB0Ydsx6t1We_sfEnFu6uTl1kzID25x98ZttFRtl0Hg_WpgLI-G_qV02W2GIl0_gYSMqB7Q4NZv9kg08kq2EIG2nFh6R3fROkTjrBqa77hjRTk0S3vzIAodjEgCydydsjsD59ucluWAII6VwyWYp9Ngs8A.jpg" alt></div></a></figure><h2 id="%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B8">&#x418;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;&#x438;</h2><p>&#x41D;&#x438;&#x436;&#x435; &#x43F;&#x435;&#x440;&#x435;&#x447;&#x438;&#x441;&#x43B;&#x438;&#x43B; &#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x44B;&#x435; &#x441;&#x441;&#x44B;&#x43B;&#x43A;&#x438;, &#x435;&#x441;&#x43B;&#x438; &#x437;&#x430;&#x445;&#x43E;&#x442;&#x438;&#x442;&#x435; &#x43F;&#x43E;&#x43A;&#x43E;&#x43F;&#x430;&#x442;&#x44C; &#x441;&#x430;&#x43C;&#x438;. &#x411;&#x435;&#x437;&#x443;&#x441;&#x43B;&#x43E;&#x432;&#x43D;&#x43E; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x430;&#x44F; &#x447;&#x430;&#x441;&#x442;&#x44C; &#x43C;&#x430;&#x442;&#x435;&#x440;&#x438;&#x430;&#x43B;&#x430; &#x431;&#x44B;&#x43B;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x430;&#x43D;&#x430; &#x43D;&#x430; <a href="https://github.com/golang/go/tree/master/src/runtime?ref=slavniy.com">&#x438;&#x441;&#x445;&#x43E;&#x434;&#x43D;&#x43E;&#x43C; &#x43A;&#x43E;&#x434;&#x435; &#x432; &#x43F;&#x430;&#x43A;&#x435;&#x442;&#x435; runtime</a>, &#x43D;&#x43E; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x443;&#x44E; &#x431;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x437;&#x430;&#x441;&#x43B;&#x443;&#x436;&#x438;&#x432;&#x430;&#x44E;&#x442; &#x435;&#x449;&#x451; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x430;&#x432;&#x442;&#x43E;&#x440;&#x43E;&#x432;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x442;&#x43E;&#x436;&#x435; &#x43A;&#x43E;&#x43F;&#x430;&#x43B;&#x438; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x434;&#x43E; &#x43C;&#x435;&#x43D;&#x44F;.  </p><ol><li><a href="https://pkg.go.dev/time?ref=slavniy.com">https://pkg.go.dev/time</a></li><li><a href="https://man7.org/linux/man-pages/man2/settimeofday.2.html?ref=slavniy.com">https://man7.org/linux/man-pages/man2/settimeofday.2.html</a></li><li><a href="https://man7.org/linux/man-pages/man7/vdso.7.html?ref=slavniy.com">https://man7.org/linux/man-pages/man7/vdso.7.html</a></li><li><a href="https://github.com/golang/go/blob/master/src/runtime/time_linux_amd64.s?ref=slavniy.com">go/src/runtime/time_linux_amd64.s</a></li><li><a href="https://docs.darlinghq.org/internals/macos-specifics/commpage.html?ref=slavniy.com">https://docs.darlinghq.org/internals/macos-specifics/commpage.html</a></li><li><a href="https://deviltux.thedev.id/notes/pure-reverse-engineering/?ref=slavniy.com">https://deviltux.thedev.id/notes/pure-reverse-engineering/</a></li><li><a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-kuser_shared_data?ref=slavniy.com">&#x41E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; KUSER_SHARED_DATA &#x432; &#x434;&#x43E;&#x43A;&#x435; Microsoft</a></li><li><a href="https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntexapi_x/kuser_shared_data/index.htm?ref=slavniy.com">&#x41F;&#x43E;&#x434;&#x440;&#x43E;&#x431;&#x43D;&#x430;&#x44F; &#x438;&#x441;&#x442;&#x43E;&#x440;&#x438;&#x44F;, &#x43D;&#x430;&#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x438; &#x43C;&#x43D;&#x43E;&#x436;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x438; &#x43E; KUSER_SHARED_DATA (&#x43D;&#x435; Microsoft)</a> </li><li><a href="https://github.com/reactos/reactos/blob/7e1d9ef9bf1f6c4ce48eb42b9264601981f4cc52/modules/rostests/winetests/ntdll/time.c?ref=slavniy.com#L237">&#x41E;&#x431;&#x440;&#x430;&#x449;&#x435;&#x43D;&#x438;&#x435; &#x43A; KSHARED_USER_DATA d ReactOS</a></li><li><a href="https://github.com/golang/go/blob/6fbad4be75e7746512bbe55794694ed788ea5c5b/src/runtime/sys_darwin_amd64.s?ref=slavniy.com#L115">&#x41E;&#x431;&#x440;&#x430;&#x449;&#x435;&#x43D;&#x438;&#x435; &#x43A; libc &#x43D;&#x430; macOS &#x43F;&#x440;&#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; time.Now</a></li><li><a href="https://www.willem.dev/articles/time-now-monotonic-clock/?ref=slavniy.com">https://www.willem.dev/articles/time-now-monotonic-clock/</a></li><li><a href="https://tpaschalis.me/golang-time-now/?ref=slavniy.com">https://tpaschalis.me/golang-time-now/</a></li></ol>]]></content:encoded></item><item><title><![CDATA[Обновление Web Artisan Pro 1.3.0]]></title><description><![CDATA[<p>Windows &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x438; Web Artisan Pro, &#x44F; &#x43E;&#x431;&#x435;&#x449;&#x430;&#x43B; &#x432;&#x430;&#x43C; &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x438;&#x435; &#x43D;&#x43E;&#x432;&#x43E;&#x441;&#x442;&#x438;? &#x412;&#x43E;&#x442; &#x43E;&#x43D;&#x438;!&#xA0;</p><p><strong>&#x41D;&#x43E;&#x432;</strong></p>]]></description><link>https://slavniy.com/obnovlieniie-web-artisan-pro-1-3-0/</link><guid isPermaLink="false">67c458df9f1e5a05a0698607</guid><category><![CDATA[💻 Web Artisan Pro]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Sun, 02 Mar 2025 13:13:02 GMT</pubDate><media:content url="https://slavniy.com/content/images/2025/03/photo_2025-03-02-17.12.46.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://slavniy.com/content/images/2025/03/photo_2025-03-02-17.12.46.jpeg" alt="&#x41E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; Web Artisan Pro 1.3.0"><p>Windows &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x438; Web Artisan Pro, &#x44F; &#x43E;&#x431;&#x435;&#x449;&#x430;&#x43B; &#x432;&#x430;&#x43C; &#x445;&#x43E;&#x440;&#x43E;&#x448;&#x438;&#x435; &#x43D;&#x43E;&#x432;&#x43E;&#x441;&#x442;&#x438;? &#x412;&#x43E;&#x442; &#x43E;&#x43D;&#x438;!&#xA0;</p><p><strong>&#x41D;&#x43E;&#x432;&#x430;&#x44F; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F; 1.3.0 &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43F;&#x43E;&#x434;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x430; &#x441;&#x435;&#x440;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x442;&#x43E;&#x43C; &#x438; Defender &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x431;&#x435;&#x441;&#x43F;&#x43E;&#x43A;&#x43E;&#x438;&#x442;&#x44C;! </strong>&#x427;&#x435;&#x441;&#x442;&#x43D;&#x43E; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F; &#x44D;&#x442;&#x43E; &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x43F;&#x43E;&#x431;&#x435;&#x434;&#x430; &#x434;&#x43B;&#x44F; &#x43C;&#x435;&#x43D;&#x44F; &#x441; &#x43A;&#x443;&#x447;&#x435;&#x439; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x435;&#x439; &#x438; &#x43F;&#x43E;&#x434;&#x432;&#x43E;&#x434;&#x43D;&#x44B;&#x445; &#x43A;&#x430;&#x43C;&#x43D;&#x435;&#x439;, &#x43D;&#x43E; &#x44F; &#x438;&#x441;&#x43A;&#x440;&#x435;&#x43D;&#x43D;&#x435; &#x440;&#x430;&#x434;, &#x447;&#x442;&#x43E; &#x432;&#x441;&#x451; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C;. &#x42D;&#x442;&#x43E; &#x437;&#x435;&#x43B;&#x451;&#x43D;&#x44B;&#x439; &#x441;&#x432;&#x435;&#x442; &#x434;&#x43B;&#x44F; &#x431;&#x443;&#x434;&#x443;&#x449;&#x438;&#x445; &#x448;&#x430;&#x433;&#x43E;&#x432; &#x43F;&#x43E; &#x440;&#x430;&#x437;&#x432;&#x438;&#x442;&#x438;&#x44E; Web Artisan Pro, &#x438; &#x43D;&#x435;&#x43A;&#x438;&#x439; &#x43F;&#x43E;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C; &#x43D;&#x430;&#x434;&#x451;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x434;&#x43B;&#x44F; &#x432;&#x430;&#x441;.&#xA0;</p><p>&#x41F;&#x43E;&#x43C;&#x438;&#x43C;&#x43E; &#x44D;&#x442;&#x43E;&#x433;&#x43E;:&#xA0;</p><ul><li>&#x1F525; &#x41D;&#x43E;&#x432;&#x430;&#x44F; &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x430;: File &#x2194; Base64 &#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x435;&#x440;!&#xA0;</li><li>&#x1F525; &#x422;&#x430;&#x431;&#x44B; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x441;&#x43A;&#x440;&#x43E;&#x43B;&#x43B;&#x44F;&#x442;&#x441;&#x44F; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43A;&#x43E;&#x43B;&#x451;&#x441;&#x438;&#x43A;&#x43E;&#x43C; &#x438;&#x43B;&#x438; &#x442;&#x440;&#x435;&#x43A;&#x43F;&#x430;&#x434;&#x43E;&#x43C;, &#x43D;&#x43E; &#x438; &#x43E;&#x442;&#x434;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C;&#x438; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x430;&#x43C;&#x438;, &#x435;&#x441;&#x43B;&#x438; &#x43E;&#x43D;&#x438; &#x43D;&#x435; &#x432;&#x43B;&#x435;&#x437;&#x430;&#x44E;&#x442; &#x432; &#x44D;&#x43A;&#x440;&#x430;&#x43D;</li><li>&#x2714;&#xFE0F; &#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x430; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x430; &#x441; &#x438;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; &#x446;&#x432;&#x435;&#x442;&#x43E;&#x432; &#x43F;&#x440;&#x438; &#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x432; ICO &#x43D;&#x430; Windows</li><li>&#x2714;&#xFE0F; &#x41F;&#x43E;&#x432;&#x44B;&#x448;&#x435;&#x43D;&#x430; &#x441;&#x442;&#x430;&#x431;&#x438;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; JSON Beautifier &#x43F;&#x440;&#x438; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x435; &#x441; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43C;&#x438; JSON&#x43A;&#x430;&#x43C;&#x438;</li><li>&#x412; JSON Beautifier &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x435;&#x43D; &#x440;&#x435;&#x436;&#x438;&#x43C; &quot;&#x43E;&#x434;&#x438;&#x43D;&#x430;&#x440;&#x43D;&#x44B;&#x445; &#x43A;&#x430;&#x432;&#x44B;&#x447;&#x435;&#x43A;&quot; (&#x43A;&#x43E;&#x433;&#x434;&#x430; &#x432;&#x432;&#x43E;&#x434;&#x44F;&#x442;&#x441;&#x44F; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x432;&#x438;&#x434;&#x430; {&apos;field&apos;: 123}, &#x444;&#x430;&#x43A;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; JavaScript &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;)</li><li>HTML Beautifier &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43D;&#x435; &#x43F;&#x44B;&#x442;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x430;&#x43C;&#x43E;&#x437;&#x430;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x44E;&#x449;&#x438;&#x435;&#x441;&#x44F; HTML &#x442;&#x435;&#x433;&#x438; (link, meta &#x438; &#x442;&#x430;&#x43A; &#x434;&#x430;&#x43B;&#x435;&#x435;)</li><li>&#x423; &#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x435;&#x440;&#x43E;&#x432; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C; &#x442;&#x435;&#x43A;&#x441;&#x442; &#x432; &#x43F;&#x43E;&#x43B;&#x435; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x430;</li></ul><p>&#x412;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x43A;&#x430;&#x43A; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x431;&#x438;&#x43D;&#x430;&#x440;&#x43D;&#x438;&#x43A; &#x441;&#xA0;<a href="https://web-artisan.pro/download?ref=slavniy.com" rel="noopener noreferrer">&#x441;&#x430;&#x439;&#x442;&#x430;</a>&#xA0;(&#x43E;&#x441;&#x43E;&#x431;&#x435;&#x43D;&#x43D;&#x43E; &#x435;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x435;&#x449;&#x451; &#x43D;&#x435; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x43B;&#x438; Web Artisan Pro &#x441;&#x435;&#x431;&#x435;, &#x442;&#x43E;&#x433;&#x434;&#x430; welcome &#x432;&#xA0;<a href="https://youtu.be/SSTxeY_DEnY?ref=slavniy.com" rel="noopener noreferrer">&#x440;&#x43E;&#x43B;&#x438;&#x43A;</a>), &#x442;&#x430;&#x43A; &#x438; &#x432; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x438; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x438;&#x43A;&#x43E;&#x43D;&#x43A;&#x443; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43A; &#x432; &#x43B;&#x435;&#x432;&#x43E;&#x43C; &#x43D;&#x438;&#x436;&#x43D;&#x435;&#x43C; &#x443;&#x433;&#x43B;&#x443; &#x438; &#x43A;&#x43B;&#x438;&#x43A;&#x43D;&#x443;&#x442;&#x44C; &quot;Check for Updates...&quot;.</p><div class="kg-card kg-callout-card kg-callout-card-green"><div class="kg-callout-emoji">&#x1F4AC;</div><div class="kg-callout-text">&#x414;&#x440;&#x443;&#x437;&#x44C;&#x44F;, &#x435;&#x441;&#x43B;&#x438; &#x432;&#x430;&#x43C; &#x43D;&#x440;&#x430;&#x432;&#x438;&#x442;&#x441;&#x44F; Web Artisan Pro, &#x442;&#x43E; <b><strong style="white-space: pre-wrap;">&#x43F;&#x43E;&#x434;&#x435;&#x43B;&#x438;&#x442;&#x435;&#x441;&#x44C;</strong></b> &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x43E;&#x439; &#x441; &#x434;&#x440;&#x443;&#x437;&#x44C;&#x44F;&#x43C; &#x438; &#x437;&#x43D;&#x430;&#x43A;&#x43E;&#x43C;&#x44B;&#x43C;! &#x427;&#x435;&#x43C; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43B;&#x44E;&#x434;&#x435;&#x439; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44E;&#x442;&#x441;&#x44F; Web Artisan, &#x442;&#x435;&#x43C; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x443; &#x43C;&#x435;&#x43D;&#x44F; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x441;&#x43E;&#x431;&#x440;&#x430;&#x442;&#x44C; &#x444;&#x438;&#x434;&#x431;&#x435;&#x43A; &#x438; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x434;&#x443;&#x43A;&#x442; &#x43B;&#x443;&#x447;&#x448;&#x435;.</div></div>]]></content:encoded></item><item><title><![CDATA[Исследование на тему RGBA-BGRA]]></title><description><![CDATA[<p>&#x41D;&#x435;&#x434;&#x430;&#x432;&#x43D;&#x43E; &#x43C;&#x43D;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x435;&#x442;&#x435;&#x43B; &#x431;&#x430;&#x433;&#x440;&#x435;&#x43F;&#x43E;&#x440;&#x442; &#x43D;&#x430; &#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x44C; &#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x430;&#x446;&#x438;&#x438; &#x43B;&#x44E;&#x431;&#x43E;</p>]]></description><link>https://slavniy.com/issliedovaniie-na-tiemu-rgba-bgra/</link><guid isPermaLink="false">67c30af09f1e5a05a06985df</guid><category><![CDATA[📝 Статьи]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Sat, 01 Mar 2025 13:27:50 GMT</pubDate><media:content url="https://slavniy.com/content/images/2025/03/BGRA-Explanation.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://slavniy.com/content/images/2025/03/BGRA-Explanation.jpg" alt="&#x418;&#x441;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x43D;&#x430; &#x442;&#x435;&#x43C;&#x443; RGBA-BGRA"><p>&#x41D;&#x435;&#x434;&#x430;&#x432;&#x43D;&#x43E; &#x43C;&#x43D;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x435;&#x442;&#x435;&#x43B; &#x431;&#x430;&#x433;&#x440;&#x435;&#x43F;&#x43E;&#x440;&#x442; &#x43D;&#x430; &#x43C;&#x43E;&#x434;&#x443;&#x43B;&#x44C; &#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x430;&#x446;&#x438;&#x438; &#x43B;&#x44E;&#x431;&#x43E;&#x439; &#x43A;&#x430;&#x440;&#x442;&#x438;&#x43D;&#x43A;&#x438; &#x432; ICO: &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443;-&#x442;&#x43E; &#x432; &#x438;&#x442;&#x43E;&#x433;&#x43E;&#x432;&#x43E;&#x43C; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x438; &#x446;&#x432;&#x435;&#x442;&#x430; &#x438;&#x441;&#x43A;&#x430;&#x436;&#x430;&#x43B;&#x438;&#x441;&#x44C; (&#x432;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x435; &#x43D;&#x430; &#x441;&#x43A;&#x440;&#x438;&#x43D;). &#x418; &#x44D;&#x442;&#x43E; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x43D;&#x43E;, &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x434; macOS &#x438; Linux &#x442;&#x430;&#x43A;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x44B; &#x43D;&#x435; &#x432;&#x43E;&#x437;&#x43D;&#x438;&#x43A;&#x430;&#x435;&#x442;, &#x438; &#x43F;&#x43E;&#x434; &#x43A;&#x430;&#x43F;&#x43E;&#x442;&#x43E;&#x43C; &#x44F; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44E; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x43E;&#x443;&#x440;&#x43E;&#x432;&#x43D;&#x435;&#x432;&#x443;&#x44E; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x443; Skia. &#x41A;&#x430;&#x43A; &#x44D;&#x442;&#x43E;&#x442; &#x431;&#x430;&#x433;&#x444;&#x438;&#x43A;&#x441; &#x43F;&#x440;&#x435;&#x432;&#x440;&#x430;&#x442;&#x438;&#x43B;&#x441;&#x44F; &#x432; &#x443;&#x432;&#x43B;&#x435;&#x43A;&#x430;&#x442;&#x435;&#x439;&#x43D;&#x435;&#x439;&#x448;&#x435;&#x435; &#x438;&#x441;&#x442;&#x43E;&#x440;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x435; &#x43F;&#x43E;&#x433;&#x440;&#x443;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x44F; &#x432;&#x430;&#x441; &#x441;&#x435;&#x439;&#x447;&#x430;&#x441; &#x438; &#x440;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x436;&#x443;.</p><h1 id="%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5">&#x412;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x435;</h1><p>&#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x434;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x432;&#x43D;&#x438;&#x43C;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x435;&#x435; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x438;&#x43C; &#x43D;&#x430; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x44B;. &#x415;&#x441;&#x43B;&#x438; &#x43F;&#x440;&#x438;&#x433;&#x43B;&#x44F;&#x434;&#x435;&#x442;&#x44C;&#x441;&#x44F;, &#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x443;&#x432;&#x438;&#x434;&#x435;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x446;&#x432;&#x435;&#x442;&#x430; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x43D;&#x435; &#x438;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x44B; (&#x447;&#x451;&#x440;&#x43D;&#x44B;&#x439; &#x446;&#x432;&#x435;&#x442; &#x43D;&#x435; &#x441;&#x442;&#x430;&#x43B; &#x431;&#x435;&#x43B;&#x44B;&#x43C;), &#x43E;&#x43D;&#x438; &#x431;&#x443;&#x434;&#x442;&#x43E;&#xA0;<em>&#x43F;&#x435;&#x440;&#x435;&#x43F;&#x443;&#x442;&#x430;&#x43D;&#x44B;</em>. &#x418; &#x432;&#x435;&#x434;&#x44C; &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;, &#x43F;&#x438;&#x43A;&#x441;&#x435;&#x43B;&#x438; &#x432; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x438; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x432; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x445; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x430;&#x445;: &#x432; &#x43A;&#x430;&#x43A;&#x438;&#x445;-&#x442;&#x43E; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x44F;&#x445; &#x43D;&#x430; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x439; &#x43F;&#x438;&#x43A;&#x441;&#x435;&#x43B;&#x44C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43E;&#x442;&#x434;&#x430;&#x442;&#x44C; &#x43F;&#x43E; 16 &#x431;&#x438;&#x442;, &#x442;&#x43E;&#x433;&#x434;&#x430; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x441;&#x44F; 65536 &#x446;&#x432;&#x435;&#x442;&#x43E;&#x432;, &#x43D;&#x43E; &#x43B;&#x443;&#x447;&#x448;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43E;&#x442;&#x434;&#x430;&#x442;&#x44C; &#x43F;&#x43E; 32 &#x431;&#x438;&#x442;&#x430;, &#x442;&#x43E;&#x433;&#x434;&#x430; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x441;&#x44F; 16 &#x43C;&#x43B;&#x43D; &#x446;&#x432;&#x435;&#x442;&#x43E;&#x432;, &#x430; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x434;&#x430;&#x436;&#x435; &#x432;&#x441;&#x435; 64 &#x438;&#x43B;&#x438; 128 &#x431;&#x438;&#x442;! &#x41B;&#x44E;&#x431;&#x43E;&#x439; &#x43A;&#x430;&#x43F;&#x440;&#x438;&#x437; &#x437;&#x430; &#x432;&#x430;&#x448;&#x438; &#x431;&#x430;&#x439;&#x442;&#x44B;. &#x41D;&#x43E;, &#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F;, &#x44F; &#x443;&#x432;&#x43E;&#x436;&#x443; &#x432;&#x430;&#x441; &#x43E;&#x442; &#x441;&#x443;&#x442;&#x438;.</p><p>&#x421;&#x430;&#x43C;&#x43E;&#x435; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E;&#x435;, &#x447;&#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x440;&#x430;&#x437;&#x43D;&#x430;&#x44F; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x43D;&#x43E;&#x441;&#x442;&#x44C;, &#x43D;&#x43E; &#x438; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x439;&#xA0;<strong>&#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43E;&#x43A; &#x446;&#x432;&#x435;&#x442;&#x43E;&#x432;&#x44B;&#x445; &#x43A;&#x430;&#x43D;&#x430;&#x43B;&#x43E;&#x432;</strong>. &#x41D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x434;&#x43B;&#x44F; &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; 32-&#x431;&#x438;&#x442;&#x43D;&#x43E;&#x433;&#x43E; &#x446;&#x432;&#x435;&#x442;&#x430; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442; RGBA8888 &#x438;&#x43B;&#x438; BGRA8888. &#x422;&#x43E; &#x447;&#x442;&#x43E; &quot;8&quot; &#x2013; &#x44D;&#x442;&#x43E; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x431;&#x438;&#x442;&#x43E;&#x432; &#x43D;&#x430; &#x446;&#x432;&#x435;&#x442;, &#x430; &#x432;&#x43E;&#x442; RGBA/BGRA &#x2013; &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43E;&#x43A; red, green, blue &#x438; alpha &#x43A;&#x430;&#x43D;&#x430;&#x43B;&#x43E;&#x432;. &#x418;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E;. &#x410; &#x435;&#x449;&#x451; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x441;&#x442;&#x430;&#x43B;&#x43E; &#x43E;&#x447;&#x435;&#x432;&#x438;&#x434;&#x43D;&#x43E;, &#x447;&#x442;&#x43E; &#x438;&#x441;&#x43A;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x43D;&#x430; &#x441;&#x43A;&#x440;&#x438;&#x43D;&#x435; &#x432;&#x44B;&#x437;&#x432;&#x430;&#x43D;&#x44B; &#x43D;&#x435;&#x432;&#x435;&#x440;&#x43D;&#x44B;&#x43C; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43A;&#x43E;&#x43C;. &#x41D;&#x43E; &#x43A;&#x430;&#x43A; &#x43E;&#x43D; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x441;&#x44F; &#x43D;&#x435;&#x432;&#x435;&#x440;&#x43D;&#x44B;&#x43C;?</p><p>&#x414;&#x435;&#x43B;&#x43E; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; ICO &#x2013; &#x441;&#x432;&#x43E;&#x435;&#x433;&#x43E; &#x440;&#x43E;&#x434;&#x430; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x439;&#x43D;&#x435;&#x440; &#x438;&#x437; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x439; &#x441; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x43C;&#x438; &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440;&#x430;&#x43C;&#x438;. &#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x431;&#x443;&#x43A;&#x432;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x43E;&#x434; 16&#x445;16 &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43E;&#x434;&#x43D;&#x443; &#x438;&#x43A;&#x43E;&#x43D;&#x43A;&#x443; (&#x431;&#x43E;&#x43B;&#x435;&#x435; &#x447;&#x438;&#x442;&#x430;&#x435;&#x43C;&#x443;&#x44E; &#x438; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x443;&#x44E;), &#x430; &#x43F;&#x43E;&#x434; 256&#x445;256 &#x434;&#x440;&#x443;&#x433;&#x443;&#x44E;. &#x41D;&#x43E; &#x432;&#x430;&#x436;&#x43D;&#x43E; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x442;&#x43E;, &#x447;&#x442;&#x43E; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x43E;-&#x440;&#x430;&#x437;&#x43D;&#x43E;&#x43C;&#x443;, &#x438; &#x442;&#x440;&#x430;&#x434;&#x438;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x43E; &#x432;&#x441;&#x451; &#x447;&#x442;&#x43E; &#x43C;&#x435;&#x43D;&#x44C;&#x448;&#x435; 256&#x445;256 &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x435; BMP &#x434;&#x43B;&#x44F; &#x43B;&#x443;&#x447;&#x448;&#x435;&#x439; &#x441;&#x43E;&#x432;&#x43C;&#x435;&#x441;&#x442;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438;. &#x412;&#x441;&#x451; &#x447;&#x442;&#x43E; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x432; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x435; PNG &#x438;&#x437;-&#x437;&#x430; &#x43B;&#x443;&#x447;&#x448;&#x435;&#x433;&#x43E; &#x441;&#x436;&#x430;&#x442;&#x438;&#x44F;. &#x410; &#x432; BMP &#x446;&#x432;&#x435;&#x442;&#x430; &#x43A;&#x43E;&#x434;&#x438;&#x440;&#x443;&#x44E;&#x442;&#x441;&#x44F; &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437; &#x432;&#xA0;<strong>BGRA</strong>&#xA0;(&#x438;&#x43B;&#x438; BGR)!</p><p>&#x41D;&#x43E; &#x434;&#x43E; &#x441;&#x435;&#x433;&#x43E; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442;&#x430; &#x432;&#x441;&#x451; &#x43E;&#x441;&#x442;&#x430;&#x451;&#x442;&#x441;&#x44F; &#x43E;&#x434;&#x43D;&#x43E;&#x437;&#x43D;&#x430;&#x447;&#x43D;&#x44B;&#x43C;: BMP &#x432; BGRA, &#x442;&#x43E; &#x435;&#x441;&#x442;&#x44C; &#x43E;&#x431;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43E;&#x43A;. &#x41F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x436;&#x435; &#x440;&#x430;&#x437;&#x43D;&#x438;&#x446;&#x430; &#x432;&#x44B;&#x43B;&#x435;&#x437;&#x430;&#x435;&#x442; &#x43D;&#x430; Windows &#x438; macOS? &#x412;&#x438;&#x434;&#x438;&#x43C;&#x43E;, &#x435;&#x441;&#x442;&#x44C; &#x43A;&#x430;&#x43A;&#x430;&#x44F;-&#x442;&#x43E; &#x43F;&#x43B;&#x430;&#x442;&#x444;&#x43E;&#x440;&#x43C;&#x43E;&#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x430;&#x44F; &#x438;&#x441;&#x442;&#x43E;&#x440;&#x438;&#x44F;?</p><h1 id="%D0%BA%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%B0%D1%8F-%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F-%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0">&#x41A;&#x43E;&#x440;&#x43E;&#x442;&#x43A;&#x430;&#x44F; &#x438;&#x441;&#x442;&#x43E;&#x440;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x430;&#x44F; &#x441;&#x43F;&#x440;&#x430;&#x432;&#x43A;&#x430;</h1><p>&#x415;&#x441;&#x442;&#x44C;! &#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x43A;&#x430;&#x43A; &#x444;&#x430;&#x43A;&#x442;: &#x438;&#x441;&#x442;&#x43E;&#x440;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; Windows &#x43F;&#x440;&#x438;&#x434;&#x435;&#x440;&#x436;&#x438;&#x432;&#x430;&#x43B;&#x430;&#x441;&#x44C; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x430; BGRA, &#x430; MacOS RGBA. &#x418; &#x432;&#x44B; &#x43D;&#x430;&#x432;&#x435;&#x440;&#x43D;&#x44F;&#x43A;&#x430; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x438; &#x434;&#x43E;&#x433;&#x430;&#x434;&#x44B;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F;, &#x447;&#x442;&#x43E; &#x440;&#x430;&#x437;&#x43D;&#x438;&#x446;&#x430; &#x432; &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43A;&#x435; &#x431;&#x430;&#x439;&#x442; &#x431;&#x44B;&#x43B;&#x430; &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x442;&#x430;&#x43A;!</p><p>&#x412;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x430; &#x440;&#x430;&#x441;&#x446;&#x432;&#x435;&#x442;&#x430; Windows &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x43D;&#x441;&#x442;&#x432;&#x43E; &#x43A;&#x43E;&#x43C;&#x43F;&#x44C;&#x44E;&#x442;&#x435;&#x440;&#x43E;&#x432; &#x431;&#x44B;&#x43B;&#x43E; &#x43D;&#x430; Intel &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x43E;&#x440;&#x430;&#x445;, &#x430; &#x432;&#x43E;&#x442; Apple &#x43F;&#x440;&#x435;&#x434;&#x43F;&#x43E;&#x447;&#x438;&#x442;&#x430;&#x43B;&#x430; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;&#x43E;&#x440;&#x44B; Motorola. &#x418; &#x443; &#x44D;&#x442;&#x438;&#x445; &#x434;&#x432;&#x443;&#x445; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440; &#x435;&#x441;&#x442;&#x44C; &#x43E;&#x434;&#x43D;&#x43E; &#x438;&#x437; &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x432;&#x44B;&#x445; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x438;&#x439;: &#x43F;&#x43E;&#x440;&#x44F;&#x434;&#x43E;&#x43A; &#x431;&#x430;&#x439;&#x442;! &#x423; Intel &#x44D;&#x442;&#x43E; little-endian, &#x430; Motorola (PowerPC) big-endian. &#x422;&#x430;&#x43A; &#x432;&#x43E;&#x442; &#x43E;&#x442;&#x43A;&#x443;&#x434;&#x430; &#x440;&#x430;&#x441;&#x442;&#x443;&#x442; &#x43D;&#x43E;&#x433;&#x438;!</p><p>&#x412; &#x442;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x430; &#x434;&#x430;&#x436;&#x435; &#x43D;&#x435;&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x430;&#x44F; &#x442;&#x440;&#x430;&#x43D;&#x441;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44F; &#x43E;&#x434;&#x43D;&#x43E;&#x433;&#x43E; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x430; &#x432; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x439; &#x43E;&#x442;&#x43D;&#x438;&#x43C;&#x430;&#x43B;&#x430; &#x434;&#x440;&#x430;&#x433;&#x43E;&#x446;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x440;&#x435;&#x441;&#x443;&#x440;&#x441;&#x44B;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x438;&#x442;&#x430;&#x43A; &#x431;&#x44B;&#x43B;&#x43E; &#x43D;&#x435; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;. &#x41F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x446;&#x438;&#x43E;&#x43D;&#x43D;&#x44B;&#x435; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x44B; &#x441;&#x442;&#x430;&#x440;&#x430;&#x43B;&#x438;&#x441;&#x44C; &#x43F;&#x440;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x442;&#x44C; API, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x431;&#x44B;&#x43B;&#x438; &#x43C;&#x430;&#x43A;&#x441;&#x438;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x431;&#x43B;&#x438;&#x437;&#x43A;&#x438; &#x43A; &#x436;&#x435;&#x43B;&#x435;&#x437;&#x443;. &#x41D;&#x43E; &#x442;&#x430;&#x43A;&#x438;&#x435; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x438;&#x43C;&#x435;&#x44E;&#x442; &#x441;&#x432;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x43E; &#x443;&#x43A;&#x43E;&#x440;&#x435;&#x43D;&#x44F;&#x442;&#x44C;&#x441;&#x44F; &#x438; &#x43D;&#x430;&#x43F;&#x43E;&#x43C;&#x438;&#x43D;&#x430;&#x442;&#x44C; &#x43E; &#x441;&#x435;&#x431;&#x435; &#x434;&#x430;&#x436;&#x435; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x434;&#x435;&#x441;&#x44F;&#x442;&#x43A;&#x43E;&#x432; &#x43B;&#x435;&#x442; &#x441;&#x43F;&#x443;&#x441;&#x442;&#x44F;.</p><h1 id="%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%BE-%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F">&#x412;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x437;&#x430;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x44F;</h1><p>&#x415;&#x441;&#x43B;&#x438; &#x432;&#x434;&#x440;&#x443;&#x433; &#x443; &#x432;&#x430;&#x441; &#x43D;&#x435; &#x441;&#x43B;&#x43E;&#x436;&#x438;&#x43B;&#x441;&#x44F; &#x43F;&#x430;&#x437;&#x43B;, &#x442;&#x43E; &#x432;&#x43E;&#x442; &#x444;&#x438;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x43E;&#x431;&#x44A;&#x44F;&#x441;&#x43D;&#x435;&#x43D;&#x438;&#x435;: &#x44F; &#x441;&#x447;&#x438;&#x442;&#x44B;&#x432;&#x430;&#x43B; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x432;&#x44B;&#x431;&#x438;&#x440;&#x430;&#x43B; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;. &#x41D;&#x43E; &#x43F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430; &#x432;&#x435;&#x43B;&#x430;&#x441;&#x44C; &#x43D;&#x430; &#x43C;&#x430;&#x43A;&#x435;, &#x43F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x44F; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x43B; &#x446;&#x432;&#x435;&#x442;&#x430; &#x432; &#x43F;&#x440;&#x438;&#x432;&#x44B;&#x447;&#x43D;&#x43E;&#x43C; &#x434;&#x43B;&#x44F; &#x43C;&#x430;&#x43A;&#x430; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x435;: &#x432; RGBA. &#x415;&#x441;&#x43B;&#x438; &#x44F; &#x445;&#x43E;&#x447;&#x443; &#x430;&#x434;&#x430;&#x43F;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x438;&#x445; &#x43F;&#x43E;&#x434; BMP, &#x442;&#x43E; &#x43C;&#x43D;&#x435; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C; R &#x438; B &#x43A;&#x430;&#x43D;&#x430;&#x43B;&#x44B; &#x43C;&#x435;&#x441;&#x442;&#x430;&#x43C;&#x438;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x43E;&#x441;&#x44C; BGRA, &#x447;&#x442;&#x43E; &#x44F; &#x438; &#x434;&#x435;&#x43B;&#x430;&#x43B;. &#x41D;&#x43E; &#x43D;&#x430; Windows &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x43D;&#x443;&#x436;&#x43D;&#x43E;! &#x412;&#x435;&#x434;&#x44C; Windows &#x438;&#x437;&#x43D;&#x430;&#x447;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x43B;&#x430; &#x43C;&#x43D;&#x435; &#x446;&#x432;&#x435;&#x442;&#x430; &#x432; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x435; BGRA, &#x438; &#x44F; &#x438;&#x445; &#x43C;&#x435;&#x43D;&#x44F;&#x43B; &#x43C;&#x435;&#x441;&#x442;&#x430;&#x43C;&#x438; &#x43A;&#x430;&#x43A; &#x431;&#x44B; &#x435;&#x449;&#x451; &#x440;&#x430;&#x437;. &#x41E;&#x442;&#x441;&#x44E;&#x434;&#x430; &#x438; &#x432;&#x43E;&#x437;&#x43D;&#x438;&#x43A;&#x430;&#x43B;&#x430; &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x43F;&#x443;&#x442;&#x430;&#x43D;&#x438;&#x446;&#x430;!</p>]]></content:encoded></item><item><title><![CDATA[Обновление Web Artisan Pro 1.2.2]]></title><description><![CDATA[<p>Go &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x438;, &#x44D;&#x442;&#x43E; <strong>&#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; Web Artisan Pro 1.2.2</strong> &#x44F; &#x43F;&#x43E;&#x441;&#x432;&#x44F;&#x449;&#x430;&#x44E; &#x432;&#x430;&#x43C; &#x1F601; (&#x438; &#x43D;&#x435; &#x442;&#x43E;</p>]]></description><link>https://slavniy.com/obnovlieniie-web-artisan-pro-1-2-2/</link><guid isPermaLink="false">67c458029f1e5a05a06985ef</guid><category><![CDATA[💻 Web Artisan Pro]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Sat, 22 Feb 2025 00:00:00 GMT</pubDate><media:content url="https://slavniy.com/content/images/2025/03/photo_2025-03-02-17.08.05.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://slavniy.com/content/images/2025/03/photo_2025-03-02-17.08.05.jpeg" alt="&#x41E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; Web Artisan Pro 1.2.2"><p>Go &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x438;, &#x44D;&#x442;&#x43E; <strong>&#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; Web Artisan Pro 1.2.2</strong> &#x44F; &#x43F;&#x43E;&#x441;&#x432;&#x44F;&#x449;&#x430;&#x44E; &#x432;&#x430;&#x43C; &#x1F601; (&#x438; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E;!)&#xA0;</p><p>&#x412;&#x441;&#x451; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x447;&#x442;&#x43E; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x432; Web Artisan &#x435;&#x441;&#x442;&#x44C; <strong>&#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x435;&#x440; &#x438;&#x437; JSON &#x432; Go</strong> &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;! &#x421; &#x443;&#x43C;&#x43D;&#x44B;&#x43C; omitempty, inline &#x440;&#x435;&#x436;&#x438;&#x43C;&#x43E;&#x43C; &#x438; &#x435;&#x449;&#x451; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x43C;&#x438; &#x443;&#x434;&#x43E;&#x431;&#x43D;&#x44B;&#x43C;&#x438; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x447;&#x43A;&#x430;&#x43C;&#x438;.&#xA0;</p><p>&#x41D;&#x43E; &#x44D;&#x442;&#x43E; &#x43D;&#x435; &#x432;&#x441;&#x451;!</p><ul><li>&#x1F525; &#x41C;&#x438;&#x43D;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44F; &#x432; JSON Beautifier</li><li>&#x412; JavaScript Beautifier &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x432;&#x44B;&#x431;&#x440;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x435;&#x434;&#x43F;&#x43E;&#x447;&#x442;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x435; &#x43E;&#x442;&#x441;&#x442;&#x443;&#x43F;&#x44B;</li><li>&#x412; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440;&#x430;&#x445; &#x434;&#x432;&#x43E;&#x439;&#x43D;&#x44B;&#x43C; &#x43A;&#x43B;&#x438;&#x43A;&#x43E;&#x43C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x44D;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442; &#x438;&#x437; &#x438;&#x441;&#x442;&#x43E;&#x440;&#x438;&#x438;</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D; &#x446;&#x432;&#x435;&#x442; &#x441;&#x441;&#x44B;&#x43B;&#x43E;&#x43A; &#x432; JSON/JS &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x445; &#x43F;&#x440;&#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x442;&#x451;&#x43C;&#x43D;&#x43E;&#x439; &#x442;&#x435;&#x43C;&#x44B;</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D; &#x43D;&#x435;&#x432;&#x435;&#x440;&#x43D;&#x44B;&#x439; &#x441;&#x438;&#x43D;&#x442;&#x430;&#x43A;&#x441;&#x438;&#x441; &#x43F;&#x440;&#x438; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438; &#x442;&#x435;&#x43A;&#x441;&#x442;&#x430; &#x432; HTML &#x438; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x43E; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x430;</li></ul><p>&#x412;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x43A;&#x430;&#x43A; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x431;&#x438;&#x43D;&#x430;&#x440;&#x43D;&#x438;&#x43A; &#x441;&#xA0;<a href="https://web-artisan.pro/download?ref=slavniy.com" rel="noopener noreferrer">&#x441;&#x430;&#x439;&#x442;&#x430;</a>&#xA0;(&#x43E;&#x441;&#x43E;&#x431;&#x435;&#x43D;&#x43D;&#x43E; &#x435;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x435;&#x449;&#x451; &#x43D;&#x435; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x43B;&#x438; Web Artisan Pro &#x441;&#x435;&#x431;&#x435;, &#x442;&#x43E;&#x433;&#x434;&#x430; welcome &#x432;&#xA0;<a href="https://youtu.be/SSTxeY_DEnY?ref=slavniy.com" rel="noopener noreferrer">&#x440;&#x43E;&#x43B;&#x438;&#x43A;</a>), &#x442;&#x430;&#x43A; &#x438; &#x432; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x438; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x438;&#x43A;&#x43E;&#x43D;&#x43A;&#x443; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43A; &#x432; &#x43B;&#x435;&#x432;&#x43E;&#x43C; &#x43D;&#x438;&#x436;&#x43D;&#x435;&#x43C; &#x443;&#x433;&#x43B;&#x443; &#x438; &#x43A;&#x43B;&#x438;&#x43A;&#x43D;&#x443;&#x442;&#x44C; &quot;Check for Updates...&quot;.</p><div class="kg-card kg-toggle-card" data-kg-toggle-state="close">
            <div class="kg-toggle-heading">
                <h4 class="kg-toggle-heading-text"><span style="white-space: pre-wrap;">&#x410; &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x443; &#x442;&#x435;&#x431;&#x44F; &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x43D;&#x430;&#x44F; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; patch &#x432;&#x435;&#x440;&#x441;&#x438;&#x439;? &#x422;&#x44B; &#x448;&#x442;&#x43E;, &#x43D;&#x435; &#x443;&#x43C;&#x435;&#x435;&#x448;&#x44C; &#x438;&#x445; &#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x44C;? (1.0.</span><b><strong style="white-space: pre-wrap;">2</strong></b><span style="white-space: pre-wrap;">, 1.1.</span><b><strong style="white-space: pre-wrap;">1</strong></b><span style="white-space: pre-wrap;">, 1.2.</span><b><strong style="white-space: pre-wrap;">2</strong></b><span style="white-space: pre-wrap;">...)</span></h4>
                <button class="kg-toggle-card-icon" aria-label="Expand toggle to read content">
                    <svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                        <path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/>
                    </svg>
                </button>
            </div>
            <div class="kg-toggle-content"><p><span style="white-space: pre-wrap;">&#x410; &#x43F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x443; &#x442;&#x435;&#x431;&#x44F; &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x441;&#x442;&#x440;&#x430;&#x43D;&#x43D;&#x430;&#x44F; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; patch &#x432;&#x435;&#x440;&#x441;&#x438;&#x439;? &#x422;&#x44B; &#x448;&#x442;&#x43E;, &#x43D;&#x435; &#x443;&#x43C;&#x435;&#x435;&#x448;&#x44C; &#x438;&#x445; &#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x44C;? (1.0.</span><b><strong style="white-space: pre-wrap;">2</strong></b><span style="white-space: pre-wrap;">, 1.1.</span><b><strong style="white-space: pre-wrap;">1</strong></b><span style="white-space: pre-wrap;">, 1.2.</span><b><strong style="white-space: pre-wrap;">2</strong></b><span style="white-space: pre-wrap;">...)&#xA0;</span></p><p><span style="white-space: pre-wrap;">&#x41D;&#x430; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x434;&#x435;&#x43B;&#x435; &#x44D;&#x442;&#x43E; &#x443;&#x434;&#x438;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x437;&#x430;&#x43A;&#x43E;&#x43D;&#x43E;&#x43C;&#x435;&#x440;&#x43D;&#x43E;&#x441;&#x442;&#x44C;: &#x432;&#x43E;&#x442; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x44F; &#x437;&#x430;&#x43A;&#x430;&#x43D;&#x447;&#x438;&#x432;&#x430;&#x44E; &#x447;&#x430;&#x441;&#x43E;&#x432; &#x432; 18-19 &#x440;&#x435;&#x43B;&#x438;&#x437;, &#x443;&#x436;&#x435; &#x43F;&#x440;&#x43E;&#x442;&#x435;&#x441;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43B; &#x43D;&#x430; &#x442;&#x440;&#x451;&#x445; &#x43F;&#x43B;&#x430;&#x442;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x445;, &#x43D;&#x430;&#x437;&#x43D;&#x430;&#x447;&#x438;&#x43B; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44E;, &#x43F;&#x440;&#x43E;&#x432;&#x43E;&#x436;&#x443; &#x444;&#x438;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435; &#x442;&#x435;&#x441;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x43D;&#x43E;&#x432;&#x44B;&#x445; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x439;, &#x438; &#x442;&#x443;&#x442; &#x431;&#x430;&#x446;! &#x412;&#x43E;&#x442; &#x432; &#x442;&#x430;&#x43A;&#x43E;&#x43C; &#x443;&#x437;&#x43A;&#x43E;&#x43C; &#x43A;&#x435;&#x439;&#x441;&#x435; &#x43F;&#x440;&#x438; &#x43B;&#x443;&#x43D;&#x435; &#x432; &#x447;&#x435;&#x442;&#x432;&#x451;&#x440;&#x442;&#x43E;&#x439; &#x444;&#x430;&#x437;&#x435; &#x432;&#x43E;&#x437;&#x43D;&#x438;&#x43A;&#x430;&#x435;&#x442; &#x431;&#x430;&#x433;. &#x42F; &#x43F;&#x44B;&#x442;&#x430;&#x44E;&#x441;&#x44C; &#x443;&#x43B;&#x43E;&#x43C;&#x430;&#x442;&#x44C; &#x441;&#x435;&#x431;&#x44F;, &#x447;&#x442;&#x43E; &#x43A;&#x435;&#x439;&#x441; &#x443;&#x437;&#x43A;&#x438;&#x439;, &#x43D;&#x435; &#x43A;&#x440;&#x438;&#x442;&#x438;&#x447;&#x43D;&#x44B;&#x439;, &#x43F;&#x43E;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44E; &#x43D;&#x430; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x439; &#x43D;&#x435;&#x434;&#x435;&#x43B;&#x435; &#x438; &#x442;&#x430;&#x43A; &#x434;&#x430;&#x43B;&#x435;&#x435;, &#x43D;&#x43E; &#x43F;&#x43E;&#x43A;&#x430; &#x431;&#x435;&#x437;&#x443;&#x441;&#x43F;&#x435;&#x448;&#x43D;&#x43E;. &#x421;&#x430;&#x436;&#x443;&#x441;&#x44C; &#x447;&#x438;&#x43D;&#x438;&#x442;&#x44C;, &#x438; &#x441;&#x430;&#x43C;&#x438; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x443;&#x432;&#x438;&#x434;&#x435;&#x442;&#x44C; &#x432;&#x43E; &#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x432;&#x44B;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x1F601;. &#x418; &#x432;&#x435;&#x434;&#x44C; &#x432;&#x441;&#x451; &#x440;&#x430;&#x432;&#x43D;&#x43E; &#x43D;&#x430;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x435; &#x431;&#x430;&#x433;&#x438; (&#x437;&#x430; &#x447;&#x442;&#x43E; &#x432;&#x430;&#x43C; &#x441;&#x43F;&#x430;&#x441;&#x438;&#x431;&#x43E;!).</span></p><p><span style="white-space: pre-wrap;">&#x41A;&#x441;&#x442;&#x430;&#x442;&#x438;, &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x43F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x43D;&#x43E;&#x43C;&#x435;&#x440; &#x441;&#x431;&#x43E;&#x440;&#x43A;&#x438; &#x432; About &#x442;&#x430;&#x43A;&#x43E;&#x439;, &#x43A;&#x430;&#x43A;&#x43E;&#x439; &#x43E;&#x43D; &#x435;&#x441;&#x442;&#x44C;, &#x44D;&#x442;&#x43E; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x447;&#x438;&#x441;&#x43B;&#x43E; </span><i><em class="italic" style="white-space: pre-wrap;">&#x440;&#x435;&#x43B;&#x438;&#x437;&#x43D;&#x44B;&#x445;</em></i><span style="white-space: pre-wrap;"> &#x441;&#x431;&#x43E;&#x440;&#x43E;&#x43A; (&#x43D;&#x435; &#x434;&#x435;&#x431;&#x430;&#x436;&#x43D;&#x44B;&#x445;). &#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x43E;&#x442;&#x441;&#x43B;&#x435;&#x434;&#x438;&#x442;&#x44C; &#x440;&#x430;&#x437;&#x43D;&#x438;&#x446;&#x443; &#x441; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x43C; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435;&#x43C;.</span></p></div>
        </div>]]></content:encoded></item><item><title><![CDATA[Обновление Web Artisan Pro 1.1.1]]></title><description><![CDATA[JPG/PNG – WebP конвертер, поддержка кириллицы в JSON утилитах, хоткеи для управления вкладками, закрытие колёсиком, добавлена возможность...]]></description><link>https://slavniy.com/obnovlieniie-web-artisan-pro-1-1-1/</link><guid isPermaLink="false">67b394799f1e5a05a06985a2</guid><category><![CDATA[💻 Web Artisan Pro]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Sun, 16 Feb 2025 00:00:00 GMT</pubDate><media:content url="https://slavniy.com/content/images/2025/02/photo_2025-02-17-23.58.07.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://slavniy.com/content/images/2025/02/photo_2025-02-17-23.58.07.jpeg" alt="&#x41E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; Web Artisan Pro 1.1.1"><p>&#x412; &#x44D;&#x442;&#x43E;&#x442; &#x440;&#x430;&#x437; &#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x435;&#x449;&#x451; &#x432;&#x43D;&#x443;&#x448;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x435;&#x435;:&#xA0;</p><ul><li>&#x1F525; <strong>&#x425;&#x43E;&#x442;&#x43A;&#x435;&#x438;</strong> &#x434;&#x43B;&#x44F; &#x443;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x432;&#x43A;&#x43B;&#x430;&#x434;&#x43A;&#x430;&#x43C;&#x438;! Ctrl+W/Cmd+W, Ctrl+PgDown/PgUp, Ctrl+1-8/Cmd+1-8!&#xA0;</li><li>&#x1F525; <strong>&#x417;&#x430;&#x43A;&#x440;&#x44B;&#x442;&#x438;&#x435;</strong> &#x432;&#x43A;&#x43B;&#x430;&#x434;&#x43A;&#x438; <strong>&#x43A;&#x43E;&#x43B;&#x451;&#x441;&#x438;&#x43A;&#x43E;&#x43C;</strong>: &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43D;&#x435; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x446;&#x435;&#x43B;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x432; &#x43A;&#x440;&#x435;&#x441;&#x442;&#x438;&#x43A;</li><li>&#x1F525; <strong>&#x41D;&#x43E;&#x432;&#x430;&#x44F; &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x430;</strong>: JPG/PNG to WebP &#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x435;&#x440;!</li><li>&#x1F525; &#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; <strong>JSON</strong> &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x44B; &#x432;&#x44B;&#x432;&#x43E;&#x434;&#x44F;&#x442; <strong>&#x43A;&#x438;&#x440;&#x438;&#x43B;&#x43B;&#x438;&#x446;&#x443;</strong> &#x438; &#x43D;&#x435;-ASCII &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B;&#x44B; &#x431;&#x435;&#x437; &#x44D;&#x43A;&#x440;&#x430;&#x43D;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;. &#x41F;&#x440;&#x438; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x435;&#x433;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x432;&#x43A;&#x43B;&#x44E;&#x447;&#x438;&#x442;&#x44C; &#x43E;&#x43F;&#x446;&#x438;&#x435;&#x439; &quot;Escape Non-ASCII&quot;</li><li>&#x411;&#x43E;&#x43B;&#x44C;&#x448;&#x430;&#x44F; &#x447;&#x430;&#x441;&#x442;&#x44C; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x430; &#x43F;&#x435;&#x440;&#x435;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x430; &#x43D;&#x430; &#x440;&#x443;&#x441;&#x441;&#x43A;&#x438;&#x439;</li><li>JSON to CSV &#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x435;&#x440; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x432;&#x44B;&#x434;&#x430;&#x451;&#x442; &#x43E;&#x442;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x443;&#x44E; JSON&#x43A;&#x443; (&#x43D;&#x430;&#x441;&#x442;&#x440;&#x430;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F;)</li><li>&#x413;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440;&#x44B; &#x43F;&#x435;&#x440;&#x435;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x43D;&#x44B; &#x438; &#x43F;&#x440;&#x438;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x44B; &#x43A; &#x43E;&#x431;&#x449;&#x435;&#x43C;&#x443; &#x432;&#x438;&#x434;&#x443;</li><li>&#x412; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440;&#x44B; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x430; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43E;&#x447;&#x438;&#x441;&#x442;&#x43A;&#x438; &#x438;&#x441;&#x442;&#x43E;&#x440;&#x438;&#x438; &#x438; &#x43F;&#x43E;&#x43B;&#x44F; &#x432;&#x432;&#x43E;&#x434;&#x430;</li><li>&#x414;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x430; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x441;&#x435; &#x432;&#x43A;&#x43B;&#x430;&#x434;&#x43A;&#x438; &#x43F;&#x440;&#x438; &#x441;&#x432;&#x43E;&#x440;&#x430;&#x447;&#x438;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x432; &#x442;&#x440;&#x435;&#x439; (&#x43F;&#x43E; &#x443;&#x43C;&#x43E;&#x43B;&#x447;&#x430;&#x43D;&#x438;&#x44E; &#x43E;&#x442;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x43E;)</li><li>&#x412; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x43A;&#x430;&#x445; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x441;&#x43C;&#x43E;&#x442;&#x440;&#x435;&#x442;&#x44C; &#x441;&#x440;&#x43E;&#x43A;&#x438; &#x442;&#x440;&#x438;&#x430;&#x43B; &#x43B;&#x438;&#x446;&#x435;&#x43D;&#x437;&#x438;&#x438; &#x438; &#x432;&#x432;&#x435;&#x441;&#x442;&#x438; &#x43A;&#x43B;&#x44E;&#x447; &#x434;&#x43E; &#x435;&#x433;&#x43E; &#x438;&#x441;&#x442;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x44F;</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D; &#x43A;&#x440;&#x430;&#x448; &#x43D;&#x430; Linux &#x43F;&#x440;&#x438; &#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x430; &#x432; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440;&#x430;&#x445;</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x43E; &#x437;&#x430;&#x431;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x432;&#x44B;&#x431;&#x440;&#x430;&#x43D;&#x43D;&#x43E;&#x439; &#x442;&#x435;&#x43C;&#x44B; &#x43F;&#x440;&#x438; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x442;&#x438;&#x438; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D; &#x43A;&#x440;&#x430;&#x448; &#x43F;&#x440;&#x438; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x43D;&#x438;&#x438; &#x43D;&#x435;&#x432;&#x430;&#x43B;&#x438;&#x434;&#x43D;&#x43E;&#x433;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; &#x432; UUID v7</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x43E; &#x437;&#x430;&#x432;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x435; &#x432; WebP &#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x435;&#x440;&#x435; &#x43F;&#x440;&#x438; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x451;&#x43D;&#x43D;&#x43E;&#x439; &#x43A;&#x43E;&#x43C;&#x431;&#x438;&#x43D;&#x430;&#x446;&#x438;&#x438; &#x43F;&#x435;&#x440;&#x435;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x439; &#x43C;&#x435;&#x436;&#x434;&#x443; PNG &#x438; JPG &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x430;&#x43C;&#x438;</li></ul><p>&#x412;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x43A;&#x430;&#x43A; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x431;&#x438;&#x43D;&#x430;&#x440;&#x43D;&#x438;&#x43A; &#x441;&#xA0;<a href="https://web-artisan.pro/download?ref=slavniy.com" rel="noopener noreferrer">&#x441;&#x430;&#x439;&#x442;&#x430;</a>&#xA0;(&#x43E;&#x441;&#x43E;&#x431;&#x435;&#x43D;&#x43D;&#x43E; &#x435;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x435;&#x449;&#x451; &#x43D;&#x435; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x43B;&#x438; Web Artisan Pro &#x441;&#x435;&#x431;&#x435;, &#x442;&#x43E;&#x433;&#x434;&#x430; welcome &#x432;&#xA0;<a href="https://youtu.be/SSTxeY_DEnY?ref=slavniy.com" rel="noopener noreferrer">&#x440;&#x43E;&#x43B;&#x438;&#x43A;</a>), &#x442;&#x430;&#x43A; &#x438; &#x432; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x438; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x438;&#x43A;&#x43E;&#x43D;&#x43A;&#x443; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43A; &#x432; &#x43B;&#x435;&#x432;&#x43E;&#x43C; &#x43D;&#x438;&#x436;&#x43D;&#x435;&#x43C; &#x443;&#x433;&#x43B;&#x443; &#x438; &#x43A;&#x43B;&#x438;&#x43A;&#x43D;&#x443;&#x442;&#x44C; &quot;Check for Updates...&quot;.</p>]]></content:encoded></item><item><title><![CDATA[Обновление Web Artisan Pro 1.0.2]]></title><description><![CDATA[<p>&#x411;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x432;&#x430;&#x448;&#x435;&#x43C;&#x443; &#x444;&#x438;&#x434;&#x431;&#x435;&#x43A;&#x443; &#x443;&#x434;&#x430;&#x43B;&#x43E;&#x441;&#x44C; &#x441;&#x444;&#x43E;&#x440;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x43D;&#x443;&#x448;&#x438;&#x442;&#x435;&#x43B;&#x44C;</p>]]></description><link>https://slavniy.com/obnovlieniie-web-artisan-pro-1-0-2/</link><guid isPermaLink="false">67b392b49f1e5a05a0698582</guid><category><![CDATA[💻 Web Artisan Pro]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Tue, 11 Feb 2025 00:00:00 GMT</pubDate><media:content url="https://slavniy.com/content/images/2025/02/photo_2025-02-17-23.55.00.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://slavniy.com/content/images/2025/02/photo_2025-02-17-23.55.00.jpeg" alt="&#x41E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; Web Artisan Pro 1.0.2"><p>&#x411;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x432;&#x430;&#x448;&#x435;&#x43C;&#x443; &#x444;&#x438;&#x434;&#x431;&#x435;&#x43A;&#x443; &#x443;&#x434;&#x430;&#x43B;&#x43E;&#x441;&#x44C; &#x441;&#x444;&#x43E;&#x440;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x43D;&#x443;&#x448;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x439;:</p><ul><li>&#x1F525; &#x414;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x430; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x432;&#x44B;&#x431;&#x438;&#x440;&#x430;&#x442;&#x44C; <strong>&#x442;&#x435;&#x43C;&#x443;</strong> &#x432; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x43A;&#x430;&#x445; (&#x441;&#x432;&#x435;&#x442;&#x43B;&#x430;&#x44F;, &#x442;&#x451;&#x43C;&#x43D;&#x430;&#x44F; &#x438;&#x43B;&#x438; &#x43A;&#x430;&#x43A; &#x432; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;&#x435;)</li><li>&#x1F525; &#x422;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x432; <strong>Single Instance</strong> &#x440;&#x435;&#x436;&#x438;&#x43C;&#x435;, &#x438; &#x438;&#x43A;&#x43E;&#x43D;&#x43A;&#x438; &#x432; &#x442;&#x440;&#x435;&#x435; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x443;&#x442; &#x43F;&#x43B;&#x43E;&#x434;&#x438;&#x442;&#x44C;&#x441;&#x44F; (Windows &#x438; Linux)</li><li>&#x1F525; &#x423;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x44B; &#x432; &#x442;&#x440;&#x435;&#x435; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x442;&#x43E;&#x436;&#x435; &#x441;&#x433;&#x440;&#x443;&#x43F;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x44B; &#x43F;&#x43E; &#x43A;&#x430;&#x442;&#x435;&#x433;&#x43E;&#x440;&#x438;&#x44F;&#x43C;&#x438; &#x432;&#x43C;&#x435;&#x441;&#x442;&#x43E; &#x441;&#x43F;&#x43B;&#x43E;&#x448;&#x43D;&#x43E;&#x433;&#x43E; &#x441;&#x43F;&#x438;&#x441;&#x43A;&#x430;</li><li>&#x420;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442; Text Generator &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x440;&#x435;&#x434;&#x430;&#x43A;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#xA0;</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x43E; &#x43A;&#x43E;&#x43D;&#x442;&#x435;&#x43A;&#x441;&#x442;&#x43D;&#x43E;&#x435; &#x43C;&#x435;&#x43D;&#x44E; &#x443; &#x432;&#x43A;&#x43B;&#x430;&#x434;&#x43E;&#x43A; &#x43D;&#x430; Windows, &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43C;&#x430;&#x441;&#x441;&#x43E;&#x432;&#x43E; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x438; &#x434;&#x430;&#x436;&#x435; &#x43E;&#x442;&#x43A;&#x440;&#x435;&#x43F;&#x43B;&#x44F;&#x442;&#x44C; &#x432;&#x43A;&#x43B;&#x430;&#x434;&#x43A;&#x438;</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x43E; &#x430;&#x432;&#x442;&#x43E;&#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x440;&#x435;&#x437;&#x443;&#x43B;&#x44C;&#x442;&#x430;&#x442;&#x430; &#x43F;&#x440;&#x438; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x438; SHA &#x430;&#x43B;&#x433;&#x43E;&#x440;&#x438;&#x442;&#x43C;&#x430;</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D; &#x432;&#x44B;&#x43B;&#x435;&#x442; &#x43F;&#x440;&#x438; &#x43F;&#x430;&#x440;&#x441;&#x438;&#x43D;&#x433;&#x435; &#x43F;&#x443;&#x441;&#x442;&#x43E;&#x433;&#x43E; Cron</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x44B; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x44B; CLI &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;</li><li>&#x418;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x430; &#x432;&#x44B;&#x441;&#x43E;&#x442;&#x430; About &#x43E;&#x43A;&#x43D;&#x430; &#x43D;&#x430; Windows</li><li>&#x41B;&#x438;&#x43C;&#x438;&#x442; String Generator &#x443;&#x432;&#x435;&#x43B;&#x438;&#x447;&#x435;&#x43D; &#x434;&#x43E; 10 &#x442;&#x44B;&#x441;&#x44F;&#x447; &#x441;&#x438;&#x43C;&#x432;&#x43E;&#x43B;&#x43E;&#x432;, &#x432; CLI &#x43E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x438;&#x439; &#x43D;&#x435;&#x442;.</li></ul><p>&#x412;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x43A;&#x430;&#x43A; &#x441;&#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; &#x431;&#x438;&#x43D;&#x430;&#x440;&#x43D;&#x438;&#x43A; &#x441; <a href="https://web-artisan.pro/download?ref=slavniy.com">&#x441;&#x430;&#x439;&#x442;&#x430;</a> (&#x43E;&#x441;&#x43E;&#x431;&#x435;&#x43D;&#x43D;&#x43E; &#x435;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x435;&#x449;&#x451; &#x43D;&#x435; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x43B;&#x438; Web Artisan Pro &#x441;&#x435;&#x431;&#x435;, &#x442;&#x43E;&#x433;&#x434;&#x430; welcome &#x432; <a href="https://youtu.be/SSTxeY_DEnY?ref=slavniy.com">&#x440;&#x43E;&#x43B;&#x438;&#x43A;</a>), &#x442;&#x430;&#x43A; &#x438; &#x432; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x438; &#x43D;&#x430;&#x436;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x438;&#x43A;&#x43E;&#x43D;&#x43A;&#x443; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43A; &#x432; &#x43B;&#x435;&#x432;&#x43E;&#x43C; &#x43D;&#x438;&#x436;&#x43D;&#x435;&#x43C; &#x443;&#x433;&#x43B;&#x443; &#x438; &#x43A;&#x43B;&#x438;&#x43A;&#x43D;&#x443;&#x442;&#x44C; &quot;Check for Updates...&quot;&#xA0;</p><div class="kg-card kg-toggle-card" data-kg-toggle-state="close">
            <div class="kg-toggle-heading">
                <h4 class="kg-toggle-heading-text"><span style="white-space: pre-wrap;">&#x41A;&#x441;&#x442;&#x430;&#x442;&#x438;, &#x432;&#x430;&#x43C; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E;! </span></h4>
                <button class="kg-toggle-card-icon" aria-label="Expand toggle to read content">
                    <svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                        <path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/>
                    </svg>
                </button>
            </div>
            <div class="kg-toggle-content"><p dir="ltr"><span style="white-space: pre-wrap;">&#x41F;&#x440;&#x438; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x438; &#x438;&#x437; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x44B; &#x432;&#x44B; &#x43D;&#x435; &#x431;&#x443;&#x434;&#x435;&#x442;&#x435; &#x43A;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x432;&#x435;&#x441;&#x44C; &#x438;&#x43D;&#x441;&#x442;&#x430;&#x43B;&#x43B;&#x435;&#x440; &#x432; 30 &#x41C;&#x411;. &#x412;&#x430;&#x43C; &#x43F;&#x43E;&#x43D;&#x430;&#x434;&#x43E;&#x431;&#x438;&#x442;&#x441;&#x44F; &#x437;&#x430;&#x433;&#x440;&#x443;&#x437;&#x438;&#x442;&#x44C; &#x43B;&#x438;&#x448;&#x44C; &#x434;&#x435;&#x43B;&#x44C;&#x442;&#x443;, &#x440;&#x430;&#x437;&#x43C;&#x435;&#x440; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x43D;&#x43E; &#x432;&#x434;&#x432;&#x43E;&#x435; &#x43C;&#x435;&#x43D;&#x44C;&#x448;&#x435;. &#x417;&#x430;&#x442;&#x435;&#x43C; &#x43C;&#x435;&#x445;&#x430;&#x43D;&#x438;&#x437;&#x43C; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x432;&#x43D;&#x443;&#x442;&#x440;&#x438; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x438;&#x442; &#x43F;&#x430;&#x442;&#x447; &#x43A; &#x444;&#x430;&#x439;&#x43B;&#x430;&#x43C;.</span></p></div>
        </div><div class="kg-card kg-toggle-card" data-kg-toggle-state="close">
            <div class="kg-toggle-heading">
                <h4 class="kg-toggle-heading-text"><span style="white-space: pre-wrap;">&#x418; &#x43A;&#x430;&#x43A; &#x44D;&#x442;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x43D;&#x43E;?</span></h4>
                <button class="kg-toggle-card-icon" aria-label="Expand toggle to read content">
                    <svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                        <path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/>
                    </svg>
                </button>
            </div>
            <div class="kg-toggle-content"><p dir="ltr"><span style="white-space: pre-wrap;">&#x415;&#x441;&#x442;&#x44C; &#x441;&#x43E;&#x432;&#x435;&#x440;&#x448;&#x435;&#x43D;&#x43D;&#x43E; &#x43F;&#x43E;&#x442;&#x440;&#x44F;&#x441;&#x430;&#x44E;&#x449;&#x438;&#x439; &#x444;&#x440;&#x435;&#x439;&#x43C;&#x432;&#x43E;&#x440;&#x43A; </span><b><strong style="white-space: pre-wrap;">Velopack (&#x43E;&#x43F;&#x435;&#x43D;&#x441;&#x43E;&#x440;&#x441;)</strong></b><span style="white-space: pre-wrap;">, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C;&#x443; &#x432;&#x44B;, &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;, &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x441;&#x43C;&#x435;&#x43B;&#x43E; &#x434;&#x435;&#x43B;&#x435;&#x433;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x441;&#x44E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x443; &#x441; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F;&#x43C;&#x438; &#x438; </span><b><strong style="white-space: pre-wrap;">&#x441;&#x431;&#x43E;&#x440;&#x43A;&#x43E;&#x439;</strong></b><span style="white-space: pre-wrap;">. &#x423; Velopack &#x435;&#x441;&#x442;&#x44C; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x430; C#, Rust, JS &#x438; C++, &#x430; &#x432; &#x43F;&#x43B;&#x430;&#x43D;&#x430;&#x445; &#x435;&#x441;&#x442;&#x44C; &#x434;&#x430;&#x436;&#x435; &#x433;&#x43E;&#x448;&#x43A;&#x430;!</span></p><p dir="ltr"><span style="white-space: pre-wrap;">&#x421; &#x442;&#x435;&#x445;&#x43D;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x43E;&#x439; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x44B; &#x438;&#x43D;&#x442;&#x435;&#x433;&#x440;&#x430;&#x446;&#x438;&#x44F; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x432; &#x434;&#x432;&#x443;&#x445; &#x43C;&#x435;&#x441;&#x442;&#x430;&#x445;: &#x432;&#x43E;-&#x43F;&#x435;&#x440;&#x432;&#x44B;&#x445; &#x432;&#x44B; &#x43F;&#x43E;&#x434;&#x433;&#x43E;&#x442;&#x430;&#x432;&#x43B;&#x438;&#x432;&#x430;&#x435;&#x442;&#x435; &#x442;&#x43E;&#x447;&#x43A;&#x443; &#x432;&#x445;&#x43E;&#x434;&#x430; &#x432;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x442;&#x430;&#x43A;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43E;&#x43D;&#x430; &#x43F;&#x43E;&#x43D;&#x438;&#x43C;&#x430;&#x43B;&#x430; &#x432;&#x43D;&#x435;&#x448;&#x43D;&#x438;&#x435; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x44B; &#x432;&#x435;&#x43B;&#x43E;&#x43F;&#x430;&#x43A;&#x430; (&#x432;&#x441;&#x44F;&#x43A;&#x438;&#x435; &#x445;&#x443;&#x43A;&#x438; &#x438; &#x43E;&#x441;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x435;), &#x430; &#x432;&#x43E;-&#x432;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x441;&#x43E;&#x431;&#x438;&#x440;&#x430;&#x435;&#x442;&#x435; &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x44B;&#x439; &#x43F;&#x430;&#x43A;&#x435;&#x442; &#x447;&#x435;&#x440;&#x435;&#x437; &#x43E;&#x441;&#x43E;&#x431;&#x44B;&#x435; CLI &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x44B; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x444;&#x440;&#x435;&#x439;&#x43C;&#x432;&#x43E;&#x440;&#x43A;&#x430;.&#xA0;</span></p><p dir="ltr"><span style="white-space: pre-wrap;">&#x41F;&#x440;&#x435;&#x43B;&#x435;&#x441;&#x442;&#x44C; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; Velopack &#x438;&#x43D;&#x43A;&#x430;&#x43F;&#x441;&#x443;&#x43B;&#x438;&#x440;&#x443;&#x435;&#x442; &#x432; &#x441;&#x435;&#x431;&#x435; &#x432;&#x441;&#x44E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x443; &#x43F;&#x43E; </span><b><strong style="white-space: pre-wrap;">&#x43F;&#x43E;&#x434;&#x43F;&#x438;&#x441;&#x438;</strong></b><span style="white-space: pre-wrap;"> &#x43F;&#x430;&#x43A;&#x435;&#x442;&#x430; &#x438; </span><b><strong style="white-space: pre-wrap;">&#x43D;&#x43E;&#x442;&#x430;&#x440;&#x438;&#x437;&#x430;&#x446;&#x438;&#x438;</strong></b><span style="white-space: pre-wrap;">. &#x41D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, Mac &#x432;&#x435;&#x440;&#x441;&#x438;&#x44E; &#x44F; &#x43F;&#x43E;&#x434;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x44E; &#x441;&#x432;&#x43E;&#x438;&#x43C; &#x441;&#x435;&#x440;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x442;&#x43E;&#x43C; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x430; (&#x434;&#x430;, &#x432; &#x438;&#x43D;&#x441;&#x442;&#x430;&#x43B;&#x43B;&#x435;&#x440;&#x435; &#x432;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x443;&#x432;&#x438;&#x434;&#x435;&#x442;&#x44C; &#x43C;&#x43E;&#x451; &#x438;&#x43C;&#x44F;), &#x43F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x43E;&#x43D;&#x430; &#x43D;&#x435; &#x440;&#x443;&#x433;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x430; &quot;&#x43D;&#x435;&#x438;&#x437;&#x432;&#x435;&#x441;&#x442;&#x43D;&#x44B;&#x439; &#x438;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;&quot;. &#x41A; &#x441;&#x43E;&#x436;&#x430;&#x43B;&#x435;&#x43D;&#x438;&#x44E;, &#x443; Windows &#x441; &#x44D;&#x442;&#x438;&#x43C; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x435;&#x435;, &#x43D;&#x43E; &#x432; &#x441;&#x43A;&#x43E;&#x440;&#x43E;&#x43C; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; &#x438; &#x43D;&#x430; Windows &#x432;&#x44B; &#x443;&#x432;&#x438;&#x434;&#x438;&#x442;&#x435;, &#x447;&#x442;&#x43E; Defender &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x43D;&#x435; &#x440;&#x443;&#x433;&#x430;&#x435;&#x442;&#x441;&#x44F;. &#x410; &#x432;&#x441;&#x451; &#x431;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x441;&#x435;&#x440;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x442;&#x430;&#x43C; &#x438; &#x443;&#x434;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x443; Velopack, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x441;&#x43C;&#x43E;&#x436;&#x435;&#x442; &#x44D;&#x442;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x441;&#x432;&#x44F;&#x437;&#x430;&#x442;&#x44C; (</span><s><span class="line-through" style="white-space: pre-wrap;">&#x430;, &#x43D;&#x443; &#x438; &#x434;&#x430;, &#x435;&#x449;&#x451; &#x441; &#x43C;&#x435;&#x43D;&#x44F; &#x434;&#x435;&#x43D;&#x44C;&#x433;&#x438; &#x437;&#x430; &#x441;&#x435;&#x440;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x442;, &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x44B;, &#x447;&#x442;&#x43E; &#x44F; &#x43D;&#x435; &#x43B;&#x43E;&#x445;, &#x43D;&#x43E;&#x440;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;, &#x43F;&#x43E;&#x447;&#x43A;&#x430;, &#x43F;&#x435;&#x447;&#x435;&#x43D;&#x44C;, &#x433;&#x43B;&#x430;&#x437;...</span></s><span style="white-space: pre-wrap;">).</span></p></div>
        </div>]]></content:encoded></item><item><title><![CDATA[Я создал полезную утилиту для разработчиков и раздаю её бесплатно]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/SSTxeY_DEnY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="&#x42F; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43B; &#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x443;&#x44E; &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x443; &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x43E;&#x432; &#x438; &#x440;&#x430;&#x437;&#x434;&#x430;&#x44E; &#x435;&#x451; &#x431;&#x435;&#x441;&#x43F;&#x43B;&#x430;&#x442;&#x43D;&#x43E; | &#x410;&#x41D;&#x41E;&#x41D;&#x421; Web Artisan Pro"></iframe></figure><p>&#x41C;&#x44B; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x438; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x44F;, &#x438; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x434;&#x435;&#x43B;&#x430;&#x442;</p>]]></description><link>https://slavniy.com/ia-sozdal-polieznuiu-utilitu-dlia-razrabotchikov-i-razdaiu-ieio-biesplatno/</link><guid isPermaLink="false">67b390489f1e5a05a0698562</guid><category><![CDATA[💻 Web Artisan Pro]]></category><category><![CDATA[🎬 Видео]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Sun, 09 Feb 2025 00:00:00 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/SSTxeY_DEnY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="&#x42F; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43B; &#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x443;&#x44E; &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x443; &#x434;&#x43B;&#x44F; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x43E;&#x432; &#x438; &#x440;&#x430;&#x437;&#x434;&#x430;&#x44E; &#x435;&#x451; &#x431;&#x435;&#x441;&#x43F;&#x43B;&#x430;&#x442;&#x43D;&#x43E; | &#x410;&#x41D;&#x41E;&#x41D;&#x421; Web Artisan Pro"></iframe></figure><p>&#x41C;&#x44B; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;&#x438; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x44F;, &#x438; &#x43C;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x43D;&#x44B;&#x435; &#x432;&#x435;&#x449;&#x438;. &#x41D;&#x43E; &#x432; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x439; &#x43F;&#x440;&#x43E;&#x444;&#x435;&#x441;&#x441;&#x438;&#x438; &#x435;&#x441;&#x442;&#x44C; &#x438; &#x440;&#x443;&#x442;&#x438;&#x43D;&#x430;, &#x43D;&#x430; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x443;&#x44E; &#x43C;&#x44B; &#x440;&#x435;&#x433;&#x443;&#x43B;&#x44F;&#x440;&#x43D;&#x43E; &#x442;&#x440;&#x430;&#x442;&#x438;&#x43C; &#x432;&#x440;&#x435;&#x43C;&#x44F;. &#x41D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x43F;&#x435;&#x440;&#x435;&#x432;&#x435;&#x441;&#x442;&#x438; &#x441;&#x442;&#x440;&#x43E;&#x43A;&#x443; &#x432; HEX/Base64/SHA/MD5, &#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; WebP &#x438;&#x437;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x435;&#x43D;&#x438;&#x435;, &#x441;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; UUID, &#x432; &#x43A;&#x43E;&#x43D;&#x446;&#x435; &#x43A;&#x43E;&#x43D;&#x446;&#x43E;&#x432; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x438;&#x442;&#x44C; Cron. <br><br>&#x41C;&#x435;&#x43D;&#x44F; &#x43D;&#x435; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x438;&#x43B;&#x438; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F;, &#x438; &#x44F; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43B; Web Artisan Pro &#x2013; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x441;&#x43E;&#x432;&#x43C;&#x435;&#x449;&#x430;&#x435;&#x442; &#x432; &#x43E;&#x434;&#x43D;&#x43E;&#x43C; &#x43C;&#x435;&#x441;&#x442;&#x435; &#x432;&#x435;&#x441;&#x44C; &#x432;&#x43E;&#x440;&#x43E;&#x445; &#x43D;&#x435;&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x438;&#x445; &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;: &#x43E;&#x442; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x449;&#x438;&#x43A;&#x43E;&#x432; &#x434;&#x43E; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440;&#x43E;&#x432; &#x441; &#x43A;&#x443;&#x447;&#x435;&#x439; &#x43E;&#x43F;&#x446;&#x438;&#x439; &#x434;&#x43B;&#x44F; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x43A;&#x438;, &#x441; &#x43A;&#x440;&#x43E;&#x441;&#x441;&#x43F;&#x43B;&#x430;&#x442;&#x444;&#x43E;&#x440;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x441;&#x442;&#x44C;&#x44E; &#x438; &#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F;&#x43E;&#x43C; &#x438;&#x437; &#x43A;&#x43E;&#x43D;&#x441;&#x43E;&#x43B;&#x438;.<br><br>&#x42F; &#x440;&#x435;&#x433;&#x443;&#x43B;&#x44F;&#x440;&#x43D;&#x43E; &#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44E;&#x441;&#x44C; Web Artisan Pro &#x441;&#x430;&#x43C; (&#x432; &#x43F;&#x435;&#x440;&#x432;&#x443;&#x44E; &#x43E;&#x447;&#x435;&#x440;&#x435;&#x434;&#x44C; &#x438; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x432;&#x430;&#x43B; &#x434;&#x43B;&#x44F; &#x441;&#x435;&#x431;&#x44F;), &#x438; &#x43B;&#x438;&#x447;&#x43D;&#x43E; &#x441;&#x43B;&#x435;&#x436;&#x443; &#x437;&#x430; &#x442;&#x435;&#x43C;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x432;&#x441;&#x451; &#x431;&#x44B;&#x43B;&#x43E; &#x443;&#x434;&#x43E;&#x431;&#x43D;&#x43E;. &#x41F;&#x43E;&#x43F;&#x440;&#x43E;&#x431;&#x443;&#x439;&#x442;&#x435; &#x438; &#x432;&#x44B;!<br><br>&#x41F;&#x435;&#x440;&#x435;&#x445;&#x43E;&#x434;&#x438;&#x442;&#x435; &#x432; &#x442;&#x435;&#x43B;&#x435;&#x433;&#x440;&#x430;&#x43C; &#x431;&#x43E;&#x442;&#x430; Web Artisan Pro https://t.me/WebArtisanProBot &#x438; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x430;&#x439;&#x442;&#x435; &#x43F;&#x43E;&#x436;&#x438;&#x437;&#x43D;&#x435;&#x43D;&#x43D;&#x443;&#x44E; &#x43B;&#x438;&#x446;&#x435;&#x43D;&#x437;&#x438;&#x44E;. &#x410; &#x432;&#x437;&#x430;&#x43C;&#x435;&#x43D; &#x44F; &#x431;&#x443;&#x434;&#x443; &#x441;&#x447;&#x430;&#x441;&#x442;&#x43B;&#x438;&#x432; &#x443;&#x441;&#x43B;&#x44B;&#x448;&#x430;&#x442;&#x44C; &#x432;&#x430;&#x448; &#x43E;&#x442;&#x437;&#x44B;&#x432;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442; &#x43B;&#x443;&#x447;&#x448;&#x435;! <br></p><p>&#x1F539; <a href="https://t.me/WebArtisanProBot?ref=slavniy.com">&#x41F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x431;&#x435;&#x441;&#x43F;&#x43B;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x447;&#x435;&#x440;&#x435;&#x437; &#x431;&#x43E;&#x442;&#x430;</a><br>&#x1F539; <a href="https://web-artisan.pro/?ref=slavniy.com">&#x41E;&#x444;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x441;&#x430;&#x439;&#x442; Web Artisan Pro</a></p><p><strong>&#x41D;&#x430; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x439; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442; &#x443;&#x436;&#x435; &#x432;&#x44B;&#x448;&#x43B;&#x43E; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x439;! &#x427;&#x438;&#x442;&#x430;&#x439;&#x442;&#x435; </strong><a href="https://web-artisan.pro/release-notes?ref=slavniy.com"><strong>&#x441;&#x43F;&#x438;&#x441;&#x43E;&#x43A; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x439;</strong></a><strong>!</strong></p>]]></content:encoded></item><item><title><![CDATA[Почему тип в Go не реализует интерфейс, хотя все методы вроде бы на месте?]]></title><description><![CDATA[<p>&#x420;&#x430;&#x437;&#x431;&#x435;&#x440;&#x451;&#x43C; &#x43E;&#x434;&#x438;&#x43D; &#x438;&#x437; &#x441;&#x430;&#x43C;&#x44B;&#x445; &#x447;&#x430;&#x441;&#x442;&#x44B;&#x445; &#x438;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;&#x43E;&#x432; &#x43E;&#x448;&#x438;&#x431;&#x43E;&#x43A; &#x43F;&#x440;&#x438; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x435;</p>]]></description><link>https://slavniy.com/pochiemu-tip-v-go-nie-riealizuiet-intierfieis-khotia-vsie-mietody-vrodie-by-na-miestie/</link><guid isPermaLink="false">67b396989f1e5a05a06985b7</guid><category><![CDATA[📝 Статьи]]></category><category><![CDATA[🦦 GoLang]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Mon, 30 Dec 2024 00:00:00 GMT</pubDate><content:encoded><![CDATA[<p>&#x420;&#x430;&#x437;&#x431;&#x435;&#x440;&#x451;&#x43C; &#x43E;&#x434;&#x438;&#x43D; &#x438;&#x437; &#x441;&#x430;&#x43C;&#x44B;&#x445; &#x447;&#x430;&#x441;&#x442;&#x44B;&#x445; &#x438;&#x441;&#x442;&#x43E;&#x447;&#x43D;&#x438;&#x43A;&#x43E;&#x432; &#x43E;&#x448;&#x438;&#x431;&#x43E;&#x43A; &#x43F;&#x440;&#x438; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x435; &#x441; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x430;&#x43C;&#x438; &#x432; Go:</p><pre><code class="language-Go">type Storage interface {
&#xA0; &#xA0; Save(data []byte) error
}

type FileStorage struct {
&#xA0; &#xA0; path string
}

func (fs *FileStorage) Save(data []byte) error {
&#xA0; &#xA0; return os.WriteFile(fs.path, data, 0644)
}

func main() {
&#xA0; &#xA0; // &#x420;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;
&#xA0; &#xA0; var s1 Storage = &amp;FileStorage{path: &quot;data.txt&quot;}
&#xA0;&#xA0; &#xA0;
&#xA0; &#xA0; // &#x41D;&#x435; &#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x438;&#x440;&#x443;&#x435;&#x442;&#x441;&#x44F;
&#xA0; &#xA0; // &quot;Cannot use FileStorage{path: &quot;data. txt&quot;} (type FileStorage) as the type Storage&quot;
&#xA0; &#xA0; // &quot;Type does not implement Storage as the Save method has a pointer receiver&quot;
&#xA0; &#xA0; var s2 Storage = FileStorage{path: &quot;data.txt&quot;}
}</code></pre><p>&#x41F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x442;&#x430;&#x43A;? &#x412;&#x435;&#x434;&#x44C; &#x43C;&#x435;&#x442;&#x43E;&#x434; Save &#x443; &#x43D;&#x430;&#x441; &#x435;&#x441;&#x442;&#x44C;. &#x412; &#x447;&#x451;&#x43C; &#x43F;&#x43E;&#x434;&#x432;&#x43E;&#x445;?</p><h2 id="%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80">&#x420;&#x430;&#x437;&#x431;&#x43E;&#x440;</h2><p>&#x414;&#x435;&#x43B;&#x43E; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x43C;&#x435;&#x442;&#x43E;&#x434; Save &#x43E;&#x431;&#x44A;&#x44F;&#x432;&#x43B;&#x435;&#x43D; &#x43D;&#x430; <strong>&#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x435;</strong> (<code>*FileStorage</code>), &#x430; &#x43D;&#x435; &#x43D;&#x430; <strong>&#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x438;</strong>. <em>&#x418; &#x442;&#x443;&#x442; &#x43D;&#x430;&#x447;&#x438;&#x43D;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x441;&#x430;&#x43C;&#x43E;&#x435; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x435;&#x441;&#x43D;&#x43E;&#x435;.</em></p><p>&#x41A;&#x43E;&#x433;&#x434;&#x430; &#x432;&#x44B; &#x43E;&#x431;&#x44A;&#x44F;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x435; &#x43C;&#x435;&#x442;&#x43E;&#x434; &#x43D;&#x430; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x435;, Go &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x432;&#x430;&#x43C; &#x432;&#x44B;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x435;&#x433;&#x43E; &#x438; &#x434;&#x43B;&#x44F; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44F;, &#x438; &#x434;&#x43B;&#x44F; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F;:</p><pre><code class="language-Go">storage := FileStorage{path: &quot;data.txt&quot;}
storage.Save([]byte(&quot;hello&quot;))&#xA0; // &#x420;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;

ptr := &amp;storage
ptr.Save([]byte(&quot;world&quot;))&#xA0; &#xA0; &#xA0; // &#x422;&#x43E;&#x436;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;</code></pre><p>&#x412; &#x43F;&#x435;&#x440;&#x432;&#x43E;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; Go <strong>&#x43D;&#x435;&#x44F;&#x432;&#x43D;&#x43E; &#x431;&#x435;&#x440;&#x435;&#x442; &#x430;&#x434;&#x440;&#x435;&#x441;</strong> &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F; storage, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x432;&#x44B;&#x437;&#x432;&#x430;&#x442;&#x44C; &#x43C;&#x435;&#x442;&#x43E;&#x434;. &#x41D;&#x43E; &#x441; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x430;&#x43C;&#x438; &#x442;&#x430;&#x43A;&#x43E;&#x435; &#x43F;&#x43E;&#x432;&#x435;&#x434;&#x435;&#x43D;&#x438;&#x435; &#x43D;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;. &#x415;&#x441;&#x43B;&#x438; &#x43C;&#x435;&#x442;&#x43E;&#x434; &#x43E;&#x431;&#x44A;&#x44F;&#x432;&#x43B;&#x435;&#x43D; &#x43D;&#x430; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x435;, &#x442;&#x43E; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x440;&#x435;&#x430;&#x43B;&#x438;&#x437;&#x43E;&#x432;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;.&#xA0;</p><p>&#x42D;&#x442;&#x43E; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x43D;&#x43E; &#x43D;&#x430;&#x43C;&#x435;&#x440;&#x435;&#x43D;&#x43D;&#x43E;. &#x41F;&#x440;&#x435;&#x434;&#x441;&#x442;&#x430;&#x432;&#x44C;&#x442;&#x435;, &#x447;&#x442;&#x43E; &#x443; &#x432;&#x430;&#x441; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435;:</p><pre><code class="language-Go">func getStorage() FileStorage {
&#xA0; &#xA0; return FileStorage{path: &quot;temp.txt&quot;}
}

var storage Storage = getStorage() // &#x41D;&#x435; &#x441;&#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x438;&#x440;&#x443;&#x435;&#x442;&#x441;&#x44F;</code></pre><p>&#x415;&#x441;&#x43B;&#x438; &#x431;&#x44B; Go &#x430;&#x432;&#x442;&#x43E;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x431;&#x440;&#x430;&#x43B; &#x430;&#x434;&#x440;&#x435;&#x441; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x438; &#x43F;&#x440;&#x438;&#x441;&#x432;&#x430;&#x438;&#x432;&#x430;&#x43D;&#x438;&#x438; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x443;, &#x442;&#x43E; &#x432;&#x44B; &#x431;&#x44B; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x43B;&#x438; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C; &#x43D;&#x430; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x43E;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x435;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x435; &#x438;&#x441;&#x447;&#x435;&#x437;&#x43D;&#x435;&#x442; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x432;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x442;&#x430; &#x438;&#x437; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438;.</p><p>&#x410; &#x432;&#x43E;&#x442; &#x43E;&#x431;&#x440;&#x430;&#x442;&#x43D;&#x430;&#x44F; &#x441;&#x438;&#x442;&#x443;&#x430;&#x446;&#x438;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x431;&#x435;&#x437; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;:</p><pre><code class="language-Go">type Reader interface {
&#xA0; &#xA0; Read() string
}

type MemoryReader struct {
&#xA0; &#xA0; data string
}

// &#x41C;&#x435;&#x442;&#x43E;&#x434; &#x43D;&#x430; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x438;
func (mr MemoryReader) Read() string {
&#xA0; &#xA0; return mr.data
}

func main() {
&#xA0; &#xA0; // &#x41E;&#x431;&#x430; &#x432;&#x430;&#x440;&#x438;&#x430;&#x43D;&#x442;&#x430; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x44E;&#x442;
&#xA0; &#xA0; var r1 Reader = MemoryReader{data: &quot;hello&quot;}
&#xA0; &#xA0; var r2 Reader = &amp;MemoryReader{data: &quot;world&quot;}
}</code></pre><p>&#x41A;&#x43E;&#x433;&#x434;&#x430; &#x43C;&#x435;&#x442;&#x43E;&#x434; &#x43E;&#x431;&#x44A;&#x44F;&#x432;&#x43B;&#x435;&#x43D; &#x43D;&#x430; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x438;, &#x435;&#x433;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x432;&#x44B;&#x437;&#x432;&#x430;&#x442;&#x44C; &#x438; &#x434;&#x43B;&#x44F; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44F; &#x2013; Go &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x440;&#x430;&#x437;&#x44B;&#x43C;&#x435;&#x43D;&#x443;&#x435;&#x442; &#x443;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C; &#x430;&#x432;&#x442;&#x43E;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;.</p><h3 id="%D1%82%D0%B0%D0%BA-%D0%BA%D0%B0%D0%BA%D0%BE%D0%B9-%D0%B6%D0%B5-receiver-%D0%B2%D1%8B%D0%B1%D1%80%D0%B0%D1%82%D1%8C">&#x422;&#x430;&#x43A; &#x43A;&#x430;&#x43A;&#x43E;&#x439; &#x436;&#x435; receiver &#x432;&#x44B;&#x431;&#x440;&#x430;&#x442;&#x44C;?</h3><p>&#x418;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x439;&#x442;&#x435; <strong>pointer receiver</strong>, &#x435;&#x441;&#x43B;&#x438;:</p><ul><li>&#x41C;&#x435;&#x442;&#x43E;&#x434; &#x434;&#x43E;&#x43B;&#x436;&#x435;&#x43D; &#x438;&#x437;&#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C; &#x441;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x438;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B;</li><li>&#x421;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x430;&#x44F; &#x438; &#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x435;&#x451; &#x43D;&#x430;&#x43A;&#x43B;&#x430;&#x434;&#x43D;&#x43E;</li><li>&#x423; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x43E;&#x432; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x442;&#x438;&#x43F;&#x430; &#x443;&#x436;&#x435; &#x435;&#x441;&#x442;&#x44C; pointer receiver (&#x434;&#x43B;&#x44F; &#x43A;&#x43E;&#x43D;&#x441;&#x438;&#x441;&#x442;&#x435;&#x43D;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x438;!)</li><li>&#x41A;&#x43E;&#x433;&#x434;&#x430; &#x442;&#x438;&#x43F; &#x441;&#x43E;&#x434;&#x435;&#x440;&#x436;&#x438;&#x442; sync.Mutex &#x438;&#x43B;&#x438; &#x434;&#x440;&#x443;&#x433;&#x438;&#x435; &#x43F;&#x43E;&#x43B;&#x44F;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43D;&#x435;&#x43B;&#x44C;&#x437;&#x44F; &#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;</li></ul><p>&#x412; &#x43E;&#x441;&#x442;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x445; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x44F;&#x445; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x439;&#x442;&#x435; <strong>value receiver</strong>.</p>]]></content:encoded></item><item><title><![CDATA[Про качество архитектуры]]></title><description><![CDATA[Изучить, понять, записать – три действия для качественной работы над архитектурой]]></description><link>https://slavniy.com/pro-kachiestvo-arkhitiektury/</link><guid isPermaLink="false">670c51afe203d4da259ee4dd</guid><category><![CDATA[📝 Статьи]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Sat, 12 Oct 2024 22:00:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1532619187608-e5375cab36aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDZ8fGdyYXBofGVufDB8fHx8MTcyODg2MDY5MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1532619187608-e5375cab36aa?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDZ8fGdyYXBofGVufDB8fHx8MTcyODg2MDY5MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="&#x41F;&#x440;&#x43E; &#x43A;&#x430;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440;&#x44B;"><p>&#x41D;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E; &#x440;&#x430;&#x437;&#x43C;&#x44B;&#x448;&#x43B;&#x435;&#x43D;&#x438;&#x44F;, &#x430; &#x445;&#x43E;&#x447;&#x443; &#x43F;&#x43E;&#x43F;&#x440;&#x43E;&#x431;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x434;&#x43E;&#x439;&#x442;&#x438; &#x434;&#x43E; &#x43E;&#x442;&#x432;&#x435;&#x442;&#x430; &#x43D;&#x430; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;: &quot;&#x43A; &#x447;&#x435;&#x43C;&#x443; &#x441;&#x442;&#x440;&#x435;&#x43C;&#x438;&#x442;&#x44C;&#x441;&#x44F;?&quot;.&#xA0;</p><p>&#x421;&#x430;&#x43C;&#x430; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x2013;&#xA0;&#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x438;&#x435; &#x448;&#x438;&#x440;&#x43E;&#x43A;&#x43E;&#x435;, &#x43D;&#x43E; &#x432; &#x43E;&#x431;&#x449;&#x435;&#x43C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x44D;&#x442;&#x43E; &#x43E;&#x431;&#x43B;&#x430;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x43E; <em>&#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F;</em> &#x438; &#x438;&#x445; <em>&#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x441;&#x442;&#x432;&#x438;&#x44F;</em>.&#xA0;</p><p>&#x410;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x43E;&#x440; &#x2013;&#xA0;&#x442;&#x43E;&#x442;, &#x43A;&#x442;&#x43E; &#x44D;&#x442;&#x438; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x438;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x442; &#x43D;&#x430; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x435; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x43D;&#x43E;&#x439; <em>&#x437;&#x430;&#x434;&#x430;&#x447;&#x438;</em>.&#xA0;</p><p>&#x410; &#x432;&#x43E;&#x442; <strong>&#x437;&#x430;&#x434;&#x430;&#x447;&#x430;</strong> &#x443;&#x436;&#x435; &#x442;&#x430;&#x438;&#x442; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x451;&#x43D;&#x43D;&#x44B;&#x435; &#x443;&#x441;&#x43B;&#x43E;&#x432;&#x438;&#x44F; (&#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x43E;&#x432; &#x438;&#x43B;&#x438; &#x441;&#x432;&#x43E;&#x438; &#x436;&#x435;), &#x43E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x438;&#x44F; &#x438; &#x442;&#x440;&#x435;&#x431;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F;. &#x412;&#x441;&#x435;&#x433;&#x434;&#x430; &#x43F;&#x43E;&#x43F;&#x44B;&#x442;&#x43A;&#x430; &#x441;&#x43C;&#x435;&#x448;&#x430;&#x442;&#x44C; &#x432;&#x441;&#x451; &#x44D;&#x442;&#x43E; &#x43F;&#x440;&#x438;&#x432;&#x43E;&#x434;&#x438;&#x442; &#x43A; <em>&#x43F;&#x440;&#x43E;&#x442;&#x438;&#x432;&#x43E;&#x440;&#x435;&#x447;&#x438;&#x44F;&#x43C;</em>: &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x43E;&#x431;&#x440;&#x430;&#x431;&#x430;&#x442;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x43E;&#x439; &#x43E;&#x431;&#x44A;&#x451;&#x43C; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445;, &#x43D;&#x43E; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x438;&#x432;&#x430;&#x442;&#x44C; &#x440;&#x435;&#x430;&#x43B;&#x442;&#x430;&#x439;&#x43C; &#x442;&#x440;&#x430;&#x43D;&#x437;&#x430;&#x43A;&#x446;&#x438;&#x438; &#x441; &#x43D;&#x438;&#x43C;&#x438;; &#x43D;&#x430;&#x434; &#x43F;&#x440;&#x43E;&#x434;&#x443;&#x43A;&#x442;&#x43E;&#x43C; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;, &#x43D;&#x43E; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430; &#x444;&#x438;&#x447;&#x438; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x430; &#x43E;&#x441;&#x442;&#x430;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x431;&#x44B;&#x441;&#x442;&#x440;&#x43E;&#x439; (&#x438; &#x434;&#x435;&#x448;&#x451;&#x432;&#x43E;&#x439;); &#x43A;&#x43E;&#x434; &#x434;&#x43E;&#x43B;&#x436;&#x435;&#x43D; &#x431;&#x44B;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x44B;&#x43C;, &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C;, &#x43F;&#x43E;&#x43D;&#x44F;&#x442;&#x43D;&#x44B;&#x43C;, &#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x43C; &#x438; &#x43C;&#x430;&#x441;&#x448;&#x442;&#x430;&#x431;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x44B;&#x43C;.&#xA0;</p><p>&#x418; &#x432;&#x44B; &#x443;&#x436;&#x435; &#x437;&#x43D;&#x430;&#x435;&#x442;&#x435;, &#x447;&#x442;&#x43E; &#x441;&#x435;&#x440;&#x435;&#x431;&#x440;&#x44F;&#x43D;&#x443;&#x44E; &#x43F;&#x443;&#x43B;&#x44E; &#x43D;&#x435; &#x438;&#x437;&#x43E;&#x431;&#x440;&#x435;&#x43B;&#x438;, &#x43D;&#x43E; &#x438; &#x434;&#x440;&#x430;&#x43C;&#x44B; &#x43D;&#x435;&#x442;:</p><p>1. &#x41C;&#x44B; &#x443;&#x43C;&#x435;&#x435;&#x43C; &#x434;&#x43E;&#x433;&#x43E;&#x432;&#x430;&#x440;&#x438;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43E; &#x442;&#x43E;&#x43C;, &#x43A;&#x430;&#x43A;&#x438;&#x435; &#x432; &#x438;&#x442;&#x43E;&#x433;&#x435; &#x441;&#x432;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x430; &#x43D;&#x430;&#x438;&#x431;&#x43E;&#x43B;&#x435;&#x435; &#x43F;&#x440;&#x438;&#x43E;&#x440;&#x438;&#x442;&#x435;&#x442;&#x43D;&#x44B;&#x435; (&#x438;&#x43B;&#x438; &#x431;&#x435;&#x437; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x43D;&#x435;&#x43B;&#x44C;&#x437;&#x44F;);</p><p>2. &#x423;&#x43C;&#x43D;&#x44B;&#x435; &#x43B;&#x44E;&#x434;&#x438; &#x434;&#x430;&#x432;&#x43D;&#x43E; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x43B;&#x438; &#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x433;&#x43E;&#x442;&#x43E;&#x432;&#x44B;&#x445; &#x43F;&#x440;&#x430;&#x43A;&#x442;&#x438;&#x43A; &#x438; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x443;&#x440;&#x43D;&#x44B;&#x445; &#x43F;&#x430;&#x442;&#x442;&#x435;&#x440;&#x43D;&#x43E;&#x432; (micro-kernel, microservices, layered, event-driven, etc), &#x438; &#x431;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x43C;&#x44B; &#x443;&#x436;&#x435; &#x43D;&#x430; &#x441;&#x442;&#x430;&#x440;&#x442;&#x435; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;&#x438;&#x442;&#x44C; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x439;, &#x441;&#x440;&#x430;&#x432;&#x43D;&#x438;&#x442;&#x44C; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x441;&#x432;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x430; &#x441; &#x43E;&#x436;&#x438;&#x434;&#x430;&#x435;&#x43C;&#x44B;&#x43C;&#x438;, &#x438; &#x432;&#x44B;&#x431;&#x440;&#x430;&#x442;&#x44C; <strong>&#x43B;&#x443;&#x447;&#x448;&#x435;&#x435;</strong> &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435; &#x43F;&#x43E;&#x434; &#x442;&#x435;&#x43A;&#x443;&#x449;&#x443;&#x44E; <strong>&#x437;&#x430;&#x434;&#x430;&#x447;&#x443;</strong>.</p><p></p><h2 id="%D1%82%D0%B0%D0%BA-%D0%BA-%D1%87%D0%B5%D0%BC%D1%83-%D1%81%D1%82%D1%80%D0%B5%D0%BC%D0%B8%D1%82%D1%8C%D1%81%D1%8F-%D0%BC%D0%BD%D0%B5-%D0%BA%D0%B0%D0%BA-%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D1%83">&#x422;&#x430;&#x43A; &#x43A; &#x447;&#x435;&#x43C;&#x443; &#x441;&#x442;&#x440;&#x435;&#x43C;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x43C;&#x43D;&#x435;, &#x43A;&#x430;&#x43A; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x443;?</h2><p>&#x414;&#x443;&#x43C;&#x430;&#x44E;, &#x432;&#x43E;&#x442; &#x43A; &#x447;&#x435;&#x43C;&#x443;:</p><p>1. &#x423;&#x43A;&#x440;&#x435;&#x43F;&#x438;&#x442;&#x44C; &#x442;&#x435;&#x43E;&#x440;&#x438;&#x44E;, <strong>&#x438;&#x437;&#x443;&#x447;&#x438;&#x442;&#x44C;</strong> &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x435; &#x442;&#x435;&#x445;&#x43D;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x435; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F;, &#x43E;&#x441;&#x43E;&#x431;&#x435;&#x43D;&#x43D;&#x43E; &#x432; &#x442;&#x43E;&#x439; &#x43E;&#x431;&#x43B;&#x430;&#x441;&#x442;&#x438;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x44E;. &#x417;&#x434;&#x435;&#x441;&#x44C; &#x43E;&#x441;&#x43E;&#x431;&#x435;&#x43D;&#x43D;&#x43E; &#x43F;&#x440;&#x438;&#x433;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &quot;&#x442;&#x43E;&#x442; &#x441;&#x430;&#x43C;&#x44B;&#x439; &#x43A;&#x430;&#x431;&#x430;&#x43D;&#x447;&#x438;&#x43A;&quot; (&quot;&#x412;&#x44B;&#x441;&#x43E;&#x43A;&#x43E;&#x43D;&#x430;&#x433;&#x440;&#x443;&#x436;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;&quot; &#x41C;&#x430;&#x440;&#x442;&#x438;&#x43D;&#x430; &#x41A;&#x43B;&#x435;&#x43F;&#x43F;&#x43C;&#x430;&#x43D;&#x430;), &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x443; &#x447;&#x442;&#x43E; &#x43A;&#x430;&#x43A; &#x43C;&#x438;&#x43D;&#x438;&#x43C;&#x443;&#x43C; &#x432;&#x44B; &#x43F;&#x440;&#x43E;&#x447;&#x438;&#x442;&#x430;&#x435;&#x442;&#x435; &#x43F;&#x440;&#x43E; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x435; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x44B; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x438; &#x43A;&#x430;&#x43A;&#x438;&#x435; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x44B; &#x43E;&#x43D;&#x438; &#x440;&#x435;&#x448;&#x430;&#x44E;&#x442;.</p><p>2. &#x41D;&#x430;&#x443;&#x447;&#x438;&#x442;&#x44C;&#x441;&#x44F; <strong>&#x43F;&#x43E;&#x43D;&#x438;&#x43C;&#x430;&#x442;&#x44C;</strong> &#x437;&#x430;&#x43A;&#x430;&#x437;&#x447;&#x438;&#x43A;&#x430; (&#x43F;&#x43E;&#x434;&#x440;&#x430;&#x437;&#x443;&#x43C;&#x435;&#x432;&#x430;&#x44E; &#x443;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x449;&#x443;&#x44E; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x443; &#x432; &#x43B;&#x44E;&#x431;&#x43E;&#x43C; &#x432;&#x438;&#x434;&#x435;: &#x43C;&#x435;&#x43D;&#x435;&#x434;&#x436;&#x435;&#x440;&#x44B;, &#x43E;&#x432;&#x43D;&#x435;&#x440; &#x444;&#x438;&#x440;&#x43C;&#x44B;, &#x43A;&#x43E;&#x43D;&#x43A;&#x440;&#x435;&#x442;&#x43D;&#x44B;&#x439; &#x447;&#x435;&#x43B;&#x43E;&#x432;&#x435;&#x43A; &#x43D;&#x430; &#x431;&#x438;&#x440;&#x436;&#x435;). &#x41D;&#x435;&#x440;&#x435;&#x434;&#x43A;&#x43E; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x438; &#x432;&#x43E;&#x437;&#x43D;&#x438;&#x43A;&#x430;&#x44E;&#x442; &#x441; &#x442;&#x435;&#x43C;, &#x43A;&#x430;&#x43A; &#x437;&#x430;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x44B; (&quot;&#x432;&#x43E;&#x442; &#x436;&#x435; &#x445;&#x435;&#x440;&#x43D;&#x44E; &#x441;&#x43F;&#x440;&#x430;&#x448;&#x438;&#x432;&#x430;&#x44E;!&quot;), &#x438;&#x43B;&#x438; &#x441; &#x442;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x43C;&#x44B; &#x43D;&#x435; &#x443;&#x43C;&#x435;&#x435;&#x43C; <em>&#x441;&#x43B;&#x443;&#x448;&#x430;&#x442;&#x44C;</em>, &#x438; &#x443;&#x43B;&#x435;&#x442;&#x430;&#x435;&#x43C; &#x432; &#x441;&#x432;&#x43E;&#x438; &#x442;&#x435;&#x445;&#x43D;&#x43E;&#x433;&#x438;&#x43A;&#x43E;&#x432;&#x44B;&#x435; &#x444;&#x430;&#x43D;&#x442;&#x430;&#x437;&#x438;&#x438;, &#x438;&#x43B;&#x438; &#x441; &#x442;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x441;&#x430;&#x43C; &#x437;&#x430;&#x43A;&#x430;&#x437;&#x447;&#x438;&#x43A; &#x43F;&#x43E;&#x43A;&#x430; &#x43D;&#x435; &#x432;&#x438;&#x434;&#x438;&#x442;, &#x447;&#x442;&#x43E; &#x432;&#x430;&#x436;&#x43D;&#x43E; &#x434;&#x43B;&#x44F; &#x432;&#x430;&#x441;, &#x43A;&#x430;&#x43A; &#x434;&#x43B;&#x44F; &#x430;&#x440;&#x445;&#x438;&#x442;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x430;. &#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x43E; &#x43F;&#x440;&#x438;&#x440;&#x43E;&#x434;&#x443; &#x43A;&#x43E;&#x43D;&#x444;&#x43B;&#x438;&#x43A;&#x442;&#x43E;&#x432;, &#x43F;&#x440;&#x43E;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x441; &#x43F;&#x441;&#x438;&#x445;&#x43E;&#x43B;&#x43E;&#x433;&#x43E;&#x43C; &#x441;&#x432;&#x43E;&#x438; &#x441;&#x442;&#x440;&#x430;&#x445;&#x438; &#x432; &#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x438; (&#x443; &#x43C;&#x435;&#x43D;&#x44F;, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x435;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x44B; &#x441; &#x43E;&#x446;&#x435;&#x43D;&#x43A;&#x43E;&#x439; &#x441;&#x435;&#x431;&#x44F;, &#x438; &#x44D;&#x442;&#x43E; &#x43C;&#x435;&#x448;&#x430;&#x435;&#x442; &#x43F;&#x435;&#x440;&#x435;&#x433;&#x43E;&#x432;&#x43E;&#x440;&#x430;&#x43C;), &#x438;&#x43B;&#x438; &#x43F;&#x43E;&#x441;&#x442;&#x430;&#x440;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x443;&#x433;&#x43B;&#x443;&#x431;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x432; &#x441;&#x430;&#x43C; &#x431;&#x438;&#x437;&#x43D;&#x435;&#x441; (&#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x43D;&#x430;&#x43F;&#x440;&#x43E;&#x441;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x43D;&#x430; &#x442;&#x430;&#x43A;&#x43E;&#x433;&#x43E; &#x440;&#x43E;&#x434;&#x430; &#x432;&#x441;&#x442;&#x440;&#x435;&#x447;&#x438;, &#x435;&#x441;&#x43B;&#x438; &#x435;&#x441;&#x442;&#x44C; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C;).</p><p>3. &#x418; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x442;&#x43E;&#x433;&#x43E;, &#x43A;&#x430;&#x43A; &#x432; &#x433;&#x43E;&#x43B;&#x43E;&#x432;&#x435; &#x431;&#x443;&#x434;&#x443;&#x442; &#x43D;&#x435;&#x43A;&#x438;&#x435; &quot;&#x448;&#x430;&#x431;&#x43B;&#x43E;&#x43D;&#x44B;&quot; &#x434;&#x43B;&#x44F; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x44F; &#x437;&#x430;&#x434;&#x430;&#x447;; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43F;&#x43E;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x435; &#x442;&#x43E;&#x433;&#x43E;, &#x447;&#x442;&#x43E; &#x432;&#x430;&#x436;&#x43D;&#x43E; &#x437;&#x434;&#x435;&#x441;&#x44C; &#x438; &#x441;&#x435;&#x439;&#x447;&#x430;&#x441;, &#x438; &#x447;&#x435;&#x43C; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x436;&#x435;&#x440;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x442;&#x44C;, &#x43D;&#x443;&#x436;&#x43D;&#x43E;... &#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x442;&#x44C;? &#x41D;&#x435;&#x442;, &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x443;&#x43C;&#x435;&#x442;&#x44C; &#x432;&#x43D;&#x44F;&#x442;&#x43D;&#x43E; <strong>&#x437;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C;</strong> &#x441;&#x432;&#x43E;&#x438; &#x440;&#x430;&#x437;&#x43C;&#x44B;&#x448;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x442;&#x430;&#x43A;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x437;&#x430;&#x432;&#x442;&#x440;&#x430; &#x432;&#x44B; &#x43F;&#x440;&#x43E;&#x441;&#x43D;&#x443;&#x43B;&#x438;&#x441;&#x44C;, &#x438; &#x43D;&#x435; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x441;&#x430;&#x43C;&#x438; &#x432;&#x441;&#x43F;&#x43E;&#x43C;&#x43D;&#x438;&#x43B;&#x438;, &#x43D;&#x43E; &#x438; &#x43C;&#x43E;&#x433;&#x43B;&#x438; &#x434;&#x43E;&#x43E;&#x431;&#x441;&#x443;&#x434;&#x438;&#x442;&#x44C; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441; &#x441; &#x43A;&#x43E;&#x43B;&#x43B;&#x435;&#x433;&#x430;&#x43C;&#x438;. &#x41C;&#x44B; &#x43C;&#x44B;&#x441;&#x43B;&#x438;&#x43C; &#x43D;&#x435; &#x432;&#x441;&#x435;&#x433;&#x434;&#x430; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;, &#x447;&#x430;&#x441;&#x442;&#x43E; &#x43D;&#x435;&#x432;&#x43D;&#x438;&#x43C;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E;, &#x438; &#x44F; &#x441;&#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x440;&#x430;&#x437; &#x43E;&#x431;&#x43D;&#x430;&#x440;&#x443;&#x436;&#x438;&#x432;&#x430;&#x43B;, &#x447;&#x442;&#x43E; &#x447;&#x442;&#x43E;-&#x442;&#x43E; &#x432;&#x430;&#x436;&#x43D;&#x43E;&#x435; &#x443;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x43B; &#x438; &#x43D;&#x435; &#x437;&#x430;&#x43C;&#x435;&#x442;&#x438;&#x43B;, &#x447;&#x442;&#x43E; &#x437;&#x430; &#x44D;&#x442;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x443;&#x436;&#x435; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x431;&#x44B;&#x43B;&#x43E; &#x431;&#x44B; &#x441;&#x430;&#x43C;&#x43E;&#x43C;&#x443; &#x441;&#x442;&#x430;&#x442;&#x44C; &#x437;&#x430;&#x43A;&#x430;&#x437;&#x447;&#x438;&#x43A;&#x43E;&#x43C;. &#x411;&#x43B;&#x43E;&#x43A;&#x43D;&#x43E;&#x442;/&#x434;&#x43E;&#x441;&#x43A;&#x430;/&#x43F;&#x43B;&#x430;&#x43D;&#x448;&#x435;&#x442;/&#x437;&#x430;&#x43C;&#x435;&#x442;&#x43A;&#x438; &#x2013;&#xA0;&#x432;&#x430;&#x448; &#x432;&#x435;&#x440;&#x43D;&#x44B;&#x439; &#x434;&#x440;&#x443;&#x433;.</p><p>&#x41F;&#x43E;&#x434;&#x435;&#x43B;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x441;&#x432;&#x43E;&#x438;&#x43C;&#x438; &#x43C;&#x44B;&#x441;&#x43B;&#x44F;&#x43C;&#x438; &#x438;&#x43B;&#x438; &#x43D;&#x435; &#x441;&#x43E;&#x433;&#x43B;&#x430;&#x441;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x441;&#x43E; &#x43C;&#x43D;&#x43E;&#x439; &#x432;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; <a href="https://t.me/VyacheArt/195?ref=slavniy.com">&#x432; &#x442;&#x435;&#x43B;&#x435;&#x433;&#x440;&#x430;&#x43C;-&#x43A;&#x430;&#x43D;&#x430;&#x43B;&#x435;</a>. </p>]]></content:encoded></item><item><title><![CDATA[10 КРУТЫХ идей Go проектов для новичков]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/-4RQDdiWZ5w?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="10 &#x41A;&#x420;&#x423;&#x422;&#x42B;&#x425; &#x438;&#x434;&#x435;&#x439; Go &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x43E;&#x432; &#x434;&#x43B;&#x44F; &#x43D;&#x43E;&#x432;&#x438;&#x447;&#x43A;&#x43E;&#x432;"></iframe></figure><p>&#x415;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x448;&#x43B;&#x438; &#x43D;&#x430; &#x433;&#x43E; &#x441; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x433;&#x43E; &#x44F;&#x437;&#x44B;&#x43A;&#x430;, &#x442;&#x43E; &#x434;&#x43B;&#x44F; &#x432;&#x430;&#x441; &#x441;&#x43E;&#x431;&#x440;&#x430;&#x43B;</p>]]></description><link>https://slavniy.com/10-krutykh-idiei-go-proiektov-dlia-novichkov/</link><guid isPermaLink="false">66dc5519e203d4da259ee4ac</guid><category><![CDATA[🎬 Видео]]></category><category><![CDATA[🦦 GoLang]]></category><category><![CDATA[📝 Статьи]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Sat, 07 Sep 2024 13:40:39 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/-4RQDdiWZ5w?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="10 &#x41A;&#x420;&#x423;&#x422;&#x42B;&#x425; &#x438;&#x434;&#x435;&#x439; Go &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x43E;&#x432; &#x434;&#x43B;&#x44F; &#x43D;&#x43E;&#x432;&#x438;&#x447;&#x43A;&#x43E;&#x432;"></iframe></figure><p>&#x415;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x448;&#x43B;&#x438; &#x43D;&#x430; &#x433;&#x43E; &#x441; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x433;&#x43E; &#x44F;&#x437;&#x44B;&#x43A;&#x430;, &#x442;&#x43E; &#x434;&#x43B;&#x44F; &#x432;&#x430;&#x441; &#x441;&#x43E;&#x431;&#x440;&#x430;&#x43B; &#x434;&#x435;&#x441;&#x44F;&#x442;&#x44C; &#x43A;&#x440;&#x443;&#x442;&#x44B;&#x445; &#x43F;&#x43E;&#x434;&#x440;&#x43E;&#x431;&#x43D;&#x44B;&#x445; &#x438;&#x434;&#x435;&#x439; &#x434;&#x43B;&#x44F; &#x43F;&#x435;&#x442;-&#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x43E;&#x432;, &#x438; &#x43E;&#x431;&#x43E;&#x437;&#x43D;&#x430;&#x447;&#x438;&#x43B; &#x442;&#x435;&#x445;&#x43D;&#x43E;&#x43B;&#x43E;&#x433;&#x438;&#x438;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x432;&#x430;&#x43C; &#x432;&#x430;&#x436;&#x43D;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x442; &#x438;&#x437;&#x443;&#x447;&#x438;&#x442;&#x44C;.<br><br>&#x421;&#x442;&#x440;&#x43E;&#x433;&#x43E; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F; &#x44D;&#x442;&#x43E; &#x43F;&#x43E;&#x434;&#x431;&#x43E;&#x440;&#x43A;&#x430; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x434;&#x43B;&#x44F; &#x43D;&#x43E;&#x432;&#x438;&#x447;&#x43A;&#x43E;&#x432; &#x432; Go, &#x438; &#x44F; &#x43E;&#x436;&#x438;&#x434;&#x430;&#x44E;, &#x447;&#x442;&#x43E; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43D;&#x430; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x43C; &#x44F;&#x437;&#x44B;&#x43A;&#x435; &#x432;&#x44B; &#x443;&#x436;&#x435; &#x443;&#x43C;&#x435;&#x435;&#x442;&#x435; &#x1F642;. &#x410; &#x435;&#x441;&#x43B;&#x438; &#x43D;&#x435;&#x442;, &#x442;&#x43E; &#x441;&#x43C;&#x435;&#x43B;&#x43E; &#x43F;&#x43E;&#x434;&#x43F;&#x438;&#x441;&#x44B;&#x432;&#x430;&#x439;&#x442;&#x435;&#x441;&#x44C;, &#x438; &#x44F; &#x43D;&#x430;&#x443;&#x447;&#x443;.</p><h1 id="%D0%B8%D0%B4%D0%B5%D0%B8-%D0%B8-%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5">&#x418;&#x434;&#x435;&#x438; &#x438; &#x43E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x435;</h1><h2 id="grpc">gRPC</h2><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://grpc.io/docs/languages/go/?ref=slavniy.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Go</div><div class="kg-bookmark-description">A high-performance, open source universal RPC framework</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://grpc.io/favicons/android-chrome-512x512.png" alt><span class="kg-bookmark-author">gRPC</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://grpc.io/img/logos/grpc-icon-color.png" alt></div></a></figure><p>&#x41B;&#x44E;&#x431;&#x43E;&#x435; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x43D;&#x43E;&#x435; &#x41F;&#x41E; &#x441;&#x43A;&#x43E;&#x440;&#x435;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43A;&#x430;&#x43A;-&#x442;&#x43E; &#x43E;&#x431;&#x449;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x441; &#x434;&#x440;&#x443;&#x433;&#x438;&#x43C;&#x438; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441;&#x430;&#x43C;&#x438;. &#x418; &#x435;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x43E;&#x442;&#x43E;&#x43A;&#x43E;&#x43B;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x432;&#x430;&#x43C; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x44D;&#x442;&#x43E; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;, &#x431;&#x44B;&#x441;&#x442;&#x440;&#x43E; &#x438; &#x43D;&#x435;&#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E; &#x43E;&#x442; &#x44F;&#x437;&#x44B;&#x43A;&#x430;:&#xA0;<strong>gRPC</strong>.</p><p><strong>gRPC</strong> (gRPC Remote Procedure Call) - &#x44D;&#x442;&#x43E; &#x432;&#x44B;&#x441;&#x43E;&#x43A;&#x43E;&#x43F;&#x440;&#x43E;&#x438;&#x437;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x444;&#x440;&#x435;&#x439;&#x43C;&#x432;&#x43E;&#x440;&#x43A; &#x441; &#x43E;&#x442;&#x43A;&#x440;&#x44B;&#x442;&#x44B;&#x43C; &#x438;&#x441;&#x445;&#x43E;&#x434;&#x43D;&#x44B;&#x43C; &#x43A;&#x43E;&#x434;&#x43E;&#x43C;, &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x43D;&#x43D;&#x44B;&#x439; Google &#x434;&#x43B;&#x44F; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x43D;&#x438;&#x44F; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x44B;&#x445; &#x438; &#x43C;&#x430;&#x441;&#x448;&#x442;&#x430;&#x431;&#x438;&#x440;&#x443;&#x435;&#x43C;&#x44B;&#x445; API. &#x41E;&#x43D; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442; &#x43F;&#x440;&#x43E;&#x442;&#x43E;&#x43A;&#x43E;&#x43B; HTTP/2 &#x434;&#x43B;&#x44F; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x447;&#x438; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x438; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x43E;&#x43F;&#x440;&#x435;&#x434;&#x435;&#x43B;&#x44F;&#x442;&#x44C; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441;&#x430; &#x441; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C;&#x44E; &#x44F;&#x437;&#x44B;&#x43A;&#x430; &#x43E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x44F; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x430; (IDL) &#x43F;&#x43E;&#x434; &#x43D;&#x430;&#x437;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; Protocol Buffers, &#x43E;&#x431;&#x435;&#x441;&#x43F;&#x435;&#x447;&#x438;&#x432;&#x430;&#x44F; &#x442;&#x438;&#x43F;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x443;&#x44E;, &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x443;&#x44E; &#x438; &#x43D;&#x435;&#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x443;&#x44E; &#x43E;&#x442; &#x44F;&#x437;&#x44B;&#x43A;&#x430; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43A;&#x43E;&#x43C;&#x43C;&#x443;&#x43D;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x44E; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x43A;&#x43B;&#x438;&#x435;&#x43D;&#x442;&#x43E;&#x43C; &#x438; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x43E;&#x43C;.</p><h3 id="%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5-%D0%BF%D0%BB%D1%8E%D1%81%D1%8B">&#x41A;&#x43B;&#x44E;&#x447;&#x435;&#x432;&#x44B;&#x435; &#x43F;&#x43B;&#x44E;&#x441;&#x44B;</h3><ol><li>&#x41A;&#x43E;&#x43C;&#x43F;&#x430;&#x43A;&#x442;&#x43D;&#x43E;&#x441;&#x442;&#x44C;: gRPC &#x43E;&#x431;&#x43C;&#x435;&#x43D;&#x438;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x43C; &#x432; &#x431;&#x438;&#x43D;&#x430;&#x440;&#x43D;&#x43E;&#x43C; &#x444;&#x43E;&#x440;&#x43C;&#x430;&#x442;&#x435;</li><li>&#x420;&#x430;&#x441;&#x448;&#x438;&#x440;&#x44F;&#x435;&#x43C;&#x43E;&#x441;&#x442;&#x44C;: &#x432; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; Protocol Buffers &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43B;&#x435;&#x433;&#x43A;&#x43E; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x44B;&#x435; &#x43F;&#x43E;&#x43B;&#x44F; &#x431;&#x435;&#x437; &#x43F;&#x43E;&#x442;&#x435;&#x440;&#x438; &#x441;&#x43E;&#x432;&#x43C;&#x435;&#x441;&#x442;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x441; &#x43F;&#x440;&#x43E;&#x448;&#x43B;&#x44B;&#x43C;&#x438; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F;&#x43C;&#x438; </li><li>&#x41E;&#x431;&#x43C;&#x435;&#x43D; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x43C;&#x438; &#x432; &#x440;&#x435;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; &#x441;&#x43E; streaming &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F;&#x43C;&#x438;</li></ol><h3 id="%D0%B8%D0%B4%D0%B5%D0%B8">&#x418;&#x434;&#x435;&#x438;</h3><ol><li>&#x427;&#x430;&#x442; &#x432; &#x440;&#x435;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438;</li><li>&#x41C;&#x443;&#x43B;&#x44C;&#x442;&#x438;&#x43F;&#x43B;&#x435;&#x435;&#x440;&#x43D;&#x44B;&#x439; Flappy Bird</li><li>&#x41A;&#x43B;&#x43E;&#x43D; &#x441;&#x430;&#x439;&#x442;&#x430; &quot;&#x43C;&#x438;&#x43B;&#x43B;&#x438;&#x43E;&#x43D; &#x447;&#x435;&#x43A;&#x431;&#x43E;&#x43A;&#x441;&#x43E;&#x432;&quot;</li><li>&#x423;&#x434;&#x430;&#x43B;&#x451;&#x43D;&#x43D;&#x43E;&#x435; &#x443;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x438; &#x43C;&#x43E;&#x43D;&#x438;&#x442;&#x43E;&#x440;&#x438;&#x43D;&#x433; &#x441;&#x432;&#x43E;&#x435;&#x433;&#x43E; &#x43A;&#x43E;&#x43C;&#x43F;&#x44C;&#x44E;&#x442;&#x435;&#x440;&#x430;</li></ol><h1 id="web">WEB</h1><p>&#x41E;&#x433;&#x440;&#x43E;&#x43C;&#x43D;&#x430;&#x44F; &#x43E;&#x431;&#x43B;&#x430;&#x441;&#x442;&#x44C;, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x439; &#x433;&#x43E; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43F;&#x43E;&#x43F;&#x443;&#x43B;&#x44F;&#x440;&#x435;&#x43D; &#x2013;&#xA0;&#x44D;&#x442;&#x43E; &#x432;&#x435;&#x431;.</p><p>&#x414;&#x43B;&#x44F; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441; &#x431;&#x430;&#x437;&#x43E;&#x439; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x432;&#x430;&#x43C; &#x43F;&#x440;&#x438;&#x433;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x430; GORM: <a href="https://github.com/go-gorm/gorm?ref=slavniy.com">https://github.com/go-gorm/gorm</a>. </p><p>&#x417;&#x430;&#x445;&#x43E;&#x442;&#x438;&#x442;&#x435; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44E; &#x432; &#x440;&#x435;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438;, &#x442;&#x43E;&#x433;&#x434;&#x430; &#x432;&#x44B;&#x431;&#x438;&#x440;&#x430;&#x439;&#x442;&#x435; WebSocket &#x438; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x443; gorilla/websocket: <a href="https://github.com/gorilla/websocket?ref=slavniy.com">https://github.com/gorilla/websocket</a>. </p><h3 id="%D0%B8%D0%B4%D0%B5%D0%B8-1">&#x418;&#x434;&#x435;&#x438;</h3><ol><li>&#x413;&#x43E;&#x441;&#x442;&#x435;&#x432;&#x430;&#x44F; &#x43A;&#x43D;&#x438;&#x433;&#x430; &#x430;-&#x43B;&#x44F; &quot;&#x422;&#x432;&#x438;&#x442;&#x442;&#x435;&#x440;&quot; &#x438;&#x43B;&#x438; &quot;X&quot; &#x441; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x435;&#x439; &#x432; &#x440;&#x435;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x43C; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438;</li><li>&#x411;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x430; &#x43A;&#x43D;&#x438;&#x433; &#x438; &#x441;&#x435;&#x440;&#x438;&#x430;&#x43B;&#x43E;&#x432;</li><li>&#x413;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440; &#x444;&#x43E;&#x440;&#x43C; &#x434;&#x43B;&#x44F; &#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x43E;&#x432;</li><li>&#x411;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x430; &#x43E;&#x442;&#x437;&#x44B;&#x432;&#x43E;&#x432;</li><li>&#x41B;&#x438;&#x447;&#x43D;&#x430;&#x44F; &#x432;&#x438;&#x437;&#x438;&#x442;&#x43D;&#x438;&#x446;&#x430;</li></ol><h1 id="%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5">&#x414;&#x430;&#x43D;&#x43D;&#x44B;&#x435;</h1><p>&#x41F;&#x440;&#x438; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x435; &#x43F;&#x440;&#x43E;&#x434;&#x443;&#x43A;&#x442;&#x430; &#x443; &#x432;&#x430;&#x441; &#x432;&#x441;&#x435;&#x433;&#x434;&#x430; &#x43F;&#x43E;&#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x442;&#x441;&#x44F; <em>&#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435;</em>, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x43A;&#x430;&#x43A;-&#x442;&#x43E; &#x445;&#x440;&#x430;&#x43D;&#x438;&#x442;&#x44C;, &#x438; &#x432;&#x44B;, &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x447;&#x438;&#x43A;, &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x44B; &#x437;&#x43D;&#x430;&#x442;&#x44C; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x435; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x438; &#x447;&#x435;&#x43C; &#x43E;&#x43D;&#x438; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x430;&#x44E;&#x442;&#x441;&#x44F;.</p><p>&#x414;&#x43B;&#x44F; &#x445;&#x440;&#x430;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x432; &#x43E;&#x43F;&#x435;&#x440;&#x430;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x439; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x447;&#x430;&#x442;&#x44C; &#x441; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x445; &#x445;&#x435;&#x448;-&#x442;&#x430;&#x431;&#x43B;&#x438;&#x446;, &#x438; &#x441;&#x43E;&#x441;&#x440;&#x435;&#x434;&#x43E;&#x442;&#x43E;&#x447;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x43D;&#x430; &#x434;&#x438;&#x437;&#x430;&#x439;&#x43D;&#x435; API &#x438; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x430;&#x445; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x433;&#x43E; &#x445;&#x440;&#x430;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x445; &#x442;&#x438;&#x43F;&#x43E;&#x432;.</p><p>&#x414;&#x43B;&#x44F; &#x43F;&#x43E;&#x441;&#x442;&#x43E;&#x44F;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x445;&#x440;&#x430;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x439;&#x442;&#x438; &#x432; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x443; <strong>LSM &#x434;&#x435;&#x440;&#x435;&#x432;&#x44C;&#x435;&#x432;</strong>. </p><p><strong>LSM (Log-Structured Merge) &#x434;&#x435;&#x440;&#x435;&#x432;&#x44C;&#x44F;</strong> - &#x44D;&#x442;&#x43E; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x430; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445;, &#x43E;&#x43F;&#x442;&#x438;&#x43C;&#x438;&#x437;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x430;&#x44F; &#x434;&#x43B;&#x44F; &#x431;&#x44B;&#x441;&#x442;&#x440;&#x43E;&#x439; &#x437;&#x430;&#x43F;&#x438;&#x441;&#x438; &#x438; &#x44D;&#x444;&#x444;&#x435;&#x43A;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x433;&#x43E; &#x445;&#x440;&#x430;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x43E;&#x433;&#x43E; &#x43E;&#x431;&#x44A;&#x435;&#x43C;&#x430; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x43D;&#x430; &#x434;&#x438;&#x441;&#x43A;&#x435;. &#x41E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x430;&#x44F; &#x438;&#x434;&#x435;&#x44F; &#x437;&#x430;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x442;&#x43E;&#x43C;, &#x447;&#x442;&#x43E; &#x43D;&#x43E;&#x432;&#x44B;&#x435; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x44F;&#x44E;&#x442;&#x441;&#x44F; &#x432; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x44C; &#x432; &#x432;&#x438;&#x434;&#x435; &#x43E;&#x442;&#x441;&#x43E;&#x440;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x44B;&#x445; &#x431;&#x43B;&#x43E;&#x43A;&#x43E;&#x432; (&#x43D;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x435;&#x43C;&#x44B;&#x445; &quot;&#x441;&#x435;&#x433;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x43C;&#x438;&quot; &#x438;&#x43B;&#x438; &quot;&#x447;&#x430;&#x43D;&#x43A;&#x430;&#x43C;&#x438;&quot;), &#x430; &#x437;&#x430;&#x442;&#x435;&#x43C; &#x43F;&#x435;&#x440;&#x438;&#x43E;&#x434;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x441;&#x43B;&#x438;&#x432;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x441; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x449;&#x438;&#x43C;&#x438; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x43C;&#x438; &#x43D;&#x430; &#x434;&#x438;&#x441;&#x43A;&#x435;, &#x43E;&#x431;&#x440;&#x430;&#x437;&#x443;&#x44F; &#x43D;&#x43E;&#x432;&#x44B;&#x435;, &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x43A;&#x440;&#x443;&#x43F;&#x43D;&#x44B;&#x435; &#x43E;&#x442;&#x441;&#x43E;&#x440;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x431;&#x43B;&#x43E;&#x43A;&#x438;.</p><h3 id="%D0%B8%D0%B4%D0%B5%D1%8F">&#x418;&#x434;&#x435;&#x44F;</h3><p>Key-value &#x445;&#x440;&#x430;&#x43D;&#x438;&#x43B;&#x438;&#x449;&#x435; &#x438;&#x43B;&#x438; in-memory &#x43A;&#x435;&#x448;. </p>]]></content:encoded></item><item><title><![CDATA[Как настроить SSH с PIV и YubiKey на macOS]]></title><description><![CDATA[<p><strong>PIV</strong> &#x2013;&#xA0;&#x44D;&#x442;&#x43E; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442; &#x434;&#x432;&#x443;&#x445;&#x444;&#x430;&#x43A;&#x442;&#x43E;&#x440;&#x43D;&#x43E;&#x439; &#x430;&#x443;&#x442;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x441; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;</p>]]></description><link>https://slavniy.com/how-to-setup-ssh-with-piv-and-yubikey-on-macos/</link><guid isPermaLink="false">66afe517e203d4da259ee427</guid><category><![CDATA[📝 Статьи]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Sun, 04 Aug 2024 21:21:32 GMT</pubDate><content:encoded><![CDATA[<p><strong>PIV</strong> &#x2013;&#xA0;&#x44D;&#x442;&#x43E; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442; &#x434;&#x432;&#x443;&#x445;&#x444;&#x430;&#x43A;&#x442;&#x43E;&#x440;&#x43D;&#x43E;&#x439; &#x430;&#x443;&#x442;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x441; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; &#x441;&#x43C;&#x430;&#x440;&#x442;-&#x43A;&#x430;&#x440;&#x442;. &#x418; &#x435;&#x441;&#x442;&#x44C; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x441;&#x43F;&#x435;&#x446;&#x438;&#x444;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x439; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x447;&#x430;&#x449;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x44D;&#x442;&#x43E;&#x43C; &#x43D;&#x430;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x438;: <strong>PKCS #11</strong>. </p><p><strong>PKCS #11</strong> &#x2013;&#xA0;&#x44D;&#x442;&#x43E; &#x443;&#x436;&#x435; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442; <em>&#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x43D;&#x43E;&#x439;</em> &#x438;&#x43C;&#x43F;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x430; &#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F;&#x430; &#x43A; &#x441;&#x43C;&#x430;&#x440;&#x442;-&#x43A;&#x430;&#x440;&#x442;&#x430;&#x43C;, &#x442;&#x43E;&#x43A;&#x435;&#x43D;&#x430;&#x43C; &#x438; &#x434;&#x440;&#x443;&#x433;&#x438;&#x43C; &#x43A;&#x440;&#x438;&#x43F;&#x442;&#x43E;&#x433;&#x440;&#x430;&#x444;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x43C; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x430;&#x43C;.</p><p>&#x41F;&#x43E; &#x438;&#x442;&#x43E;&#x433;&#x443; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x441;&#x44F; &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x441;&#x445;&#x435;&#x43C;&#x430;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43F;&#x443;&#x431;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x438; &#x43F;&#x440;&#x438;&#x432;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x431;&#x443;&#x434;&#x435;&#x442; &#x445;&#x440;&#x430;&#x43D;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x43F;&#x440;&#x44F;&#x43C;&#x43E; &#x43D;&#x430; YubiKey, &#x43D;&#x438;&#x43A;&#x43E;&#x433;&#x434;&#x430; &#x435;&#x433;&#x43E; &#x43D;&#x435; &#x43F;&#x43E;&#x43A;&#x438;&#x43D;&#x435;&#x442;, &#x430; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442; &#x43D;&#x435;&#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x442; &#x430;&#x443;&#x442;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x431;&#x435;&#x437; &#x444;&#x438;&#x437;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x451;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; YubiKey. &#x414;&#x432;&#x438;&#x433;&#x430;&#x435;&#x43C;&#x441;&#x44F; &#x434;&#x430;&#x43B;&#x44C;&#x448;&#x435;.</p><p>YubiKey &#x43F;&#x440;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x442; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441; PKCS #11, &#x430; SSH &#x443;&#x43C;&#x435;&#x435;&#x442; &#x43F;&#x43E;&#x434;&#x433;&#x440;&#x443;&#x436;&#x430;&#x442;&#x44C; &#x441;&#x43F;&#x435;&#x446;&#x438;&#x444;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x443;&#x44E; &#x434;&#x438;&#x43D;&#x430;&#x43C;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x443;&#x44E; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x443;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x438; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43E;&#x442;&#x432;&#x435;&#x447;&#x430;&#x442;&#x44C; &#x437;&#x430; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x435; &#x43F;&#x43E; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x443; PKCS #11 c YubiKey. &#x418; &#x43D;&#x430;&#x43C; &#x43E;&#x441;&#x442;&#x430;&#x43D;&#x435;&#x442;&#x441;&#x44F; &#x43B;&#x438;&#x448;&#x44C; &#x441;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x43B;&#x44E;&#x447;&#x438;, &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x438;&#x445; &#x43D;&#x430; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;, &#x438; &#x43D;&#x430;&#x441;&#x43B;&#x430;&#x436;&#x434;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x441;&#x435;&#x43A;&#x44C;&#x44E;&#x440;&#x43D;&#x44B;&#x43C; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435;&#x43C;!</p><p>&#x412;&#x435;&#x441;&#x44C; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441; &#x43F;&#x440;&#x43E;&#x434;&#x435;&#x43B;&#x44B;&#x432;&#x430;&#x43B; &#x441;:</p><ul><li>YubiKey 5C NFC;</li><li>macOS 14.5 Sonoma.</li></ul><h1 id="%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0">&#x41F;&#x43E;&#x434;&#x433;&#x43E;&#x442;&#x43E;&#x432;&#x43A;&#x430;</h1><p>&#x41D;&#x430;&#x43C; &#x43F;&#x43E;&#x43D;&#x430;&#x434;&#x43E;&#x431;&#x438;&#x442;&#x441;&#x44F; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x441; YubiKey &#x434;&#x43B;&#x44F; &#x434;&#x430;&#x43B;&#x44C;&#x43D;&#x435;&#x439;&#x448;&#x435;&#x439; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438; &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;. &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43F;&#x43E;&#x43D;&#x430;&#x434;&#x43E;&#x431;&#x438;&#x442;&#x441;&#x44F; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x442;&#x44C; &#x434;&#x432;&#x435; &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x44B;: <a href="https://developers.yubico.com/yubico-piv-tool/?ref=slavniy.com" rel="noopener">Yubico PIV Tool</a> &#x438; <a href="https://www.yubico.com/support/download/yubikey-manager/?ref=slavniy.com" rel="noopener">Yubikey Manager</a>.</p><h1 id="macos">macOS</h1><p>&#x41D;&#x430; macOS &#x434;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; <code>brew</code>:</p><pre><code class="language-bash">brew install yubico-piv-tool yubico-yubikey-manager</code></pre><p>&#x418; &#x432;&#x430;&#x436;&#x43D;&#x43E; &#x441;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x434;&#x438;&#x43D;&#x430;&#x43C;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x443;&#x44E; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x443;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x43F;&#x43E;&#x43D;&#x430;&#x434;&#x43E;&#x431;&#x438;&#x442;&#x441;&#x44F; &#x43D;&#x430;&#x448;&#x435;&#x43C;&#x443; SSH &#x43F;&#x43E;&#x437;&#x436;&#x435;:</p><pre><code class="language-bash">sudo cp /opt/homebrew/Cellar/yubico-piv-tool/2.3.1/lib/libykcs11.2.3.1.dylib /usr/local/lib/libykcs11.dylib</code></pre><p>&#x41E;&#x431;&#x440;&#x430;&#x442;&#x438;&#x442;&#x435; &#x432;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x435;, &#x447;&#x442;&#x43E; &#x432; &#x43C;&#x43E;&#x451;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F; <code>yubico-piv-tool</code> &#x431;&#x44B;&#x43B;&#x430; <code>2.3.1</code>. &#x417;&#x430;&#x43C;&#x435;&#x43D;&#x438;&#x442;&#x435; &#x43D;&#x43E;&#x43C;&#x435;&#x440; &#x432;&#x435;&#x440;&#x441;&#x438;&#x438; &#x43D;&#x430; &#x442;&#x43E;&#x442;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x443; &#x432;&#x430;&#x441;. </p><h1 id="%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-yubikey">&#x41F;&#x435;&#x440;&#x432;&#x43E;&#x43D;&#x430;&#x447;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x43A;&#x430; YubiKey</h1><p>&#x412; &#x44D;&#x442;&#x43E;&#x439; &#x447;&#x430;&#x441;&#x442;&#x438; &#x43C;&#x44B; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x43C; PIN &#x438; PUK &#x43A;&#x43E;&#x434;&#x44B;, &#x438; &#x441;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x443;&#x435;&#x43C; &quot;management key&quot; &#x434;&#x43B;&#x44F; &#x431;&#x435;&#x437;&#x43E;&#x43F;&#x430;&#x441;&#x43D;&#x43E;&#x433;&#x43E; &#x432;&#x437;&#x430;&#x438;&#x43C;&#x43E;&#x434;&#x435;&#x439;&#x441;&#x442;&#x432;&#x438;&#x44F; &#x441; YubiKey.</p><p>&#x415;&#x441;&#x43B;&#x438; &#x432;&#x441;&#x451; &#x44D;&#x442;&#x43E; &#x432;&#x44B; &#x443;&#x436;&#x435; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x438;&#x43B;&#x438;, &#x442;&#x43E; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x43F;&#x435;&#x440;&#x435;&#x439;&#x442;&#x438; &#x43A; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x43C;&#x443; &#x448;&#x430;&#x433;&#x443;. </p><ol><li>&#x41C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x441; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43E;&#x439; <code>ykman</code>. &#x41E;&#x43D;&#x430; &#x43F;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x432;&#x43C;&#x435;&#x441;&#x442;&#x435; &#x441; <code>Yubikey Manager</code>, &#x43F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x434;&#x43B;&#x44F; &#x443;&#x434;&#x43E;&#x431;&#x441;&#x442;&#x432;&#x430; &#x43C;&#x43E;&#x436;&#x435;&#x43C; &#x43F;&#x440;&#x43E;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; alias: </li></ol><pre><code class="language-bash">alias ykman=&quot;/Applications/YubiKey\ Manager.app/Contents/MacOS/ykman&quot;</code></pre><ol start="2"><li>&#x414;&#x430;&#x43B;&#x435;&#x435; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x43C; PIN &#x438; PUK &#x43A;&#x43E;&#x434;<ol><li>PIN &#x43A;&#x43E;&#x434; &#x2013;&#xA0;&#x442;&#x43E;&#x442;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x432;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x442;&#x435; &#x432;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43F;&#x440;&#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438; YubiKey</li><li>PUK &#x43A;&#x43E;&#x434; &#x2013;&#xA0;&#x442;&#x43E;&#x442;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x431;&#x443;&#x434;&#x435;&#x442; &#x432;&#x432;&#x435;&#x441;&#x442;&#x438;, &#x435;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x437;&#x430;&#x431;&#x443;&#x434;&#x435;&#x442;&#x435; PIN &#x438; &#x438;&#x437;&#x440;&#x430;&#x441;&#x445;&#x43E;&#x434;&#x443;&#x435;&#x442; &#x43F;&#x43E;&#x43F;&#x44B;&#x442;&#x43A;&#x438; &#x432;&#x432;&#x43E;&#x434;&#x430; (&#x434;&#x430;, &#x43E;&#x43D;&#x438; &#x43E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x44B;) </li></ol></li></ol><pre><code class="language-bash">ykman piv access change-pin
ykman piv access change-puk</code></pre><ol start="3"><li>&#x41F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x435;&#x435; &#x447;&#x442;&#x43E; &#x43E;&#x441;&#x442;&#x430;&#x451;&#x442;&#x441;&#x44F; &#x2013;&#xA0;&#x441;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; management key, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43C;&#x44B; &#x431;&#x443;&#x434;&#x435;&#x43C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x434;&#x430;&#x43B;&#x435;&#x435; &#x43F;&#x440;&#x438; &#x437;&#x430;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x438; PIV &#x441;&#x43B;&#x43E;&#x442;&#x43E;&#x432;. &#x421;&#x442;&#x440;&#x43E;&#x433;&#x43E; &#x433;&#x43E;&#x432;&#x43E;&#x440;&#x44F; &#x435;&#x433;&#x43E; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x44F; &#x43D;&#x435;&#x43E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x430; (&#x432;&#x440;&#x43E;&#x434;&#x435;), &#x43D;&#x43E; &#x431;&#x435;&#x437; &#x43D;&#x435;&#x451; &#x443; &#x43C;&#x435;&#x43D;&#x44F; &#x434;&#x430;&#x43B;&#x435;&#x435; &#x43D;&#x438;&#x447;&#x435;&#x433;&#x43E; &#x43D;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x43B;&#x43E;. &#x41F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;&#x435;&#x43C; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x443;</li></ol><pre><code class="language-bash">ykman piv access change-management-key --generate --protect</code></pre><h1 id="%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B9">&#x413;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x44F; &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;</h1><h2 id="%D0%BF%D1%80%D0%B8%D0%B2%D0%B0%D1%82%D0%BD%D1%8B%D0%B9-%D0%BA%D0%BB%D1%8E%D1%87">&#x41F;&#x440;&#x438;&#x432;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447;</h2><p>&#x414;&#x43B;&#x44F; &#x43F;&#x43E;&#x434;&#x43F;&#x438;&#x441;&#x438; &#x434;&#x430;&#x43B;&#x44C;&#x43D;&#x435;&#x439;&#x448;&#x438;&#x445; &#x448;&#x430;&#x433;&#x43E;&#x432; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x441;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x43B;&#x44E;&#x447; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x435;&#x439; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x43E;&#x439;:</p><pre><code class="language-bash">yubico-piv-tool --key -s 9a -AECCP384 -a generate --pin-policy=once --touch-policy=always -o public.pem</code></pre><p>&#x42D;&#x442;&#x430; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; &#x441;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x443;&#x435;&#x442; &#x43F;&#x440;&#x438;&#x432;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x43F;&#x440;&#x44F;&#x43C;&#x43E; &#x43D;&#x430; YubiKey, &#x438; &#x441;&#x43E;&#x445;&#x440;&#x430;&#x43D;&#x438;&#x442; &#x43D;&#x430; &#x432;&#x430;&#x448;&#x435;&#x43C; &#x43A;&#x43E;&#x43C;&#x43F;&#x44C;&#x44E;&#x442;&#x435;&#x440;&#x435; &#x43F;&#x443;&#x431;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x432; &#x444;&#x430;&#x439;&#x43B; <code>public.pem</code>. </p><p>&#x412;&#x44B; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x43F;&#x43E;&#x43F;&#x440;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x435; &#x43E;&#x43F;&#x446;&#x438;&#x438;:</p><ul><li><code>--pin-policy</code> &#x2013;&#xA0;&#x43F;&#x43E;&#x43B;&#x438;&#x442;&#x438;&#x43A;&#x430; &#x432;&#x432;&#x43E;&#x434;&#x430; PIN &#x43A;&#x43E;&#x434;&#x430;. &#x412;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x44B;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F;:<ul><li><code>never</code> &#x2013;&#xA0;&#x43D;&#x438;&#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43D;&#x435; &#x432;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43F;&#x438;&#x43D;-&#x43A;&#x43E;&#x434;, &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x451;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; YubiKey;</li><li><code>always</code> &#x2013;&#xA0;&#x432;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43F;&#x430;&#x440;&#x43E;&#x43B;&#x44C; &#x43F;&#x440;&#x438; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x43C; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x438;;</li><li><code>once</code> &#x2013; &#x432;&#x432;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x43F;&#x430;&#x440;&#x43E;&#x43B;&#x44C; &#x435;&#x434;&#x438;&#x43D;&#x43E;&#x436;&#x434;&#x44B; &#x434;&#x43B;&#x44F; &#x43A;&#x430;&#x436;&#x434;&#x43E;&#x439; &#x441;&#x435;&#x441;&#x441;&#x438;&#x438;. &#x421;&#x435;&#x441;&#x441;&#x438;&#x44F; &#x2013; &#x43F;&#x435;&#x440;&#x438;&#x43E;&#x434; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x438; &#x43E;&#x442;&#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x43D;&#x438;&#x435;&#x43C; YubiKey.</li></ul></li><li><code>--touch-policy</code> &#x2013;&#xA0;&#x43F;&#x43E;&#x43B;&#x438;&#x442;&#x438;&#x43A;&#x430; &#x442;&#x440;&#x435;&#x431;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43A;&#x430;&#x441;&#x430;&#x43D;&#x438;&#x44F; &#x441;&#x435;&#x43D;&#x441;&#x43E;&#x440;&#x43D;&#x43E;&#x439; &#x43A;&#x43D;&#x43E;&#x43F;&#x43A;&#x438; YubiKey. &#x412;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x44B;&#x435; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F;:<ul><li><code>never</code> &#x2013;&#xA0;&#x43D;&#x438;&#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43D;&#x435; &#x442;&#x440;&#x435;&#x431;&#x43E;&#x432;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43A;&#x430;&#x441;&#x430;&#x43D;&#x438;&#x44F;:</li><li><code>always</code> &#x2013; &#x432;&#x441;&#x435;&#x433;&#x434;&#x430; &#x442;&#x440;&#x435;&#x431;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x441;&#x430;&#x43D;&#x438;&#x435;;</li><li><code>cached</code> &#x2013;&#xA0;&#x43D;&#x435; &#x442;&#x440;&#x435;&#x431;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43A;&#x430;&#x441;&#x430;&#x43D;&#x438;&#x435; &#x432; &#x442;&#x435;&#x447;&#x435;&#x43D;&#x438;&#x435; 15 &#x441;&#x435;&#x43A;&#x443;&#x43D;&#x434; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x435;&#x433;&#x43E; (&#x443;&#x434;&#x43E;&#x431;&#x43D;&#x43E;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x437;&#x430;&#x43B;&#x43E;&#x433;&#x438;&#x43D;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x432; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43C;&#x435;&#x441;&#x442; &#x441;&#x440;&#x430;&#x437;&#x443;).</li></ul></li></ul><p>&#x41F;&#x43E;&#x434;&#x440;&#x43E;&#x431;&#x43D;&#x435;&#x435; &#x43F;&#x440;&#x43E; &#x43E;&#x43F;&#x446;&#x438;&#x438; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x43F;&#x43E;&#x447;&#x438;&#x442;&#x430;&#x442;&#x44C; &#x432; <a href="https://docs.yubico.com/yesdk/users-manual/application-piv/pin-touch-policies.html?ref=slavniy.com">&#x43E;&#x444;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438;</a>. </p><h2 id="piv-%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82">PIV &#x441;&#x435;&#x440;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x442;</h2><p>&#x421;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442; PIV &#x442;&#x440;&#x435;&#x431;&#x443;&#x435;&#x442; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x435;&#x440;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x442;&#x430;. &#x41F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x432;&#x44B;&#x448;&#x435; &#x43C;&#x44B; &#x43F;&#x440;&#x435;&#x434;&#x43F;&#x43E;&#x447;&#x43B;&#x438; &#x441;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x440;&#x438;&#x432;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x43F;&#x440;&#x44F;&#x43C;&#x43E; &#x43D;&#x430; YubiKey, &#x442;&#x43E; &#x43D;&#x430;&#x43C; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x442;&#x44C; &#x43E;&#x434;&#x43D;&#x443; &#x43A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x443;:</p><pre><code class="language-bash">yubico-piv-tool --key -a verify-pin -a selfsign-certificate -s 9a --subject &quot;/CN=SSH key/&quot; --valid-days=3650 -i public.pem -o cert.pem</code></pre><p>&#x418; &#x441;&#x435;&#x440;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x442; &#x43E;&#x43A;&#x430;&#x436;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x441;&#x43B;&#x43E;&#x442;&#x435; <code>9a</code> &#x43D;&#x430; YubiKey. </p><h2 id="%D0%BF%D1%83%D0%B1%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D0%B9-ssh-%D0%BA%D0%BB%D1%8E%D1%87">&#x41F;&#x443;&#x431;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x439; SSH &#x43A;&#x43B;&#x44E;&#x447; </h2><p>&#x418; &#x43E;&#x441;&#x442;&#x430;&#x451;&#x442;&#x441;&#x44F; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x435;&#x435;: &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x43F;&#x443;&#x431;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x439; SSH &#x43A;&#x43B;&#x44E;&#x447;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x437;&#x430;&#x442;&#x435;&#x43C; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x435;&#x433;&#x43E; &#x43D;&#x430; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x435;:</p><pre><code class="language-bash">ssh-keygen -D /usr/local/lib/libykcs11.dylib -e</code></pre><p>&#x41A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x430; &#x432;&#x44B;&#x432;&#x435;&#x434;&#x435;&#x442; &#x43F;&#x443;&#x431;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x432; <code>~/.ssh/authorized_keys</code> &#x43D;&#x430; &#x432;&#x430;&#x448;&#x435;&#x43C; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;&#x435;. </p><p>&#x418; &#x43F;&#x43E;&#x441;&#x43B;&#x435; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x44B;&#x442;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x437;&#x430;&#x43B;&#x43E;&#x433;&#x438;&#x43D;&#x438;&#x442;&#x44C;&#x441;&#x44F;:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">ssh -o &quot;PKCS11Provider /usr/local/lib/libykcs11.dylib&quot; user@remote</code></pre><figcaption><p><span style="white-space: pre-wrap;">&#x41E;&#x431;&#x440;&#x430;&#x442;&#x438;&#x442;&#x435; &#x432;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x435; &#x43D;&#x430; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x443;. &#x418;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; &#x435;&#x451; &#x43C;&#x44B; &#x441;&#x43A;&#x43E;&#x43F;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43B;&#x438; &#x43F;&#x43E; &#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x43F;&#x443;&#x442;&#x438; &#x432; &#x448;&#x430;&#x433;&#x435; &quot;&#x41F;&#x43E;&#x434;&#x433;&#x43E;&#x442;&#x43E;&#x432;&#x43A;&#x430;&quot;</span></p></figcaption></figure><p>&#x417;&#x434;&#x435;&#x441;&#x44C; &#x432;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x441;&#x442;&#x43E;&#x43B;&#x43A;&#x43D;&#x443;&#x442;&#x44C;&#x441;&#x44F; &#x441; &#x43F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x43E;&#x439;, &#x447;&#x442;&#x43E; SSH &#x43D;&#x435; &#x441;&#x43C;&#x43E;&#x436;&#x435;&#x442; &quot;&#x441;&#x43F;&#x440;&#x43E;&#x441;&#x438;&#x442;&#x44C;&quot; &#x443; &#x432;&#x430;&#x441; &#x43F;&#x438;&#x43D;-&#x43A;&#x43E;&#x434;. &#x415;&#x441;&#x43B;&#x438; &#x442;&#x430;&#x43A;&#x43E;&#x435; &#x441;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x441;&#x44F;, &#x442;&#x43E; &#x432;&#x430;&#x43C; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x442;&#x44C; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x441;&#x430;&#x43C;&#x43E;&#x433;&#x43E; &#x43E;&#x43A;&#x43D;&#x430;, &#x447;&#x442;&#x43E;&#x431;&#x44B; SSH &#x432; &#x43D;&#x435;&#x433;&#x43E; &quot;&#x43F;&#x435;&#x440;&#x435;&#x43D;&#x430;&#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&quot; &#x437;&#x430;&#x43F;&#x440;&#x43E;&#x441; &#x43F;&#x438;&#x43D;-&#x43A;&#x43E;&#x434;&#x430;. &#x421;&#x430;&#x43C;&#x43E;&#x435; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x435;: &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x442;&#x44C; <code>brew install michaelroosz/ssh/libsk-libfido2-install</code> (&#x438; &#x43F;&#x443;&#x441;&#x442;&#x44C; &#x432;&#x430;&#x441; &#x43D;&#x435; &#x441;&#x43C;&#x443;&#x449;&#x430;&#x435;&#x442; FIDO2, &#x432; &#x43A;&#x43E;&#x43C;&#x43F;&#x43B;&#x435;&#x43A;&#x442;&#x435; &#x430;&#x432;&#x442;&#x43E;&#x440; &#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x43B; &#x43D;&#x443;&#x436;&#x43D;&#x44B;&#x439; &#x43D;&#x430;&#x43C; &#x441;&#x43A;&#x440;&#x438;&#x43F;&#x442;), &#x438; &#x437;&#x430;&#x442;&#x435;&#x43C; &#x43F;&#x440;&#x43E;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x435; &#x43E;&#x43A;&#x440;&#x443;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x432; &#x432;&#x430;&#x448;&#x435;&#x43C; <code><sub>~/.zshrc</sub></code> &#x438;&#x43B;&#x438; <code>~/.bash_profile</code>:</p><pre><code class="language-bash">export SSH_ASKPASS=/opt/homebrew/bin/ssh-askpass
export DISPLAY=&quot;:0&quot;</code></pre><p>&#x416;&#x435;&#x43B;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x44D;&#x442;&#x43E; &#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x432; &#x441;&#x430;&#x43C;&#x43E;&#x43C; &#x432;&#x435;&#x440;&#x445;&#x443; &#x444;&#x430;&#x439;&#x43B;&#x430;, &#x435;&#x441;&#x43B;&#x438; &#x443; &#x432;&#x430;&#x441; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D; &#x430;&#x432;&#x442;&#x43E;&#x43C;&#x430;&#x442;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x439; <code>ssh-agent</code>. &#x422;&#x43E;&#x433;&#x434;&#x430; &#x43E;&#x43D; &#x431;&#x443;&#x434;&#x435;&#x442; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x44D;&#x442;&#x443; &#x43A;&#x43E;&#x43D;&#x444;&#x438;&#x433;&#x443;&#x440;&#x430;&#x446;&#x438;&#x44E;.</p><h2 id="%D0%BF%D0%B0%D1%80%D0%B0-%D1%81%D0%BE%D0%B2%D0%B5%D1%82%D0%BE%D0%B2">&#x41F;&#x430;&#x440;&#x430; &#x441;&#x43E;&#x432;&#x435;&#x442;&#x43E;&#x432;</h2><p>&#x420;&#x435;&#x43A;&#x43E;&#x43C;&#x435;&#x43D;&#x434;&#x443;&#x44E; &#x43F;&#x440;&#x43E;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; PKCS11Provider &#x432; &#x432;&#x430;&#x448;&#x435;&#x43C; <code>~/.ssh/config</code>, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43D;&#x435; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x431;&#x44B;&#x43B;&#x43E; &#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x44D;&#x442;&#x443; &#x43E;&#x43F;&#x446;&#x438;&#x44E; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x439; &#x440;&#x430;&#x437; &#x440;&#x443;&#x43A;&#x430;&#x43C;&#x438;:</p><pre><code>Host *
    PKCS11Provider /usr/local/lib/libykcs11.dylib</code></pre><p>&#x412;&#x44B; &#x442;&#x430;&#x43A;&#x436;&#x435; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x438;&#x442;&#x44C; &#x43F;&#x435;&#x440;&#x435;&#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; SSH &#x441;&#x43E;&#x435;&#x434;&#x438;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x438;&#x43C;&#x438; &#x441;&#x435;&#x441;&#x441;&#x438;&#x44F;&#x43C;&#x438;, &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43D;&#x435; &#x43A;&#x430;&#x441;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x43A;&#x430;&#x436;&#x434;&#x44B;&#x439; &#x440;&#x430;&#x437; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x43B;&#x44E;&#x447;&#x430;:</p><pre><code>Host bitbucket.org
    ControlMaster auto
    ControlPath ~/.ssh/S.%r@%h:%p
    ControlPersist 10m</code></pre><h1 id="%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8">&#x421;&#x441;&#x44B;&#x43B;&#x43A;&#x438;</h1><p>&#x41E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x441;&#x43C;&#x43E;&#x442;&#x440;&#x438;&#x442;&#x435; &#x441;&#x430;&#x43C; &#x440;&#x43E;&#x43B;&#x438;&#x43A; &#x43F;&#x440;&#x43E; &#x43C;&#x43E;&#x44E; &#x43F;&#x43E;&#x43F;&#x44B;&#x442;&#x43A;&#x443; &#x431;&#x435;&#x437;&#x43E;&#x43F;&#x430;&#x441;&#x43D;&#x43E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x441; SSH:  <a href="https://youtu.be/JeGVH0v68_I?ref=slavniy.com">&#x41A;&#x430;&#x43A; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; SSH &#x41F;&#x420;&#x410;&#x412;&#x418;&#x41B;&#x42C;&#x41D;&#x41E; | YubiKey, FIDO2, PIV &#x438; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; SSH &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;</a>.</p><p>&#x421;&#x442;&#x430;&#x442;&#x44C;&#x438;, &#x432;&#x438;&#x434;&#x435;&#x43E; &#x438; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x438; &#x43D;&#x435; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x43B;&#x43E;&#x441;&#x44C; &#x431;&#x44B; &#x431;&#x435;&#x437; &#x441;&#x43B;&#x435;&#x434;&#x443;&#x44E;&#x449;&#x438;&#x445; &#x43C;&#x430;&#x442;&#x435;&#x440;&#x438;&#x430;&#x43B;&#x43E;&#x432;:</p><ol><li><a href="https://developers.yubico.com/PIV/Guides/PIV_Walk-Through.html?ref=slavniy.com"><strong>PIV Walk-Through</strong></a> &#x432; &#x43E;&#x444;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438;</li><li><a href="https://docs.yubico.com/software/yubikey/tools/ykman/PIV_Commands.html?ref=slavniy.com">&#x412;&#x43D;&#x43E;&#x432;&#x44C; &#x43E;&#x444;&#x438;&#x446;&#x438;&#x430;&#x43B;&#x44C;&#x43D;&#x430;&#x44F; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x44F; &#x43F;&#x43E; <code>ykman</code></a></li><li><a href="https://blog.snapdragon.cc/posts/2023-04-28-yubikey-with-ssh-2023/?ref=slavniy.com">&#x412;&#x435;&#x43B;&#x438;&#x43A;&#x43E;&#x43B;&#x435;&#x43F;&#x43D;&#x430;&#x44F; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44F;</a> &#x43E;&#x442; &#x447;&#x435;&#x43B;&#x43E;&#x432;&#x435;&#x43A;&#x430; &#x441; &#x43D;&#x438;&#x43A;&#x43E;&#x43C; <code>m3nu</code>, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x430;&#x44F; &#x43B;&#x435;&#x433;&#x43B;&#x430; &#x432; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x443; &#x44D;&#x442;&#x43E;&#x439; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x438;</li></ol>]]></content:encoded></item><item><title><![CDATA[Как настроить SSH с FIDO2 и YubiKey на macOS]]></title><description><![CDATA[<p>&#x41A;&#x430;&#x43A; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x434;&#x43B;&#x44F; &#x430;&#x443;&#x442;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x43F;&#x43E; SSH? &#x414;</p>]]></description><link>https://slavniy.com/how-to-setup-ssh-with-fido2-and-yubikey-on-macos/</link><guid isPermaLink="false">66ae26b2e203d4da259ee37d</guid><category><![CDATA[📝 Статьи]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Sat, 03 Aug 2024 17:02:27 GMT</pubDate><content:encoded><![CDATA[<p>&#x41A;&#x430;&#x43A; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x434;&#x43B;&#x44F; &#x430;&#x443;&#x442;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x43F;&#x43E; SSH? &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442; FIDO2, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x43D;&#x435;&#x448;&#x43D;&#x435;&#x435; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x43E;. &#x412; &#x44D;&#x442;&#x43E;&#x439; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x435; &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x436;&#x443; &#x43E; &#x442;&#x43E;&#x43C;, &#x43A;&#x430;&#x43A; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x438;&#x442;&#x44C; &#x432;&#x445;&#x43E;&#x434; &#x441; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x43B;&#x44E;&#x447;&#x430; YubiKey &#x43D;&#x430; macOS.</p><p>&#x412;&#x435;&#x441;&#x44C; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441; &#x43F;&#x440;&#x43E;&#x434;&#x435;&#x43B;&#x44B;&#x432;&#x430;&#x43B; &#x441;:</p><ul><li>YubiKey 5C NFC;</li><li>macOS 14.5 Sonoma.</li></ul><p>&#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x432;&#x43E; &#x43C;&#x43D;&#x43E;&#x433;&#x43E;&#x43C; &#x438;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x44F; &#x43F;&#x43E;&#x434;&#x43E;&#x439;&#x434;&#x451;&#x442; &#x438; &#x434;&#x43B;&#x44F; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x441;&#x438;&#x441;&#x442;&#x435;&#x43C;, &#x441;&#x43F;&#x435;&#x446;&#x438;&#x444;&#x438;&#x447;&#x43D;&#x44B;&#x435; &#x448;&#x430;&#x433;&#x438; &#x44F; &#x434;&#x430;&#x43B;&#x435;&#x435; &#x43E;&#x442;&#x43C;&#x435;&#x447;&#x443;. </p><h1 id="%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0">&#x41F;&#x43E;&#x434;&#x433;&#x43E;&#x442;&#x43E;&#x432;&#x43A;&#x430;</h1><p>&#x414;&#x43B;&#x44F; &#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x443;&#x431;&#x435;&#x434;&#x438;&#x442;&#x44C;&#x441;&#x44F;, &#x447;&#x442;&#x43E; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x43D;&#x44B;&#x439; OpenSSH &#x432;&#x435;&#x440;&#x441;&#x438;&#x438; &#x43D;&#x435; &#x43D;&#x438;&#x436;&#x435; 8.3:</p><pre><code class="language-bash">ssh -V</code></pre><p>&#x415;&#x441;&#x43B;&#x438; &#x43D;&#x438;&#x436;&#x435;, &#x442;&#x43E; &#x43E;&#x431;&#x43D;&#x43E;&#x432;&#x438;&#x442;&#x435;&#x441;&#x44C; &#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F;&#x43D;&#x44B;&#x43C; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431;&#x43E;&#x43C;, &#x43D;&#x430;&#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440;, &#x447;&#x435;&#x440;&#x435;&#x437; <code>brew</code>. </p><h2 id="macos">macOS</h2><p>&#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x434;&#x430;&#x436;&#x435; &#x435;&#x441;&#x43B;&#x438; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44F; SSH &#x443; &#x432;&#x430;&#x441; &#x43A;&#x43E;&#x440;&#x440;&#x435;&#x43A;&#x442;&#x43D;&#x430;&#x44F;, &#x441;&#x43A;&#x43E;&#x440;&#x435;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x43F;&#x440;&#x438; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x438; &#x434;&#x430;&#x43B;&#x44C;&#x43D;&#x435;&#x439;&#x448;&#x438;&#x445; &#x448;&#x430;&#x433;&#x43E;&#x432; &#x432;&#x44B; &#x441;&#x442;&#x43E;&#x43B;&#x43A;&#x43D;&#x451;&#x442;&#x435;&#x441;&#x44C; &#x441; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x43E;&#x439;:</p><pre><code class="language-bash">Key enrollment failed: unknown or unsupported key type</code></pre><p>&#x421;&#x432;&#x44F;&#x437;&#x430;&#x43D;&#x43E; &#x44D;&#x442;&#x43E; &#x441; &#x442;&#x435;&#x43C;, &#x447;&#x442;&#x43E; &#x432;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x43D;&#x44B;&#x439; OpenSSH &#x432; macOS &#x43F;&#x43E; &#x443;&#x43C;&#x43E;&#x43B;&#x447;&#x430;&#x43D;&#x438;&#x44E; &#x43D;&#x435; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x438;&#x432;&#x430;&#x435;&#x442; <code>sk</code> &#x43A;&#x43B;&#x44E;&#x447;&#x438;. &#x41D;&#x43E; &#x44D;&#x442;&#x43E; &#x43B;&#x435;&#x433;&#x43A;&#x43E; &#x438;&#x441;&#x43F;&#x440;&#x430;&#x432;&#x438;&#x442;&#x44C;!</p><p>&#x415;&#x441;&#x442;&#x44C; <a href="https://github.com/Yubico/libfido2/issues/464?ref=slavniy.com">GitHub Issue</a>, &#x432; &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x43E;&#x43C; &#x43F;&#x440;&#x435;&#x43A;&#x440;&#x430;&#x441;&#x43D;&#x44B;&#x439; &#x447;&#x435;&#x43B;&#x43E;&#x432;&#x435;&#x43A; &#x43F;&#x43E;&#x434; &#x43D;&#x438;&#x43A;&#x43E;&#x43C; <a href="https://github.com/MichaelRoosz?ref=slavniy.com"><strong>MichaelRoosz</strong></a> <a href="https://github.com/Yubico/libfido2/issues/464?ref=slavniy.com#issuecomment-1740690967">&#x441;&#x43E;&#x431;&#x440;&#x430;&#x43B;</a> &#x432;&#x441;&#x435; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x44B;&#x435; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x438; &#x432; &#x432;&#x438;&#x434;&#x435; <code>brew</code> &#x43F;&#x430;&#x43A;&#x435;&#x442;&#x430;, &#x438; &#x43D;&#x430; &#x44D;&#x442;&#x430;&#x43F;&#x435; &#x43F;&#x43E;&#x434;&#x433;&#x43E;&#x442;&#x43E;&#x432;&#x43A;&#x435; &#x434;&#x430;&#x432;&#x430;&#x439;&#x442;&#x435; &#x441;&#x440;&#x430;&#x437;&#x443; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x438;&#x43C; &#x44D;&#x442;&#x43E;&#x442; &#x43F;&#x430;&#x43A;&#x435;&#x442;:</p><pre><code class="language-bash">brew install michaelroosz/ssh/libsk-libfido2-install</code></pre><p>&#x41F;&#x43E;&#x441;&#x43B;&#x435; &#x443;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43A;&#x438; &#x43E;&#x441;&#x442;&#x430;&#x451;&#x442;&#x441;&#x44F; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x43F;&#x440;&#x43E;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x43F;&#x435;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x443;&#x44E; &#x43E;&#x43A;&#x440;&#x443;&#x436;&#x435;&#x43D;&#x438;&#x44F; <code>SSH_SK_PROVIDER</code> &#x438; <code>SSH_ASKPASS</code> &#x432; &#x432;&#x430;&#x448;&#x435;&#x43C; <code><sub>~/.zshrc</sub></code> &#x438;&#x43B;&#x438; <code>~/.bash_profile</code>:</p><pre><code class="language-bash">export SSH_SK_PROVIDER=/usr/local/lib/libsk-libfido2.dylib
export SSH_ASKPASS=/opt/homebrew/bin/ssh-askpass</code></pre><p>&#x418; &#x43C;&#x44B; &#x433;&#x43E;&#x442;&#x43E;&#x432;&#x44B; &#x43A; &#x441;&#x430;&#x43C;&#x43E;&#x43C;&#x443; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x43E;&#x43C;&#x443;: &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438; &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;. </p><h1 id="%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F">&#x413;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x44F;</h1><p>&#x41F;&#x43E;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x443; &#x43F;&#x435;&#x440;&#x435;&#x434; &#x43D;&#x430;&#x43C;&#x438; &#x441;&#x442;&#x43E;&#x438;&#x442; &#x437;&#x430;&#x434;&#x430;&#x447;&#x430; &#x441;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; <em>FIDO2</em> &#x43A;&#x43B;&#x44E;&#x447;, &#x434;&#x430;&#x43B;&#x44C;&#x43D;&#x435;&#x439;&#x448;&#x438;&#x439; &#x43F;&#x443;&#x442;&#x44C; &#x440;&#x430;&#x437;&#x434;&#x435;&#x43B;&#x44F;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x430; &#x434;&#x432;&#x435; &#x434;&#x43E;&#x440;&#x43E;&#x433;&#x438;: &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x440;&#x435;&#x448;&#x438;&#x442;&#x44C; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; <strong>&#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x439;</strong> &#x438;&#x43B;&#x438; <strong>&#x43D;&#x435;&#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x439;</strong> &#x43A;&#x43B;&#x44E;&#x447;. &#x427;&#x435;&#x43C; &#x43E;&#x43D;&#x438; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x430;&#x44E;&#x442;&#x441;&#x44F;?</p><h3 id="%D0%BD%D0%B5%D1%80%D0%B5%D0%B7%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D1%81%D0%BA%D0%B8%D0%B9-fido2-%D0%BA%D0%BB%D1%8E%D1%87">&#x41D;&#x435;&#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x439; FIDO2 &#x43A;&#x43B;&#x44E;&#x447;</h3><p>&#x41A;&#x43E;&#x433;&#x434;&#x430; &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x430;&#x44F; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x430; (&#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x438;&#x43B;&#x438; &#x432;&#x435;&#x431;-&#x441;&#x430;&#x439;&#x442;) &#x445;&#x43E;&#x447;&#x435;&#x442; &#x430;&#x443;&#x442;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x446;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x430;&#x441;, &#x43E;&#x43D;&#x43E; &#x43E;&#x442;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x44F;&#x435;&#x442; &#x43E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; Credential ID. &#x42D;&#x442;&#x43E; &#x43D;&#x435;&#x43A;&#x430;&#x44F; &#x437;&#x430;&#x448;&#x438;&#x444;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x43D;&#x430;&#x44F; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44F;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x443;&#x44E; &#x440;&#x430;&#x441;&#x448;&#x438;&#x444;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x43B;&#x438; &#x432;&#x430;&#x448; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447;. </p><p>&#x421;&#x430;&#x43C; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x437;&#x430; &#x441;&#x447;&#x451;&#x442; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x443;&#x43D;&#x438;&#x43A;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x433;&#x43E; &#x43C;&#x430;&#x441;&#x442;&#x435;&#x440;-&#x43A;&#x43B;&#x44E;&#x447;&#x430;. &#x41E;&#x431;&#x440;&#x430;&#x442;&#x438;&#x442;&#x435; &#x432;&#x43D;&#x438;&#x43C;&#x430;&#x43D;&#x438;&#x435;, &#x447;&#x442;&#x43E; &#x44D;&#x442;&#x43E; &#x438;&#x43C;&#x435;&#x43D;&#x43D;&#x43E; <strong>&#x43C;&#x430;&#x441;&#x442;&#x435;&#x440;</strong>-&#x43A;&#x43B;&#x44E;&#x447;: &#x43E;&#x43D; &#x43E;&#x434;&#x438;&#x43D; &#x434;&#x43B;&#x44F; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x43B;&#x44E;&#x447;&#x430;, &#x430; &#x432;&#x442;&#x43E;&#x440;&#x443;&#x44E; &#x447;&#x430;&#x441;&#x442;&#x44C; &quot;&#x444;&#x43E;&#x440;&#x43C;&#x443;&#x43B;&#x44B;&quot; &#x2013; Credential ID, &#x43E;&#x431;&#x44F;&#x437;&#x430;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435;. &#x41D;&#x43E; &#x43F;&#x440;&#x438; &#x44D;&#x442;&#x43E;&#x43C; &#x43D;&#x438; &#x43E;&#x434;&#x438;&#x43D; &#x438;&#x437; &#x432;&#x430;&#x448;&#x438;&#x445; &#x430;&#x43A;&#x43A;&#x430;&#x443;&#x43D;&#x442;&#x43E;&#x432; &#x43D;&#x435; &#x445;&#x440;&#x430;&#x43D;&#x438;&#x442;&#x441;&#x44F; &#x432; YubiKey, &#x43F;&#x43E;&#x44D;&#x442;&#x43E;&#x43C;&#x443; &#x43C;&#x435;&#x441;&#x442;&#x43E; &#x43D;&#x435;&#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x435; &#x43A;&#x43B;&#x44E;&#x447;&#x438; &#x43D;&#x435; &#x440;&#x430;&#x441;&#x445;&#x43E;&#x434;&#x443;&#x44E;&#x442;, &#x438; &#x438;&#x445; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; <strong>&#x43D;&#x435;&#x43E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x43D;&#x43E;</strong>. </p><h3 id="%D1%80%D0%B5%D0%B7%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D1%81%D0%BA%D0%B8%D0%B9-fido2-%D0%BA%D0%BB%D1%8E%D1%87">&#x420;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x439; FIDO2 &#x43A;&#x43B;&#x44E;&#x447;</h3><p>&#x420;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x435; &#x438;&#x43B;&#x438; &#x43E;&#x431;&#x43D;&#x430;&#x440;&#x443;&#x436;&#x438;&#x432;&#x430;&#x435;&#x43C;&#x44B;&#x435; &#x43A;&#x43B;&#x44E;&#x447;&#x438;, &#x43D;&#x430;&#x43F;&#x440;&#x43E;&#x442;&#x438;&#x432;, &#x437;&#x430;&#x43D;&#x438;&#x43C;&#x430;&#x44E;&#x442; <strong>&#x441;&#x43B;&#x43E;&#x442;</strong> &#x43D;&#x430; &#x432;&#x430;&#x448;&#x435;&#x43C; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x43E;&#x43C; &#x43A;&#x43B;&#x44E;&#x447;&#x435;. &#x418;&#x445; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x440;&#x430;&#x437;&#x43D;&#x438;&#x442;&#x44C;&#x441;&#x44F; &#x432; &#x437;&#x430;&#x432;&#x438;&#x441;&#x438;&#x43C;&#x43E;&#x441;&#x442;&#x438; &#x43E;&#x442; &#x43C;&#x43E;&#x434;&#x435;&#x43B;&#x438;: &#x43D;&#x430; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; 8 &#x441;&#x43B;&#x43E;&#x442;&#x43E;&#x432;, &#x43D;&#x430; YubiKey 5 &#x43E;&#x442; 25 &#x434;&#x43E; 32, &#x430; &#x43D;&#x430; &#x43D;&#x435;&#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x445; &#x441;&#x43B;&#x43E;&#x442;&#x43E;&#x432; <strong>&#x43D;&#x435;&#x442; &#x441;&#x43E;&#x432;&#x441;&#x435;&#x43C;</strong>, &#x430; &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442; &#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x441;&#x433;&#x435;&#x43D;&#x435;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C; <strong>&#x43D;&#x435;&#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;</strong>. </p><p>&#x412; &#x434;&#x430;&#x43D;&#x43D;&#x43E;&#x43C; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44E; &#x43D;&#x435; &#x43D;&#x443;&#x436;&#x43D;&#x43E; &#x43F;&#x440;&#x435;&#x434;&#x43E;&#x441;&#x442;&#x430;&#x432;&#x43B;&#x44F;&#x442;&#x44C; Credential ID: &#x432;&#x441;&#x44F; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x430;&#x44F; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44F; &#x444;&#x43E;&#x440;&#x43C;&#x438;&#x440;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x43D;&#x430; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x43E;&#x43C; &#x43A;&#x43B;&#x44E;&#x447;&#x435; &#x432; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x430;&#x43A;&#x43A;&#x430;&#x443;&#x43D;&#x442;&#x430;. &#x415;&#x441;&#x43B;&#x438; &#x430;&#x43A;&#x43A;&#x430;&#x443;&#x43D;&#x442;&#x43E;&#x432; &#x43D;&#x435;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E;, &#x442;&#x43E; &#x431;&#x440;&#x430;&#x443;&#x437;&#x435;&#x440; &#x43F;&#x440;&#x435;&#x434;&#x43B;&#x43E;&#x436;&#x438;&#x442; &#x432;&#x44B;&#x431;&#x440;&#x430;&#x442;&#x44C; &#x43A;&#x43E;&#x43D;&#x43A;&#x440;&#x435;&#x442;&#x43D;&#x44B;&#x439;. &#x418; &#x434;&#x430;&#x43B;&#x435;&#x435; &#x443;&#x436;&#x435; &#x441;&#x430;&#x43C; &#x43A;&#x43B;&#x44E;&#x447; &quot;&#x440;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x436;&#x435;&#x442;&quot; &#x43A;&#x43E;&#x43D;&#x435;&#x447;&#x43D;&#x43E;&#x439; &#x441;&#x442;&#x43E;&#x440;&#x43E;&#x43D;&#x435; Credential ID &#x438; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x443;&#x44E; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x44E; &#x434;&#x43B;&#x44F; &#x430;&#x443;&#x442;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438;. </p><p>&#x422;&#x430;&#x43A;&#x436;&#x435; &#x441;&#x430;&#x43C;&#x430; &#x43F;&#x43E; &#x441;&#x435;&#x431;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430; &#x441; &#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x43C;&#x438; FIDO2 &#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x43C;&#x438; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x430;&#x44E;&#x442;&#x441;&#x44F; &#x438;&#x437;-&#x437;&#x430; &#x440;&#x430;&#x437;&#x43D;&#x44B;&#x445; &#x432;&#x435;&#x440;&#x441;&#x438;&#x439; <a href="https://fidoalliance.org/specs/fido-v2.2-rd-20230321/fido-client-to-authenticator-protocol-v2.2-rd-20230321.html?ref=slavniy.com"><strong>&#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442;&#x430; CTAP</strong></a>. &#x41D;&#x430; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x439; &#x43C;&#x43E;&#x43C;&#x435;&#x43D;&#x442; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x44E;&#x442; &#x432;&#x435;&#x440;&#x441;&#x438;&#x438; 2.0, 2.1PRE &#x438; 2.1. &#x418; &#x43B;&#x438;&#x448;&#x44C; 2.1PRE &#x438; 2.1 &#x434;&#x430;&#x44E;&#x442; &#x432;&#x43E;&#x437;&#x43C;&#x43E;&#x436;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x432;&#x430;&#x43C; &#x443;&#x434;&#x430;&#x43B;&#x438;&#x442;&#x44C; (&#x43E;&#x441;&#x432;&#x43E;&#x431;&#x43E;&#x434;&#x438;&#x442;&#x44C; &#x441;&#x43B;&#x43E;&#x442;) &#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x441; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x430; <strong>&#x431;&#x435;&#x437; &#x441;&#x431;&#x440;&#x43E;&#x441;&#x430; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x445;&#x440;&#x430;&#x43D;&#x438;&#x43B;&#x438;&#x449;&#x430;</strong>. &#x411;&#x44B;&#x43B;&#x43E; &#x431;&#x44B; &#x43D;&#x435;&#x43F;&#x440;&#x438;&#x44F;&#x442;&#x43D;&#x43E; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; 25 &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;, &#x438; &#x440;&#x430;&#x434;&#x438; &#x443;&#x434;&#x430;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x43E;&#x434;&#x43D;&#x43E;&#x433;&#x43E; &#x441;&#x431;&#x440;&#x430;&#x441;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x441;&#x435;, &#x43C;? </p><h3 id="%D1%82%D0%B0%D0%BA-%D1%87%D1%82%D0%BE-%D0%B2%D1%8B%D0%B1%D1%80%D0%B0%D1%82%D1%8C-%D1%87%D1%82%D0%BE-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%B5%D0%B5">&#x422;&#x430;&#x43A; &#x447;&#x442;&#x43E; &#x432;&#x44B;&#x431;&#x440;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x431;&#x435;&#x437;&#x43E;&#x43F;&#x430;&#x441;&#x43D;&#x435;&#x435;?</h3><p>&#x41E;&#x431;&#x435; &#x43E;&#x43F;&#x446;&#x438;&#x438; &#x44F;&#x432;&#x43B;&#x44F;&#x44E;&#x442;&#x441;&#x44F; <strong>&#x431;&#x435;&#x437;&#x43E;&#x43F;&#x430;&#x441;&#x43D;&#x44B;&#x43C;&#x438;</strong>. &#x414;&#x430;, &#x432; &#x441;&#x43B;&#x443;&#x447;&#x430;&#x435; &#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x43E;&#x433;&#x43E; &#x43A;&#x43B;&#x44E;&#x447;&#x430; &#x432;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x432;&#x441;&#x435; &#x447;&#x443;&#x432;&#x441;&#x442;&#x432;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x435; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x445;&#x440;&#x430;&#x43D;&#x44F;&#x442;&#x441;&#x44F; &#x43D;&#x430; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x43E;&#x43C; &#x43A;&#x43B;&#x44E;&#x447;&#x435;, &#x430; &#x443; &#x43D;&#x435;&#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x43E;&#x433;&#x43E; Credential ID &#x435;&#x441;&#x442;&#x44C; &#x443; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;. &#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x43D;&#x435;&#x43B;&#x44C;&#x437;&#x44F; &#x441;&#x43A;&#x430;&#x437;&#x430;&#x442;&#x44C;, &#x447;&#x442;&#x43E; &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x435;&#x435; &#x43F;&#x43B;&#x43E;&#x445;&#x43E;: Credential ID &#x448;&#x438;&#x444;&#x440;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x441; AES128, &#x430; &#x44D;&#x442;&#x43E; &#x434;&#x43E;&#x432;&#x43E;&#x43B;&#x44C;&#x43D;&#x43E; &#x43D;&#x430;&#x434;&#x451;&#x436;&#x43D;&#x44B;&#x439; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442;. </p><p>&#x41E;&#x434;&#x43D;&#x430;&#x43A;&#x43E; &#x435;&#x441;&#x43B;&#x438; &#x443; &#x432;&#x430;&#x441; &#x43E;&#x447;&#x435;&#x43D;&#x44C; &#x43C;&#x43D;&#x43E;&#x433;&#x43E; &#x430;&#x43A;&#x43A;&#x430;&#x443;&#x43D;&#x442;&#x43E;&#x432; (&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x435; &#x438;&#x43B;&#x438; &#x441;&#x440;&#x430;&#x432;&#x43D;&#x438;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x441; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E;&#x43C; &#x441;&#x43B;&#x43E;&#x442;&#x43E;&#x432;), &#x442;&#x43E; &#x441; &#x43E;&#x431;&#x44B;&#x432;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x441;&#x43A;&#x43E;&#x439; &#x442;&#x43E;&#x447;&#x43A;&#x438; &#x437;&#x440;&#x435;&#x43D;&#x438;&#x44F; &#x43B;&#x443;&#x447;&#x448;&#x435; &#x432;&#x44B;&#x431;&#x440;&#x430;&#x442;&#x44C; &#x43E;&#x43F;&#x446;&#x438;&#x44E; &#x441; &#x43D;&#x435;&#x43E;&#x433;&#x440;&#x430;&#x43D;&#x438;&#x447;&#x435;&#x43D;&#x43D;&#x44B;&#x43C;&#x438; &#x43D;&#x435;-&#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x43C;&#x438; &#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x43C;&#x438;. </p><h2 id="%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B">&#x41A;&#x43E;&#x43C;&#x430;&#x43D;&#x434;&#x44B;</h2><p>&#x414;&#x43B;&#x44F; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438; <strong>&#x43D;&#x435;-&#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x43E;&#x433;&#x43E;</strong> &#x43A;&#x43B;&#x44E;&#x447;&#x430; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x442;&#x435;:</p><pre><code class="language-bash">ssh-keygen -t ed25519-sk</code></pre><p>&#x410; &#x434;&#x43B;&#x44F; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x438; &#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x43E;&#x433;&#x43E;:</p><pre><code class="language-bash">ssh-keygen -t ed25519-sk -O resident -O application=ssh:my-hostname -O verify-required</code></pre><p>&#x412;&#x43C;&#x435;&#x441;&#x442;&#x43E; <code>ssh:my-hostname</code> &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x432;&#x432;&#x435;&#x441;&#x442;&#x438; &#x43B;&#x44E;&#x431;&#x43E;&#x439; &#x442;&#x435;&#x43A;&#x441;&#x442;, &#x438; &#x434;&#x430;&#x43B;&#x435;&#x435; &#x43E;&#x43D; &#x431;&#x443;&#x434;&#x435;&#x442; &#x43E;&#x442;&#x43E;&#x431;&#x440;&#x430;&#x436;&#x430;&#x442;&#x44C;&#x441;&#x44F; &#x432; Yubico Authenticator (&#x438;&#x43B;&#x438; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x43C; &#x43C;&#x435;&#x43D;&#x435;&#x434;&#x436;&#x435;&#x440;&#x435; &#x432;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x43B;&#x44E;&#x447;&#x430; &#x432; &#x441;&#x43F;&#x438;&#x441;&#x43A;&#x435; FIDO2):</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://slavniy.com/content/images/2024/08/image.png" class="kg-image" alt loading="lazy" width="2000" height="1343" srcset="https://slavniy.com/content/images/size/w600/2024/08/image.png 600w, https://slavniy.com/content/images/size/w1000/2024/08/image.png 1000w, https://slavniy.com/content/images/size/w1600/2024/08/image.png 1600w, https://slavniy.com/content/images/2024/08/image.png 2000w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">&#x421;&#x43F;&#x438;&#x441;&#x43E;&#x43A; FIDO2 &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439; &#x432; Yubico Authenticator</span></figcaption></figure><p>&#x418;, &#x43A;&#x441;&#x442;&#x430;&#x442;&#x438;, &#x434;&#x430;, &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x446;&#x438;&#x44F; &#x43F;&#x440;&#x43E;&#x438;&#x441;&#x445;&#x43E;&#x434;&#x438;&#x442; &#x43F;&#x440;&#x438;&#x432;&#x44B;&#x447;&#x43D;&#x44B;&#x43C; <code>ssh-keygen</code>. &#x415;&#x441;&#x43B;&#x438; &#x432;&#x44B; &#x43D;&#x435; &#x43F;&#x440;&#x43E;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x43B;&#x438; &#x448;&#x430;&#x433; &#x441; &#x43F;&#x43E;&#x434;&#x433;&#x43E;&#x442;&#x43E;&#x432;&#x43A;&#x43E;&#x439; &#x434;&#x43B;&#x44F; macOS, &#x442;&#x43E; &#x441;&#x435;&#x439;&#x447;&#x430;&#x441; &#x443;&#x442;&#x438;&#x43B;&#x438;&#x442;&#x430; &#x434;&#x43E;&#x43B;&#x436;&#x43D;&#x430; &#x43F;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x438;&#x442;&#x44C; &#x432;&#x432;&#x435;&#x441;&#x442;&#x438; &#x43F;&#x438;&#x43D;-&#x43A;&#x43E;&#x434; &#x438; &#x43A;&#x43E;&#x441;&#x43D;&#x443;&#x442;&#x44C;&#x441;&#x44F; &#x43A;&#x43B;&#x44E;&#x447;&#x430;. &#x410; &#x43F;&#x43E; &#x438;&#x442;&#x43E;&#x433;&#x443; &#x43F;&#x43E;&#x44F;&#x432;&#x438;&#x442;&#x441;&#x44F; <code>id_ed25519_sk</code> SSH &#x43A;&#x43B;&#x44E;&#x447;. </p><p>&#x41F;&#x443;&#x431;&#x43B;&#x438;&#x447;&#x43D;&#x443;&#x44E; &#x447;&#x430;&#x441;&#x442;&#x44C; &#x43D;&#x435;&#x43E;&#x431;&#x445;&#x43E;&#x434;&#x438;&#x43C;&#x43E; &#x432;&#x44B;&#x433;&#x440;&#x443;&#x437;&#x438;&#x442;&#x44C; &#x43D;&#x430; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440;:</p><pre><code class="language-bash">ssh-copy-id -i ~/.ssh/id_ed25519_sk user@remote</code></pre><p>&#x41F;&#x43E;&#x441;&#x43B;&#x435; &#x447;&#x435;&#x433;&#x43E; &#x432;&#x44B; &#x43C;&#x43E;&#x436;&#x435;&#x442;&#x435; &#x443;&#x431;&#x435;&#x434;&#x438;&#x442;&#x44C;&#x441;&#x44F;, &#x447;&#x442;&#x43E; &#x432;&#x441;&#x451; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;:</p><pre><code class="language-bash">ssh -i ~/.ssh/id_ed25519_sk -o &apos;IdentitiesOnly yes&apos; user@remote</code></pre><p>&#x41F;&#x43E;&#x431;&#x435;&#x434;&#x430; &#x1F642;</p><h1 id="%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8">&#x421;&#x441;&#x44B;&#x43B;&#x43A;&#x438;</h1><p>&#x41E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x441;&#x43C;&#x43E;&#x442;&#x440;&#x438;&#x442;&#x435; &#x441;&#x430;&#x43C; &#x440;&#x43E;&#x43B;&#x438;&#x43A; &#x43F;&#x440;&#x43E; &#x43C;&#x43E;&#x44E; &#x43F;&#x43E;&#x43F;&#x44B;&#x442;&#x43A;&#x443; &#x431;&#x435;&#x437;&#x43E;&#x43F;&#x430;&#x441;&#x43D;&#x43E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x442;&#x44C; &#x441; SSH:  <a href="https://youtu.be/JeGVH0v68_I?ref=slavniy.com">&#x41A;&#x430;&#x43A; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; SSH &#x41F;&#x420;&#x410;&#x412;&#x418;&#x41B;&#x42C;&#x41D;&#x41E; | YubiKey, FIDO2, PIV &#x438; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; SSH &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;</a>.</p><p>&#x418; &#x43E;&#x433;&#x440;&#x43E;&#x43C;&#x43D;&#x43E;&#x435; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x438; &#x44F; &#x443;&#x437;&#x43D;&#x430;&#x43B; &#x431;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x44F;&#x43C; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x430;&#x432;&#x442;&#x43E;&#x440;&#x43E;&#x432;:</p><ol><li><a href="https://developers.yubico.com/Passkeys/Passkey_concepts/Discoverable_vs_non-discoverable_credentials.html?ref=slavniy.com"><strong>Discoverable vs non-discoverable credentials</strong> &#x432; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438; YubiKey</a></li><li><a href="https://developers.yubico.com/Passkeys/How_passkeys_work.html?ref=slavniy.com"><strong>How passkeys work</strong> &#x432; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438; YubiKey</a></li><li><a href="https://feldspaten.org/2024/02/03/ssh-authentication-via-Yubikeys/?ref=slavniy.com"><strong>ssh authentication via Yubikeys</strong></a></li><li><a href="https://fy.blackhats.net.au/blog/2023-02-02-how-hype-will-turn-your-security-key-into-junk/?ref=slavniy.com"><strong>How Hype Will Turn Your Security Key Into Junk </strong>&#x43F;&#x440;&#x43E; &#x440;&#x430;&#x437;&#x43D;&#x438;&#x446;&#x443; &#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x445; &#x438; &#x43D;&#x435;-&#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x445; &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;</a></li><li><a href="https://github.com/Yubico/libfido2/issues/464?ref=slavniy.com">&#x422;&#x43E;&#x442; &#x441;&#x430;&#x43C;&#x44B;&#x439; <strong>Github Issue</strong> &#x441; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x434;&#x43B;&#x44F; macOS &#x438; &#x43A;&#x443;&#x447;&#x435;&#x439; &#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x43E;&#x439; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x438;</a></li></ol>]]></content:encoded></item><item><title><![CDATA[Как использовать SSH ПРАВИЛЬНО | YubiKey, FIDO2, PIV и правила использования SSH ключей]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/JeGVH0v68_I?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="&#x41A;&#x430;&#x43A; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; SSH &#x41F;&#x420;&#x410;&#x412;&#x418;&#x41B;&#x42C;&#x41D;&#x41E; | YubiKey, FIDO2, PIV &#x438; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; SSH &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;"></iframe></figure><p>&#x410; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x43B;&#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x430;&#x440;&#x43E;&#x43B;&#x44C; &#x43D;&#x430; SSH &#x43A;&#x43B;&#x44E;&#x447;&#x435;? &#x41A;&#x430;&#x43A; &#x447;&#x430;&#x441;&#x442;&#x43E; &#x43C;&#x435;&#x43D;</p>]]></description><link>https://slavniy.com/kak-ispolzovat-ssh-pravilno-yubikey-fido2-piv-i-pravila-ispolzovaniia-ssh-kliuchiei/</link><guid isPermaLink="false">66ae61f3e203d4da259ee407</guid><category><![CDATA[🎬 Видео]]></category><dc:creator><![CDATA[Вячеслав Горюнов]]></dc:creator><pubDate>Sun, 28 Jul 2024 17:00:00 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/JeGVH0v68_I?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="&#x41A;&#x430;&#x43A; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; SSH &#x41F;&#x420;&#x410;&#x412;&#x418;&#x41B;&#x42C;&#x41D;&#x41E; | YubiKey, FIDO2, PIV &#x438; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x430; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; SSH &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;"></iframe></figure><p>&#x410; &#x434;&#x43E;&#x441;&#x442;&#x430;&#x442;&#x43E;&#x447;&#x43D;&#x43E; &#x43B;&#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x43F;&#x430;&#x440;&#x43E;&#x43B;&#x44C; &#x43D;&#x430; SSH &#x43A;&#x43B;&#x44E;&#x447;&#x435;? &#x41A;&#x430;&#x43A; &#x447;&#x430;&#x441;&#x442;&#x43E; &#x43C;&#x435;&#x43D;&#x44F;&#x442;&#x44C; &#x441;&#x432;&#x43E;&#x439; SSH &#x43A;&#x43B;&#x44E;&#x447;? &#x418; &#x43A;&#x430;&#x43A; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C; (&#x438;&#x43B;&#x438; &#x432;&#x43E;&#x43E;&#x431;&#x449;&#x435; &#x43D;&#x435; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x432;&#x430;&#x442;&#x44C;?!) &#x441;&#x432;&#x43E;&#x439; SSH &#x43A;&#x43B;&#x44E;&#x447;? <br><br>&#x41E;&#x431;&#x43E; &#x432;&#x441;&#x451;&#x43C; &#x44D;&#x442;&#x43E;&#x43C;, &#x430; &#x441;&#x430;&#x43C;&#x43E;&#x435; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x43E;&#x435; &#x43E; &#x43A;&#x43E;&#x43C;&#x431;&#x438;&#x43D;&#x430;&#x446;&#x438;&#x438; SSH &#x438; YubiKey &#x440;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x436;&#x443; &#x432; &#x44D;&#x442;&#x43E;&#x43C; &#x432;&#x438;&#x434;&#x435;&#x43E;. </p><h1 id="%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8">&#x418;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x438;</h1><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://slavniy.com/how-to-setup-ssh-with-fido2-and-yubikey-on-macos/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x41A;&#x430;&#x43A; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x438;&#x442;&#x44C; SSH &#x441; FIDO2 &#x438; YubiKey &#x43D;&#x430; macOS</div><div class="kg-bookmark-description">&#x41F;&#x43E; &#x43C;&#x43E;&#x442;&#x438;&#x432;&#x430;&#x43C; https://youtu.be/JeGVH0v68_I. &#x41A;&#x430;&#x43A; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x434;&#x43B;&#x44F; &#x430;&#x443;&#x442;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x43F;&#x43E; SSH? &#x414;&#x43B;&#x44F; &#x44D;&#x442;&#x43E;&#x433;&#x43E; &#x441;&#x443;&#x449;&#x435;&#x441;&#x442;&#x432;&#x443;&#x435;&#x442; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442; FIDO2, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43F;&#x43E;&#x437;&#x432;&#x43E;&#x43B;&#x44F;&#x435;&#x442; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x432;&#x43D;&#x435;&#x448;&#x43D;&#x435;&#x435; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x43E;. &#x412; &#x44D;&#x442;&#x43E;&#x439; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x435; &#x43A;&#x430;&#x43A; &#x440;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x436;&#x443; &#x43E; &#x442;&#x43E;&#x43C;, &#x43A;&#x430;&#x43A; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x438;&#x442;&#x44C; &#x432;&#x445;&#x43E;&#x434; &#x441; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; &#x430;&#x43F;&#x43F;&#x430;&#x440;&#x430;&#x442;&#x43D;&#x43E;&#x433;&#x43E; &#x43A;&#x43B;&#x44E;&#x447;&#x430; YubiKey &#x43D;&#x430; macOS. &#x412;&#x435;&#x441;&#x44C; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441; &#x43F;&#x440;&#x43E;&#x434;&#x435;&#x43B;&#x44B;&#x432;&#x430;&#x43B; &#x441;: * YubiKey 5C NFC; * macOS</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://slavniy.com/content/images/size/w256h256/2024/08/slavniy.com-favicon-3.png" alt><span class="kg-bookmark-author">&#x421;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x439; &#x410;&#x439;&#x422;&#x438;</span><span class="kg-bookmark-publisher">&#x412;&#x44F;&#x447;&#x435;&#x441;&#x43B;&#x430;&#x432; &#x413;&#x43E;&#x440;&#x44E;&#x43D;&#x43E;&#x432;</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://slavniy.com/content/images/2024/03/IMG_0203@0.5x-copy-1.jpg" alt></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://slavniy.com/how-to-setup-ssh-with-piv-and-yubikey-on-macos/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x41A;&#x430;&#x43A; &#x43D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x438;&#x442;&#x44C; SSH &#x441; PIV &#x438; YubiKey &#x43D;&#x430; macOS</div><div class="kg-bookmark-description">&#x44D;&#x442;&#x43E; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442; &#x434;&#x432;&#x443;&#x445;&#x444;&#x430;&#x43A;&#x442;&#x43E;&#x440;&#x43D;&#x43E;&#x439; &#x430;&#x443;&#x442;&#x435;&#x43D;&#x442;&#x438;&#x444;&#x438;&#x43A;&#x430;&#x446;&#x438;&#x438; &#x441; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435;&#x43C; &#x441;&#x43C;&#x430;&#x440;&#x442;-&#x43A;&#x430;&#x440;&#x442;. &#x418; &#x435;&#x441;&#x442;&#x44C; &#x431;&#x43E;&#x43B;&#x435;&#x435; &#x441;&#x43F;&#x435;&#x446;&#x438;&#x444;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x439; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x447;&#x430;&#x449;&#x435; &#x432;&#x441;&#x435;&#x433;&#x43E; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x442;&#x441;&#x44F; &#x432; &#x44D;&#x442;&#x43E;&#x43C; &#x43D;&#x430;&#x43F;&#x440;&#x430;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x438;: PKCS #11. PKCS #11 &#x2013;&#xA0;&#x44D;&#x442;&#x43E; &#x443;&#x436;&#x435; &#x441;&#x442;&#x430;&#x43D;&#x434;&#x430;&#x440;&#x442; &#x43F;&#x440;&#x43E;&#x433;&#x440;&#x430;&#x43C;&#x43C;&#x43D;&#x43E;&#x439; &#x438;&#x43C;&#x43F;&#x43B;&#x435;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x444;&#x435;&#x439;&#x441;&#x430; &#x434;&#x43E;&#x441;&#x442;&#x443;&#x43F;&#x430; &#x43A; &#x441;&#x43C;&#x430;&#x440;&#x442;-&#x43A;&#x430;&#x440;&#x442;&#x430;&#x43C;, &#x442;&#x43E;&#x43A;&#x435;&#x43D;&#x430;&#x43C; &#x438; &#x434;&#x440;&#x443;&#x433;&#x438;&#x43C; &#x43A;&#x440;&#x438;&#x43F;&#x442;&#x43E;&#x433;&#x440;&#x430;&#x444;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;&#x43C; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x430;&#x43C;. &#x41F;&#x43E; &#x438;&#x442;&#x43E;&#x433;&#x443; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x441;&#x44F; &#x442;&#x430;&#x43A;&#x430;&#x44F; &#x441;&#x445;&#x435;&#x43C;&#x430;, &#x43A;&#x43E;&#x433;&#x434;&#x430; &#x43F;&#x443;&#x431;&#x43B;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x438; &#x43F;&#x440;&#x438;&#x432;&#x430;&#x442;&#x43D;&#x44B;&#x439; &#x43A;&#x43B;&#x44E;&#x447; &#x431;&#x443;&#x434;&#x435;&#x442; &#x445;&#x440;&#x430;&#x43D;&#x438;&#x442;&#x44C;&#x441;&#x44F;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://slavniy.com/content/images/size/w256h256/2024/08/slavniy.com-favicon-3.png" alt><span class="kg-bookmark-author">&#x421;&#x43B;&#x430;&#x432;&#x43D;&#x44B;&#x439; &#x410;&#x439;&#x422;&#x438;</span><span class="kg-bookmark-publisher">&#x412;&#x44F;&#x447;&#x435;&#x441;&#x43B;&#x430;&#x432; &#x413;&#x43E;&#x440;&#x44E;&#x43D;&#x43E;&#x432;</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://slavniy.com/content/images/2024/03/IMG_0203@0.5x-copy-1.jpg" alt></div></a></figure><h1 id="%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8">&#x421;&#x441;&#x44B;&#x43B;&#x43A;&#x438;</h1><p>&#x41E;&#x433;&#x440;&#x43E;&#x43C;&#x43D;&#x43E;&#x435; &#x43A;&#x43E;&#x43B;&#x438;&#x447;&#x435;&#x441;&#x442;&#x432;&#x43E; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x438; &#x44F; &#x443;&#x437;&#x43D;&#x430;&#x43B; &#x431;&#x43B;&#x430;&#x433;&#x43E;&#x434;&#x430;&#x440;&#x44F; &#x441;&#x442;&#x430;&#x442;&#x44C;&#x44F;&#x43C; &#x434;&#x440;&#x443;&#x433;&#x438;&#x445; &#x430;&#x432;&#x442;&#x43E;&#x440;&#x43E;&#x432;:</p><ol><li><a href="https://developers.yubico.com/Passkeys/Passkey_concepts/Discoverable_vs_non-discoverable_credentials.html?ref=slavniy.com"><strong>Discoverable vs non-discoverable credentials</strong> &#x432; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438; YubiKey</a></li><li><a href="https://developers.yubico.com/Passkeys/How_passkeys_work.html?ref=slavniy.com"><strong>How passkeys work</strong> &#x432; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x438; YubiKey</a></li><li><a href="https://feldspaten.org/2024/02/03/ssh-authentication-via-Yubikeys/?ref=slavniy.com"><strong>ssh authentication via Yubikeys</strong></a></li><li><a href="https://fy.blackhats.net.au/blog/2023-02-02-how-hype-will-turn-your-security-key-into-junk/?ref=slavniy.com"><strong>How Hype Will Turn Your Security Key Into Junk </strong>&#x43F;&#x440;&#x43E; &#x440;&#x430;&#x437;&#x43D;&#x438;&#x446;&#x443; &#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x445; &#x438; &#x43D;&#x435;-&#x440;&#x435;&#x437;&#x438;&#x434;&#x435;&#x43D;&#x442;&#x441;&#x43A;&#x438;&#x445; &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x439;</a></li><li><a href="https://github.com/Yubico/libfido2/issues/464?ref=slavniy.com">&#x422;&#x43E;&#x442; &#x441;&#x430;&#x43C;&#x44B;&#x439; <strong>Github Issue</strong> &#x441; &#x440;&#x435;&#x448;&#x435;&#x43D;&#x438;&#x435;&#x43C; &#x434;&#x43B;&#x44F; macOS &#x438; &#x43A;&#x443;&#x447;&#x435;&#x439; &#x43F;&#x43E;&#x43B;&#x435;&#x437;&#x43D;&#x43E;&#x439; &#x438;&#x43D;&#x444;&#x43E;&#x440;&#x43C;&#x430;&#x446;&#x438;&#x438;</a></li></ol>]]></content:encoded></item></channel></rss>