Эксперт в области баз данных. Автор краткого учебника SQL https://prosql.github.io/book. Автор нескольких публикаций на https://habr.com и codingsight.com на темы архитектуры баз данных и оптимизации запросов.
С начала 90-х годов профессионально занимаюсь разработкой, внедрением и интеграцией информационных систем. Работал и аналитиком, и системным администратором, и руководителем проектов, и даже поднял собственное предприятие. Но разработку никогда не бросал.
Влюблён в мощь и расширяемость PostgreSQL, гибкость и удобство Linux, надёжность Git. Постоянно изучаю новые языки, фреймворки, технологии.
Контакты

Достижения

Все достижения (4)

Наибольший вклад в теги

Все теги (44)

Лучшие ответы пользователя

Все ответы (83)
  • А Вы встречали гениев-программистов?

    zoroda
    @zoroda
    Необычный Fullstack
    Ох, эйчары! Они такие эйчары! Сколько с ними ни общался - милые, замечательные люди. Но как же далеки они от народа!
    Приходилось взаимодействовать с HR как с позиции кандидата, так и с позиции руководителя.
    Валик-джан, я тебе один умный вещь скажу, но только ты не обижайся (c) Г.Данелия
    Руководитель принимает решение о приёме на работу кандидата исходя из двух основных составляющих:
    а) технических знаний и навыков (что сможет выполнять), которые может оценить только технарь, например, тимлид;
    б) психологических качеств (как вольётся в коллектив, в процесс), которые должен оценить HR-специалист.
    Не пытайтесь решать чужую задачу. Проводить техническую часть собеседования, определять насколько "гениален" человек как разработчик - не ваше.
    Самое большее, что вы могли бы сделать, - определить, какие нужны этому кандидату особые условия работы и донести это до техлида и руководителя. Поверьте, именно за это вам будет благодарен руководитель, а не за то, что вы определили в ком-то гения.
    И таки да, гении - проблемные. По себе знаю :)
    Ответ написан
    Комментировать
  • Как реализовать неточное сравнение строк?

    zoroda
    @zoroda
    Необычный Fullstack
    Схожесть можно вычислить, например, по расстоянию Левенштейна.
    пример ещё пример
    Чем меньше расстояние, тем более похожи строки.
    Как перевести это расстояние в проценты, решите сами, если оно вам понадобится
    Ответ написан
    Комментировать
  • С чего начать изучение баз данных ,MySQL и SQL?

    zoroda
    @zoroda
    Необычный Fullstack
    Не так давно встала задача обучить человека SQL. www.sql-ex.ru оказался переполненным лишней (?) информацией. Пришлось самому написать очень сжатый курс по SQL. Там только самое необходимое чтобы научиться писать любые запросы на выборку данных.
    Если вам поможет, буду рад.
    Ответ написан
    Комментировать
  • С чего начать изучение современных веб-технологий?

    zoroda
    @zoroda
    Необычный Fullstack
    Генерят страницы и на сервере тоже. Но используют для этого тот же код, что и для генерации на клиенте. Я всегда занимался бэкэндом, но захотелось сделать свой фронтэнд с преферансом и поэтессами, благо, некоторые познания в JS уже были. Начал с AngularJS и ReactJS, потом перешёл на Angular2, который мне показался более простым для изучения и более логично построенным. Потом распробовал Vue 2. С него и рекомендую начать.
    Кстати, много полезного не только по Vue, но и по вёрстке вообще, - в курсе Макса Шварцмюллера.
    Ответ написан
    1 комментарий
  • Как просуммировать данные из двух таблиц?

    zoroda
    @zoroda
    Необычный Fullstack
    Раз данные одного вида, то через UNION:

    SELECT
    `campaign_post`,
    `campaign_name`,
    `post`,
     COUNT(*) AS `leads`,
     SUM(`new`) AS `new`,
     SUM(`approved`) AS `approved`,
     SUM(`declined`) AS `declined`,
     SUM(`webmaster_profit`) AS `webmaster_profit`
    FROM (
    SELECT
      CONCAT(w,'|',t) AS `campaign_post`,
      w AS `campaign_name`,
      t AS `post`,
      IF(`status` = 'new', 1, 0) AS `new`,
      IF(`status` = 'approved', 1, 0) AS `approved`,
      IF(`status` = 'declined', 1, 0) AS `declined`,
      web_total AS `webmaster_profit`
    FROM `m1`
    UNION ALL
    SELECT
      CONCAT(`subid1`, '|', `subid2`) AS `campaign_post`,
      `subid1` AS `campaign_name`,
      `subid2` AS `post`,
      IF(`status` = 'waiting', 1, 0) AS `new`,
      IF(`status` = 'approved', 1, 0) AS `approved`,
      IF(`status` IN ('declined', 'trash'), 1, 0) AS `declined`,
      `profit` AS `webmaster_profit`
    FROM `add1`
    ) q1
    GROUP BY `campaign_post`,
    `campaign_name`,
    `post`;

    UPD. Исправил кавычки
    Ответ написан
    2 комментария

Лучшие вопросы пользователя

Все вопросы (1)