<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Rocket Firm</title><generator>teletype.in</generator><description><![CDATA[Посты «Ракетной фирмы». https://rocketfirm.com]]></description><image><url>https://teletype.in/files/6c/6c86df97-8856-446b-8ddd-573ca7bbca29.png</url><title>Rocket Firm</title><link>https://teletype.in/@rocketfirm</link></image><link>https://teletype.in/@rocketfirm?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=rocketfirm</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/rocketfirm?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/rocketfirm?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Thu, 09 Apr 2026 04:06:24 GMT</pubDate><lastBuildDate>Thu, 09 Apr 2026 04:06:24 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@rocketfirm/SJQpmVVZr</guid><link>https://teletype.in/@rocketfirm/SJQpmVVZr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=rocketfirm</link><comments>https://teletype.in/@rocketfirm/SJQpmVVZr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=rocketfirm#comments</comments><dc:creator>rocketfirm</dc:creator><title>Проекты и задачи с неясным статусом</title><pubDate>Thu, 11 Jul 2019 03:57:46 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/18/182a45d4-ef2d-474f-9526-f6ce1633423c.png"></media:content><description><![CDATA[<img src="https://miro.medium.com/max/1400/1*daVJF03j_2VA7YrZoAALPw.jpeg"></img>Успех проектов напрямую зависит от степени взаимопонимания. Продвинутые менеджеры знают, что пока клиента информируют о происходящем — уровень напряженности в работе минимален. Когда человек знает, что происходит и чего ждать в ближайшем будущем — он спокоен. 
Это правило применимо и к команде проекта. Старайтесь придерживаться принципа горизонтального взаимодействия: дизайнер помнит о программисте, программист о тестировщике, менеджер — о всех. Учитывайте, что коллега планирует нагрузку с учетом открытых задач, и неизвестность усложняет его работу.
]]></description><content:encoded><![CDATA[
  <figure class="m_custom">
    <img src="https://miro.medium.com/max/1400/1*daVJF03j_2VA7YrZoAALPw.jpeg" width="700" />
  </figure>
  <p>Успех проектов напрямую зависит от степени взаимопонимания. Продвинутые менеджеры знают, что пока клиента информируют о происходящем — уровень напряженности в работе минимален. Когда человек знает, что происходит и чего ждать в ближайшем будущем — он спокоен. <br />Это правило применимо и к команде проекта. Старайтесь придерживаться принципа горизонтального взаимодействия: дизайнер помнит о программисте, программист о тестировщике, менеджер — о всех. Учитывайте, что коллега планирует нагрузку с учетом открытых задач, и неизвестность усложняет его работу.<br /></p>
  <h2>Запомнить легко — всегда держи коллег в курсе</h2>
  <p>Команда сдала работу, а клиент уехал в отпуск? Напишите об этом в карточке проекта/задачи. Получил задачу, но не готов приступить? Пометь в задаче, когда сможешь ею заняться. Всегда отмечайте, почему задача «повисла в воздухе».</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/73/738fc373-cc10-4a8b-8a12-166c6c53f8b7.jpeg" width="1244" />
    <figcaption>хороший пример</figcaption>
  </figure>
  <p>Дизайнер заглянул на два шага вперед: позаботился о менеджере, который будет контактировать с технарями клиента, и о самих технарях, которые будут работать с его исходниками.</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/4c/4c0ae12d-041a-4af4-847e-1ba57fd4b8fb.jpeg" width="700" />
    <figcaption>плохой пример</figcaption>
  </figure>
  <p>Прошел месяц после отправки выполненной работы, а задача висит без комментария по поводу фидбэка от клиента.</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/72/728c57e6-d35a-49b9-b6b1-a42150f0059a.jpeg" width="700" />
    <figcaption>худший пример</figcaption>
  </figure>
  <p>Закрытая задача без объяснений.</p>
  <p>Весь процесс «делания» по проекту контролирует менеджер. Именно он в ответе за открытые задачи — карточки. Но ответственность за срок выполнения и уровень реагирования всегда несет исполнитель!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@rocketfirm/SytJQVV-H</guid><link>https://teletype.in/@rocketfirm/SytJQVV-H?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=rocketfirm</link><comments>https://teletype.in/@rocketfirm/SytJQVV-H?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=rocketfirm#comments</comments><dc:creator>rocketfirm</dc:creator><title>Работа с замечаниями клиента</title><pubDate>Thu, 11 Jul 2019 03:54:12 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/aa/aa0066ef-219c-484f-9cd2-920c0f42245f.png"></media:content><description><![CDATA[<img src="https://miro.medium.com/max/1400/1*QM1GoC5nJyUaJJBg5Fviqw.png"></img>Это отдельный процесс, требующий особого внимания и подхода. Почти всегда дизайнер относится к замечаниям о макетах негативно — это защитная реакция. Потому что он делал макет неделю и ему он нравится, а тут кто-то проситпеределать.]]></description><content:encoded><![CDATA[
  <figure class="m_custom">
    <img src="https://miro.medium.com/max/1400/1*QM1GoC5nJyUaJJBg5Fviqw.png" width="700" />
  </figure>
  <p>Это отдельный процесс, требующий особого внимания и подхода. Почти всегда дизайнер относится к замечаниям о макетах негативно — это защитная реакция. Потому что он делал макет неделю и ему он нравится, а тут кто-то проситпеределать.</p>
  <p>Но ясно же, что не прислушиваться к замечаниям клиента — глупо. Это если бы вы заказали капучино с карамелью, а вам бы её не положили, просто потому что бариста считает, что карамель — для слабаков. В результате ничего кроме испорченных отношений не будет.</p>
  <p>Вообще клиент всегда хочет улучшить проект, ведь это в его интересах, но ему нужно помочь, потому что не всем всегда удаётся правильно донести свои переживания и озабоченность.</p>
  <p>Из нашего опыта, существует 2 типа замечаний: замечания-проблемы и замечания-решения.</p>
  <h1>Замечание-решение</h1>
  <p>«Сделайте слайдер на главной поменьше в 2 раза».</p>
  <p>Клиент в своей голове уже придумал за дизайнера решение и приказывает исполнить его. Это происходит автоматически и большинство заказчиков делают именно так. Здесь важно выяснить: что беспокоит клиента, чего он боится, где видит проблему. В нашем примере скорее всего клиент боится, что какую-то важную информацию ниже слайдера не увидят — недоскроллят до нее. Если так, то решений куча: поменять блоки местами; убрать слайдер, если он мешает; поменять концепцию главной страницы и т.д.</p>
  <p>Но проблема может быть и в другом, это нужно выяснить. Возможно клиент просто увидел сайт успешного конкурента, где слайдер был поменьше. И не факт, что решение клиента «уменьшить блок» спасет положение, может быть станет еще хуже. Для дизайнера обычно легко вносить замечания-решения, но делать это, не понимая какую цель преследует клиент, как минимум неправильно.</p>
  <h1>Замечание-проблема</h1>
  <p>«На главной для нас важен блок проектов, а сейчас он очень скромен и незаметен, что можно сделать?».</p>
  <p>Вот это супер-замечание, сразу понятен приоритет и сразу куча решений в голове: переместить вверх, увеличить заголовки, подобрать красочную иллюстрацию, а если проекты главные на сайте по смыслу, то вообще в шапке на главной их пустить. То есть клиент рассказал о своем беспокойстве и спрашивает, как будет лучше.</p>
  <p>Нам нужно превращать замечания-решения в замечания-проблемы. Не слепо делать то, что придумал клиент, а узнать чего он хочет добиться/какую проблему решить, разобраться и предложить решение. Тогда всем будет легче работать и шансы успеха проекта возрастут.</p>
  <p>Как превратить замечание-решение в замечание-проблему<br />Чтобы из замечания-решения получилась замечание-проблема, нужно задавать вопросы.<br /></p>
  <p><em>— Сделайте слайдер на главной поменьше в 2 раза.<br />— Почему?<br />— Тогда освободится место под ним.<br />— Зачем нужно место под ним?<br />— Чтобы новости было лучше видно, чтобы человек видел, что ниже еще что-то есть.<br />— Хорошо. Значит, задача в том, чтобы дать понять посетителю, что сайт не заканчивается на слайдере.<br /></em></p>
  <p>В этот момент обнаруживается проблема. И именно её и будем решать. А не уменьшать слайдер в два раза.</p>
  <p>К слову сказать, проблема может быть вовсе прозаичной — человеку просто не нравится наше решение, но из вежливости он пытается найти этому объективное обоснование. Это тоже нормально, клиент заказывает проект для себя и является принимающей стороной. В таком случае не надо терроризировать человека вопросами, а убедиться в том, что вы понимаете задачу. А потом предложить новое <br />решение.<br /></p>
  <p>Автор статьи: Дмитрий Цай</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@rocketfirm/SyRLAzb8N</guid><link>https://teletype.in/@rocketfirm/SyRLAzb8N?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=rocketfirm</link><comments>https://teletype.in/@rocketfirm/SyRLAzb8N?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=rocketfirm#comments</comments><dc:creator>rocketfirm</dc:creator><title>Методы нечеткого поиска в SQL: Расстояние Левенштейна</title><pubDate>Mon, 25 Feb 2019 07:50:46 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/a2/a25b000e-376a-4da2-81e4-2b63d7ed1da8.png"></media:content><description><![CDATA[<img src="https://lh3.googleusercontent.com/IvipxQe2uagDTSrjW1L-n8TVX_b52Co43nHsrchbR2V_l4S5aA4Im9J7Tcp1855X-KRMcm8Ez7DlQcLJ1-nXh0NEVJYmobbUL_SSi2Xxx53xIdxvr3mTA91jVTydC71ZBEdqnQFG"></img>В одном из проектов, работающих внутри TheFroot, запилили любопытную штуку – нечеткий поиск в SQL посредством расстояния Левенштейна. В статье, за совместным авторством Виталия Прохоненкова и Виталия Тарасенко, рассказываем о том, что это и как с этим жить.]]></description><content:encoded><![CDATA[
  <p>В одном из проектов, работающих внутри TheFroot, запилили любопытную штуку – нечеткий поиск в SQL посредством расстояния Левенштейна. В статье, за совместным авторством Виталия Прохоненкова и Виталия Тарасенко, рассказываем о том, что это и как с этим жить.</p>
  <h2>Магазин Froot</h2>
  <p>Это маркетплейс, где один товар могут продавать десяток продавцов, выставляя разную стоимость. Подробнее о проектах Froot в портфолио rocketfirm.com.</p>
  <figure class="m_column">
    <img src="https://lh3.googleusercontent.com/IvipxQe2uagDTSrjW1L-n8TVX_b52Co43nHsrchbR2V_l4S5aA4Im9J7Tcp1855X-KRMcm8Ez7DlQcLJ1-nXh0NEVJYmobbUL_SSi2Xxx53xIdxvr3mTA91jVTydC71ZBEdqnQFG" width="1600" />
  </figure>
  <p>Товар в базу данных магазина продавец передает через XML или через API. Продавец указывает, как называется товар, сколько его штук и сколько он стоит — все из его базы данных товаров. С количеством и стоимостью товара никаких проблем нет — бери себе, складывай в соответствующие ячейки SQL и выводи после на сайте. Проблема появилась с названиями.</p>
  <figure class="m_custom">
    <img src="https://lh5.googleusercontent.com/u-WXJlFsu9N1vzgE8PGUJZUdL3jXPau4JUg3-8O5VvuMVJXy7jbWUULXoQua7yL7Qp6Lp1DSJ0wMTxXU8q2qh5nuYCgTQW_jRHdjeMXOIl0uMNrLU6LaBQKzZfRn0_ndihSQrUKZ" width="478" />
  </figure>
  <p>Чаще всего продавец уже продает товары через свой сервис — то есть, у него есть своя система названий товаров, которую он под нас менять не будет (это время, деньги и лень). Имеем проблему: товар под названием “iPhone X серый 256 гигабайт” и “iPhone X 256 Gray”, попав в нашу базу, не найдут друг друга и станут двумя разными товарами. Если таких продавцов 10, и у каждого свое название (не говоря об ошибках в названиях), это не сделает хорошо ни нам, ни покупателям.</p>
  <p>В многих маркетах эту проблему решают просто: сидит специально обученный человек и совмещает это все руками. Пришел к нему “iPhone X Grey 256 retina”, он его заботливо добавляет к “iPhone X 256Gb Gray”. У клиента таких ресурсов не оказалось, но подвернулся интересный инструмент — расстояние Левенштейна.</p>
  <h2>Расстояние Левенштейна</h2>
  <p>Расстояние Левенштейна — алгоритм нечеткого поиска. С помощью “расстояния” есть возможность находить соответствие между записями, которые в базе данных выглядят по-разному. Использование этого алгоритма позволяет находить слова и фразы в которых сделали опечатку или написал английское слово русскими буквами. После нахождения сравниваем названия с теми, что у нас есть в базе данных, и руками добавлять товар к товару не нужно.</p>
  <figure class="m_custom">
    <img src="https://lh4.googleusercontent.com/038GfLMVM0ZUO6zkphCm4QsyPYTo1OWWQCGBMJZVJEMTTKTchz9foKdXUsM5ttocMNweTgtS7pyt2E_CBuIbCrfPrI2FQXkg67_NrNuSX3TRrolUwTU8llqEREOolOa91XuX3SSp" width="349" />
  </figure>
  <p>Точность и вариативность алгоритма повышает использование метафонов (сравнивать можно и обычные строковые данные). Метафон – альтернативное название любой строки/слова/фразы. Метафоны бывают только латинскими, потому перед сравнением происходит транслитерация.</p>
  <p>Например, в базе есть товар &quot;Мобильный телефон Nokia 105 DS 2017 Blue&quot;. Его метафон будет примерно равен MBLNTELEFONNOK105DS. Если метафон фразы, на основании которой мы ищем поиск совпадет или похож (при соблюдении заданных ограничений), система примет два товара за один.</p>
  <p>Минус “Левенштейна”, что если у случайного товара окажется похожий метафон, он добавится не к своей записи. То есть, применять расстояние Левенштейна бессмысленно, когда товар называется S3 (подразумевая Samsung S3), ибо точно найдется что-то другое, что на сто процентов будет совпадать по названию, но не будет являтся Самсунгом S3. Риск легко реализуется, увидь вы, как изгаляются с названиями продавцы.</p>
  <p>Скрипт можно настроить, указав, насколько жестким должно быть сравнение – настраиваем количество символов, которые могут не соответствовать друг другу.</p>
  <p>На практике, это работает так:</p>
  <p>Ищем &quot;Мобильный телефон Nokia 105 DS 2017 Blue&quot;</p>
  <p>Находим Мобильный телефон Nokia 105 DS 2017 Blue</p>
  <p>Ищем Mobile telephone Nokia 105 DS 2017 Blue</p>
  <p>Находим Мобильный телефон Nokia 105 DS 2017 Blue</p>
  <p>Ищем &quot;Мобильный телефон Nokia 105 DS 2017&quot;</p>
  <p>Находим Мобильный телефон Nokia 105 DS 2017 Blue</p>
  <p>Ищем &quot;Nokia telephone Мобильный 2017 105 DS&quot;</p>
  <p>Находим Мобильный телефон Nokia 105 DS 2017 Blue</p>
  <p>Ищем &quot;Нокиа ТИлИфон МАбЕльнЙЫ 105 DS&quot;</p>
  <p>Находим Мобильный телефон Nokia 105 DS 2017 Blue</p>
  <figure class="m_custom">
    <img src="https://lh3.googleusercontent.com/lJY5FHbmeDf5ZNZTML9tpM09gvzLOAwvZkwFVmGjH9UopTgw3HlwcKOL9YYrQGPkoec4Ze-MimHxjTZ754JdUsRpzFQx1SZ5mcocfPrc25TCFZb3v6jkhxzRGw-_f25tSBfPimo6" width="422" />
  </figure>
  <p>Поисковые системы работают примерно по той же логике – проверить можно, введя запрос с грамматическими ошибками. Поисковая система предложит варианты исправлений.</p>
  <h2>Установка для MySQL</h2>
  <p>1. Устанавливаем плагин к MySQL отсюда: <a href="https://github.com/ifsnop/damlev" target="_blank">https://github.com/ifsnop/damlev</a>. При установке могут возникнуть проблемы с локалью, самое простое решение – установка локали в LC_ALL.</p>
  <p>2. В файле srs/damlevlim.c, в строке 169 нужно заменить <em>setlocale(LC_CTYPE, &quot;es_ES.UTF-8&quot;)</em> на <em>setlocale (LC_ALL,&quot;&quot;);</em> , что установит системную локаль. Или же можно установить какую то конкретную локаль, как в файле, но обязательно чтобы она была установлена и в системе.</p>
  <p>3. Делаем расчет метафонов для каждого слова или фразы, так как метафон можно рассчитать только для латиницы, то слово или фразу нужно транслитерировать.</p>
  <p>4. Далее запрос в БД:</p>
  <p><em>SELECT id, title FROM table WHERE damlevlim(&quot;BNNBKF&quot;,metaphone,20)=1</em></p>
  <p>Где <em>damlevlim</em> – функция которую предоставляет плагин. Функция принимает три параметра – две строки для сравнения, и целое число INT – верхняя граница, то есть, максимальное количество символов, которые будут браться с каждой строки для сравнения.</p>
  <p><em>Metaphone</em> – поле в таблице хранящее метафон тайтла,</p>
  <p><em>&quot;BNNBKF</em>&quot; — метафон от искомого значения,</p>
  <p>1 – расстояние Дамерау-Левенштейна в 1 символ, говоря проще если 1 то допускается одно несоответствие в метафонах, если 0, то метафоны должны быть один в один.</p>
  <h2>Информация в сети</h2>
  <p><a href="https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0" target="_blank">О Расстоянии Левенштейна в википедии</a></p>
  <p><a href="https://habr.com/post/342434/" target="_blank">Подробная статья на хабре</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@rocketfirm/BkXLuD0JE</guid><link>https://teletype.in/@rocketfirm/BkXLuD0JE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=rocketfirm</link><comments>https://teletype.in/@rocketfirm/BkXLuD0JE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=rocketfirm#comments</comments><dc:creator>rocketfirm</dc:creator><title>Результаты внутреннего конкурса дизайнеров</title><pubDate>Wed, 12 Dec 2018 10:51:55 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/f1/f14a940c-2244-484d-a30e-09033e4f208e.png"></media:content><description><![CDATA[<img src="https://intra.rocketfirm.com/media/page_image/ib/1533031514aztst.png"></img>В «Ракетную» часто требуются талантливые ребята. В этот раз мы искали дизайнеров и попросили сделать их тестовое задание. Арт-директор Максим Перфильев расскажет о результатах.]]></description><content:encoded><![CDATA[
  <p>В «Ракетную» часто требуются талантливые ребята. В этот раз мы искали дизайнеров и попросили сделать их тестовое задание. Арт-директор Максим Перфильев расскажет о результатах.</p>
  <h3><strong>Задание</strong></h3>
  <p>Предложите мобильную версию главной страницы epay.railways.kz: функциональные улучшения и новое оформление. Результат работы — 1 картинка в формате jpeg или png.</p>
  <h3><strong>Немного статистики</strong></h3>
  <blockquote>194 отклика</blockquote>
  <blockquote>72 предложения выполнить тестовое задание</blockquote>
  <blockquote>42 задания выполнено</blockquote>
  <blockquote>5 дизайнерам предложена работа</blockquote>
  <blockquote>3 дизайнера остались работать спустя месяц</blockquote>
  <p>Конверсия — говно. Если бы это была форма на сайте — стоило бы её переделать.</p>
  <h3><strong>Оценка работ</strong></h3>
  <p>Оцениваем работы по 5-бальной системе</p>
  <h3><strong>Работы на 1-2</strong></h3>
  <p>В этих работах все плохо — оформление и решение задачи. Мелкий кегль и элементы управления, плохая работа с текстом и картинками. При вопросах о принятых решениях ребята путаются или сразу пропадают.</p>
  <figure class="m_custom">
    <img src="https://intra.rocketfirm.com/media/page_image/ib/1533031514aztst.png" width="906" />
  </figure>
  <figure class="m_custom">
    <img src="https://intra.rocketfirm.com/media/page_image/lk/153303152943dd0.png" width="906" />
  </figure>
  <h3><strong>Работы на 3</strong></h3>
  <p>Тут либо проблема с оформлением, либо с решением задачи. Глаза местами всё ещё кровоточат, но уже не так сильно. Ребята попытались подумать, но что-то не получилось и они решили взять кальку с авиасейлс. На вопрос о принятых решениях в основном отвечают что на авиасейлс так и разницы нет, если учесть что оба проекта продают билеты. (спойлер: она есть, и большая)</p>
  <figure class="m_custom">
    <img src="https://intra.rocketfirm.com/media/page_image/19/1533031643f1rb0.png" width="906" />
  </figure>
  <figure class="m_custom">
    <img src="https://intra.rocketfirm.com/media/page_image/gr/15330316556z4s6.png" width="906" />
  </figure>
  <h3><strong>Работы на 4</strong></h3>
  <p>На этих работах видно, что ребята подумали, посмотрели авиасейлс, еще раз подумали и потом уже нарисовали. Визуально норм, но не больше. Задача решена также, как оформлена — норм. Я все еще не найду билет, но не найду его более комфортно. Поле «обратно» усиливает вероятность не найти билет с помощью поиска.</p>
  <figure class="m_custom">
    <img src="https://intra.rocketfirm.com/media/page_image/yg/153303179231ypn.png" width="906" />
  </figure>
  <figure class="m_custom">
    <img src="https://intra.rocketfirm.com/media/page_image/h6/153303180619ibq.png" width="906" />
  </figure>
  <h3><strong>Итог</strong></h3>
  <p>Работ на «пятёрочку» не прислал никто. Нарисовать красивенько и исправить поверхностные проблемы смогли многие, но самая большая проблема так и не была решена — я все еще фиг найду билет с помощью поиска.</p>

]]></content:encoded></item></channel></rss>