Tuesday, April 30, 2019

Синхронизация форкa на github с основным репозиторием

Два программиста работают в команде над двумя проектами:


Когда программисты помогают друг другу, каждый ведет работу в своем форке. Форк (англ. fork) - это копия репозитория Github, которая также хранится на Github в аккаунте другого пользователя.

Синхронизация

Обычно, когда к проекту подключается Вадим, Дмитрий уже внес новые данные, которых еще нет в форке у Вадима. Перед тем, как приступить к написанию кода, Вадиму нужно перенести последние правки Дмитрия в свой форк.

Лучшая инструкция размещена на сайте Github: syncing a fork

Если английский не понятен, то русскоязычные статьи можно найти в поисковике по фразе:
«Синхронизация fork-a на github с основным репозиторием»

Сайты

Сайт Дмитрия: http://www.gorkogo55.ru/
Сайт Вадима: http://www.events4friens.ru/


Tuesday, April 23, 2019

Совместная работа с git

Когда несколько программистов работают над одним проектом, практически всегда они используют систему контроля версий для совместной работы с одним исходным кодом. Это может быть gitsvnperforce и другие.

В данной статье описывается один из способов комфортного взаимодействия программистов. Стоит сразу отметить, что данный метод не претендует на звание «the best git workflow ever» и будет постоянно дорабатываться и улучшаться.

Мы используем OS X, VSCodeBitBucketSourceTree и git. Поэтому в примерах будут использоваться именно эти инструменты.

0. Зачем нам это?

Классический пример:


Система контроля версий - не идеальна. Потерять код во время синхронизации с чужими изменениями - горе в команде 😭. Подход, который изложен ниже поможет минимизировать побочные эффекты системы контроля версий.

1. Начало работы

Реализация каждой задачи выполняется в отдельной ветке разработки. Перед тем как начать программирование, необходимо создать отдельную ветку:
git checkout -B my-task 
git push --set-upstream origin my-task

Дерево коммитов выглядит так:


В то время, как программист вносит изменения в свою ветку my-task, другие изменения появляются в основной ветке разработки. Как правило, в конце выполнения задачи дерево коммитов выглядит так:




2. Перенос своих изменений «вверх»

В статье merging-vs-rebasing от подробно расписаны стратегии синхронизации. Мы используем rebasing.

Команда rebase переносит коммиты наверх из вашей ветки в ветку разработки. Команды:
git checkout my-task
git rebase develop
следует читать «переносим изменения my-task наверх ветки develop»

Коммиты «переносятся наверх» последовательно. Обычно «перенос» каждого коммита происходит автоматически. Но иногда автоматически «перенести» (или «накатить» коммит) не удается и тогда можно увидеть подобное сообщение:


Пояснение с скрину:
1. программист выполнил команду rebase
2. система не смогла автоматически исправить «накатить» коммит
3. система говорит, что нужно сделать. Также в редакторе VSCode подсвечивается проблемное место

После исправления конфликта выполнить указания системы (см. пункт 3):
git add .
git rebase --continue

Эти две команды указывают, что все конфликты в коде разрешены и необходимо продолжить «перенос». Ситуация может повторятся несколько раз. В таком случае всегда следует читать логи и следовать инструкциям системы git.

После завершения переноса необходимо «запушить перенос на сервер bitbucket» c флагом force:
git push -f origin my-task

После переноса дерево коммитов выглядит так:



3. Проверка кода

После того, как «изменения перенесены наверх», необходимо на сайте bitbucket создать pull request. Для этого необходимо на соответствующей странице нажать кнопку «Create pull request»

Выглядит это так:

Пояснение к скрину:
1. Выбрать ветку, в которой велась разработка (my-task)
2. Выбрать ветку, в которую «вливаем» изменения (develop)
3. Проверить список коммитов, убедиться что ничего не было потеряно.
4. Выставить галочку, так как ветка (my-task) будет неактуальна.

Опять нажать кнопку «Create pull request»
Появится окно:

Пояснение к скрину:
1. «Влить» все данные my-task в ветку develop
2. Просмотреть весь код и указать статус «Approve»
3. Все изменения вместе

4. Завершение задачи

После нажатия кнопки «Merge» данные попадут в главную ветку разработки. После синхронизации кода с сервером получится такое «закрытие» в истории коммитов:


Пояснение к скрину:
1. Красивое дерево истории коммитов
2. Все коммиты вместе для более легкого восприятия задачи в целом

Ветку задачи my-task желательно удалить. Она более не нужна. При доработках задачи желательно создавать новую ветку (см пункт 1)

Теперь можно смело приступать к новой задаче и держать эту инструкцию под рукой.

Friday, April 19, 2019

Сайт для торгового центра

Старинный торговый центр «Две пятерки» выглядит мрачно.



Так же плохо обстоят дела с навигацией.





Так появилась идея создания сайта. Простого сайта, который решит проблему навигации и увеличит посещаемость ТЦ.

Идея была озвучена на хакатоне (Trello board - KonigHack #4) и позже реализована (сайт - gorkogo55.ru).

Сайт состоит из из трех страниц:
  1. Главная страница
  2. Страница поиска
  3. Страница магазина
Дизайн сайта максимально соответствует по мрачности торговому центру 







На сайте есть низкая посещаемость, поэтому в будущем планируется улучшение дизайна и навигации по сайту.

Wednesday, November 14, 2018

Тестовое задание React

 

Вступление

Что делать, чтобы скорее выучить React?
Пройти туториал и выполнить тестовое задание.

Полезные ссылки

Документация react - раздел Getting Started»
Introducing JSX - синтаксическое расширение к языку JavaScript.

Документация по фреймворку React прекрасна (на первых этапах), дальше есть проблемы.

Тестовое задание

В прекрасном тестовом задании от KODE была задача реализовать простой интерфейс с ключевой особенностью: бесконечный слайдер. Самостоятельно я с этой задачей не справился, но и в интернетах готовое решение не смотрел. Вместо слайдера я использовал кнопки.

Скрин 1:

Скрин 2 (когда нет прогноза погоды):


Исходники сайта находятся в открытом доступе, а сам сайт лежит тут

Итого

Первый проект (пусть и тестовый) на фреймворке React готов.

Thursday, October 18, 2018

Анализ оскорблений в сети

 

Вступление

Надо подробнее разобраться с оскорблениями, экстремизмом, оскорблениями чувств верующих и другими ситуациями, за которые могут призвать к ответственности.

Оскорбления с точки зрения закона

В действующем законодательстве оскорбление личности рассматривается как административное правонарушение, наказание за которое предусмотрено статьёй 5.61 Кодекса РФ об административных правонарушениях.

Текст закона об унижении чести и достоинства другого лица:
КоАП РФ Статья 5.61. Оскорбление [1]

Унижение чести или достоинства должно быть выражено в неприличной форме, отсутствие таковой исключает квалификацию правонарушения как оскорбления. Понятие «неприличная форма» законодательно не раскрывается, но под ним понимается действие виновного в грубой, циничной форме, противоречащей правилам поведения, принятым в обществе либо разделяемым большинством членов данного общества, это форма унизительного обращения с человеком. Сегодня исследователи справедливо отмечают, что правоприменители нередко сталкиваются с проблемой толкования термина «неприличная форма». Нередко данный вопрос («Выражено ли высказывание в неприличной форме?») адресуется экспертам-лингвистам.

Из судебной практики. Не оскорбление:
«Ведь для всего этого уголовного сброда в лице Евдокимовых, Давыдовых, Мотовиловых, Мякушей, Истоминых, Караваевых, Мошаровых, Юревичей и прочих предстоящие выборы - это тест на профпригодность, на лояльность своему нацлидеру жуликов и воров».

Оскорбительные высказывания в адрес персонально неопределенной группы лиц, идентифицируемой признаками профессии, национальной принадлежности и т.д., состава оскорбления не образуют, но в некоторых случаях могут квалифицироваться как преступление (например, ст. 282 УК РФ «Возбуждение ненависти либо вражды, а равно унижение человеческого достоинства») или образовывать состав административного правонарушения (например, ст.5.62 «Дискриминация»).

Состав правонарушения является формальным. Преступление считается оконченным после совершения действий, унижающих честь и достоинство личности. Наступление последствий от унижения чести и достоинства не требуется. Оскорбление может быть выражено устно (в виде ругательств, прозвищ), письменно (в виде записок, рисунков), а также в виде физических действий (пощечин, плевков и т.п.). Действия, унижающие честь и достоинство, могут быть совершены как в присутствии потерпевшего, так и в присутствии третьих лиц, в том числе и при отсутствии потерпевшего.

Субъективная сторона оскорбления характеризуется умышленной формой вины, причем возможен только прямой умысел. Виновный осознает, что наносит оскорбление другому человеку, и желает этого. Он сознает общественную опасность деяния. Вместе с тем вопрос о субъективной стороне оскорбления является дискуссионным. [2]

Как избежать оскорблений в сети?


Эксперт объясняет почему решил, что "Иди на х*й" не является оскорблением [3]

Эталонный пример.
Эксперт объясняет почему решил, что "Иди на х*й" не является оскорблением [3]

Еще раз:
Оскорбление - это унижение чести и достоинства другого лица, выраженное в неприличной форме.

Оскорбление:
ты - х*й

Не оскорбление (нет неприличной формы):
ты - дубина

Не оскорбление (нет унижения чести и достоинства):
иди нах*й [3]

Не оскорбление (нет объекта оскорбления):
мне пох*й

TODO: информация будет дополнена

Cсылки

[1] КоАП РФ Статья 5.61. Оскорбление
http://www.consultant.ru/document/cons_doc_LAW_34661/d40cbd099d17057d9697b15ee8368e49953416ae/

[2] Оскорбление: деликт, правоприменительная практика: https://ceur.ru/library/articles/lingvisticheskaja_jekspertiza/item134171/

[3] Эксперт объясняет почему решил, что "Иди на х*й" не является оскорблением
https://euroradio.fm/ru/ekspert-obyasnyaet-pochemu-reshil-chto-idi-na-hy-ne-yavlyaetsya-oskorbleniem

Thursday, September 20, 2018

Календарь-калькулятор

Вступление


Так исторически сложилось, что в календарь записывали расходы/доходы. 😐
Необходимо создать веб-приложение, которое получает и обрабатывает данные календаря Google.

Пользователь записывал в календаре каждый прием посетителя и в коротком описании события просто указывал цену услуги. Таким образом в календаре накопились финансовые данные. И теперь появилась потребность их рассчитывать.


Исследование


Полезные ссылки:
Calendar API
Сайт позволяет тестировать методы API.

Getting Started with  JavaScript client library:
https://developers.google.com/api-client-library/javascript/start/start-js

People API:
https://developers.google.com/people/

При инициализации библиотеки необходимо указывать scope: какие именно API будут использоваться. В моем случае это будет срока:

profile https://www.googleapis.com/auth/calendar.readonly

Для получения данных о пользователе, и для получения данных о календарях.


Реализация


По шагам:


  1. Создаем проект на github (CalendarCalculator)
  2. Настроить npm + gulp: коммит
  3. В консоли google создаем проект "Calendar Calculator"
  4. Необходимо подключить People API
  5. Реализовать авторизацию: коммит

  6. Получить список календарей: коммит

  7. Реализовать получение событий: коммит

  8. Подсчет данных из событий в календаре: коммит



Вот и собственно все.
Далее остается фикс багов, затем расширение.

upd: после добавления стилей календарь выглядит так:




Итого


Календарь-калькулятор можно заценить на https://vadimcpp.github.io/calendarCalculator/
Веб-приложение подключается к календарю, читает данные календаря и проводит простую калькуляцию.


Friday, September 14, 2018

Подготовка к devfest 2018

Вступление


15 сентября 2018 года состоялось событие DevFest, в рамках которого рассказал историю одного цензор-бота.


Презентация и речь


Время - 25 минут.

Содержимое:

  • Вступление
  • Представление
  • История цензуры
  • Русский мат
  • Проблема
  • Хакатон KoenigHack-2018
  • Как работает алгоритм?
  • Как наполняли словарь?
  • Где уже внедрено?
  • Планы на будущее
  • Итого



1. Вступление




Технологии стремительно развиваются. Мир становится сложнее. Соцсети уходят в прошлое. Все пользуются мессенджерами. А уже совсем скоро наши карманные компьютеры, которые мы называем телефонами, заговорят.

Создается впечатление, что для создания стоящего продукта необходимо:

быть гением;
вложить массу усилий, денег и времени;
Но это не так... (интрига?)



2. Представление




Привет! Меня зовут Вадим. Я работаю фронтенд-разработчиком в компании РосКомпьютинг, которая занимается разработкой программного обеспечения на заказ, ИТ консалтингом, а также развивает собственную линейку продуктов.

ИТ технологии кардинально изменили и продолжают менять этот мир. Мне очень интересно изучать то, как технологии меняют общество, способы коммуникации и уклад жизни современного человек. Поэтому в свободное время я работаю над социально полезными продуктами.

Сегодняшняя история - это история как раз про социально полезный продукт. История о том, как простая идея и простая реализация приносит большую пользу. Это история цензор-бота.


3. История цензуры




Что такое «цензура»? Это слово в переводе с латинского означает «строгое суждение, суровый разбор, взыскательная критика». В современном мире цензура - это:
  1. надзор за печатью с целью недопущения распространения вредных с точки зрения правительства произведений печати
  2. учреждения, которым поручен этот надзор
  3. неотъемлемая функция любого государства



Точно можно сказать, что цензуры как таковой не существовало, пока не появилась письменность. Далее в хронологическом порядке:

  1. Письменность массово появляется после Крещения Руси Владимиром в 988 году.
  2. Первый России список запрещённых к чтению книг вышел в 1073 году: «Изборник 1073 года»
  3. Первый русский литературный памятник — „Слово о полку Игореве“ — появился в конце XII в. (1185 году)



Парадокс!

Цензура в России развивалась по стопам материковой Европы и была предварительной, как в Европе. Французские законы были базой для российского цензурного законодательства в отношении отечественных изданий, а прообразом правил к иностранным изданиям - Пруссия и Австрия.

16 мая 1917 года в «Вестнике Временного правительства» было обнародовано законодательное распоряжение: «Печать и торговля произведениями печати свободны. Применительно к ним административных взысканий не допускается». В реальности подобная свобода полностью реализована не была.
В современной России цензура запрещена Конституцией Российской Федерации  — п. 5 статьи 29




4. Русский мат


Русский мат был элементом языческих культов, связанных с плодородием, например, с заговором скота или призывом дождя.

Одна из распространенных версий – татаро-монголы. Но на самом деле к ним эта лексика никакого отношения не имеет. Русский мат славянского происхождения. Четыре известные каждому русскому человеку корня можно встретить и в македонском, и в словенском, и в других славянских языках.


Древнейшие известные образцы — в берестяных грамотах XII-XIII веков из Новгорода и Старой Руссы. Вот они:



Сейчас использование мата считается неприемлемым в приличном обществе и в литературе, и обычно цензурируется в периодической печати, на телевидении, радио и в других СМИ. Почему?

Потому что церковь и государство в России всегда были тесно связаны. Крещение Руси принесло не только письменность, но и начало активную борьбу с языческими культами, в том числе с матерными словами как одним из проявлений культа. Борьба с русским матом продолжается и сейчас.


5. Проблема


Согласно Кодексам об административных правонарушениях русскоязычных стран, а именно России (статья 20.1[32]), Казахстана (статья 330[33]), Белоруссии (статья 156[34]) и Киргизии (статья 364[35]), публичное употребление мата может расцениваться как мелкое хулиганство, наказываемое штрафом или административным арестом. Статья 20.1 Кодекса об административных правонарушениях Российской Федерации:

«Мелкое хулиганство, то есть нарушение общественного порядка, выражающее явное неуважение к обществу, сопровождающееся нецензурной бранью в общественных местах, оскорбительным приставанием к гражданам, а равно уничтожением или повреждением чужого имущества, — влечёт наложение административного штрафа в размере от пятисот до одной тысячи рублей или административный арест на срок до пятнадцати суток.»



Как бы странно не звучало, но чат - это общественное место! Из определения: общественное место — территория или пространство потенциального местонахождения людей.

В начале 2018 года я заметил, что маты в чатах доставляют боль. Почти в каждом чате присутствует список правил:
⛔️ не материться
⛔️ не спамить
⛔️ не оскорблять других участников
⛔️ не разжигать

Тогда совместно с Машей мы обсудили идею телеграм бота и на ближейшем хакатоне реализовали бота и внедрили в группу GDG Kaliningrad


6. Хакатон KoenigHack-2018


Собственно с этого момента начинается история цензор-бота.
17 февраля 2018 года в 5:35 утра был сделан первый коммит

Почитать про событие можно тут:


7. Как работает алгоритм?


Бот - это на самом деле обычный веб-сервер, который принимает запросы от мессенджера Telegram и обрабатывает их.



А как бот удаляет маты?

Тут схема чуть сложнее. Для каждого сообщения бот выполняет два действия:
Отмечает в сообщении слова, которые однозначно не являются нецензурными
Затем удаляет все нецензурные слова



8. Как наполняли словарь?


После внедрения бота в чат, начался период его совершенствования. Несколько человек (@MISTikus, @imfrombristol, @KlepikovKonstantin и др.) наполняли словарь матами. На сегодняшний день размер словаря составляет 1360 слов. Это почти все нецензурные слова русского языка,  с разными окончаниями и разными приставками.


9. Где уже внедрено?


Внедрено в игре Мафия, на моем сайте и в телеграмме. Для бота доступен REST API. Вы можете интегрировать свое приложение с ботом, предварительно получив ключ.




10. Планы на будущее


Недавно прошла тестирование фича антиспам. Цензор-бот также выполняет функцию антиспам в основной группе GDG Kaliningrad.

Чего хотелось бы еще?

  • Статистика
    Еще пока нет статистики. Кроме уровня загрузки сервера.
  • Цензура сообщений в бизнес чатах
    Цензура сообщений в бизнес переписке значительно повысит стрессоустойчивость сотрудников, которые вынуждены читать все сообщения от всех недовольных клиентов. Клиенту даже необязательно показывать что его сообщение подверглось цензуре. Тут важно то, что бот заботится о психологическом здоровье сотрудника.
  • Распознавание и предварительная цензура речевых оборотов, которые нарушают законодательство РФПредварительная цензура На текущей момент существует 7 статей УК, по которым могут призвать к ответственности:
    • 282 возбуждение ненависти
    • 280 экстремизм
    • 148 1 2 оскорбление чувств верующих
    • 205.2 оправдание терроризма
    • 280.1 призывы к сепаратизму
    • 354.1 реабилитация нацизма
Тогда можно будет не тратить деньги государства на цензуру и содержание аппарата, а заниматься более полезными делами, например, медициной.

11. Итого

Есть видео: 



Ссылки

Вики:

Отчет о хакатоне:

Приложение, в которое интегрирован бот:

Персональный сайт, в который интегрирован бот:

Сайт компании Роскомпьютинг: