<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом яндекс.алиса</title>
<link>https://blogengine.me/blogs/tags/yandeks-alisa/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>«Алиса» молчит</title>
<guid isPermaLink="false">127143</guid>
<link>https://bolknote.ru/all/alisa-molchit/</link>
<pubDate>Thu, 04 Apr 2024 09:52:42 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/alisa-molchit/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Как я уже писал у меня возникла задача, в рамках которой хочется научиться управлять «Алисой» из локальной сети. В &lt;a href="https://bolknote.ru/all/upravlenie-alisoy/"&gt;прошлый раз&lt;/a&gt; я остановился на том, что научился искать «Алисы» по имени сервиса, а вчера вечером решил попробовать подключиться и подать на одну из домашних «Алис» какую-нибудь команду.&lt;/p&gt;
&lt;p&gt;Поковырял первую попавшуюся библиотеку, выглядит несложно — получаем любым способом &lt;i&gt;OAuth&lt;/i&gt;-токен «Яндекса» (я взял от «Яндекс.Музыки»), с его помощью запрашиваем структуру для работы с колонками, формируем команду и шлём её на порт 1961 по протоколу &lt;i&gt;WebSocket&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Бился-бился, получаю ошибку. К сожалению, я поленился качать себе библиотеку и формировать запрос через неё. Мне казалось, что тут приключение на пятнадцать минут, но ошибся. Надо было начинать с библиотеки. Учитывая, что сейчас даже самые простые библиотеки пишут, подражая Льву Толстому, иногда очень сложно сходу разобраться что там формируется в конце. Возможно упустил какое-то поле.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2024.04.04@2x.jpg" width="1000" height="95" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Никак не удаётся заставить «Алису» принять команду&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Управление «Алисой»</title>
<guid isPermaLink="false">126353</guid>
<link>https://bolknote.ru/all/upravlenie-alisoy/</link>
<pubDate>Thu, 21 Mar 2024 23:19:58 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/upravlenie-alisoy/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Хочу попробовать решить одну прикладную задачу, пока не буду описывать какую. Для этого надо научиться управлять яндексовской «Алисой» из локальной сети. В идеале — проговаривать произвольную фразу. Почитал интернет, посмотрел как это делается.&lt;/p&gt;
&lt;p&gt;Официальный документации нет, но хорошие люди провели обратную разработку и задача выглядит как будто бы не очень сложно. Получаем токен, в сети через &lt;i&gt;mDNS&lt;/i&gt; по имени &lt;tt&gt;_yandexio._tcp.local.&lt;/tt&gt; ищем нужную колонку, находим, команды отдаём по протоколу &lt;i&gt;WebSocket&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Так как я сейчас &lt;a href="https://bolknote.ru/all/kniga-protiv-kompyutera/"&gt;стараюсь&lt;/a&gt; больше времени проводить за книгой, чем за компьютером, всё, что успел — освоить модуль &lt;tt&gt;zeroconf&lt;/tt&gt; для Гоу, чтобы по имени колонки получать её айпи-адрес и порт.&lt;/p&gt;
&lt;p&gt;Получившийся код выглядит так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="go"&gt;import &amp;quot;github.com/grandcat/zeroconf&amp;quot;
// …тут остальные импорты…

const Service = &amp;quot;_yandexio._tcp&amp;quot;
const Domain = &amp;quot;local.&amp;quot;

func getAlisaAddr(instance string) (*zeroconf.ServiceEntry, error) {
    resolver, err := zeroconf.NewResolver(nil)
    if err != nil {
        log.Fatalln(&amp;quot;Failed to initialize resolver:&amp;quot;, err)
    }

    entries := make(chan *zeroconf.ServiceEntry)
    ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)

    err = resolver.Lookup(ctx, instance, Service, Domain, entries)
    if err != nil {
        return nil, err
    }

    entry := &amp;lt;-entries
    cancel()

    &amp;lt;-ctx.Done()

    if entry == nil {
        return nil, fmt.Errorf(
              &amp;quot;Failed to lookup for service instance &amp;#039;%s&amp;#039;&amp;quot;,
              instance
       )
    }

    return entry, nil
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Теперь надо разобраться где взять токен и как выглядят команды.&lt;/p&gt;
</description>
</item>

<item>
<title>Полезный сценарий</title>
<guid isPermaLink="false">119992</guid>
<link>https://bolknote.ru/all/polezny-scenariy/</link>
<pubDate>Sat, 03 Jun 2023 18:35:36 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/polezny-scenariy/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Как я уже как-то писал, у меня не очень-то получается придумывать полезные сценарии для «умного дома», не знаю почему так, видимо этот навык надо отдельно прокачивать, а я не очень-то этим занимаюсь. Мне просто иногда месяцами не приходит в голову, что какую-то нужду можно удовлетворить, создав сценарий.&lt;/p&gt;
&lt;p&gt;Думаю, я не один такой, поэтому время от времени делюсь сценариями, которые оказались полезными для меня.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2023.06.03@2x.jpg" width="750" height="1046" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;У нас квартира так устроена, что легко не услышать как открывается дверь и, чтобы не вздрагивать от неожиданности, когда заходишь в коридор, а там кто-то копошится в полумраке, сделал сценарий «кто-то пришёл».&lt;/p&gt;
</description>
</item>

<item>
<title>«Алиса» vs. ChatGPT</title>
<guid isPermaLink="false">119635</guid>
<link>https://bolknote.ru/all/alisa-vs-chatgpt/</link>
<pubDate>Fri, 26 May 2023 10:53:59 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/alisa-vs-chatgpt/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;После сетей уровня &lt;i&gt;GPT-3,5&lt;/i&gt;, общаться с «Алисой» прям тяжело. Она и раньше-то была хабалистой, хотелось её заткнуть поскорее, а сейчас появилось новое ощущение, — что у неё синдром Вильямса. Болтает без умолку, с хорошим словарным запасом, но не понимает ничего сложнее простых фраз, просто иногда угадывает что ты ей пытаешься сказать.&lt;/p&gt;
&lt;p&gt;Раньше было неприятно, а сейчас тяжело — будто без подготовки общаешься с умственным инвалидом, не зная как сделать так, чтобы это вынужденное общение перевести в какое-то конструктивное русло.&lt;/p&gt;
&lt;p&gt;Лучше бы она совсем не притворялась, что у неё есть интеллект, слушала бы, да выполняла команды.&lt;/p&gt;
</description>
</item>


</channel>
</rss>