Pull to refresh
3
0
Олег А. @t0rr

PO, DEV

Send message

MS SQL + Telegram =?

Reading time2 min
Views14K

image Привет, Хабр!


Мы с моим приятелем fedoref занимаемся разработкой и поддержкой решений на MS SQL.


Одной из наших проблем при работе с MS SQL было то, что без MS SQL Management Studio невозможно что-то сделать или проверить. А значит — всегда нужен под рукой компьютер и VPN в сеть клиента (или что посложнее). Нас это не устраивало — мы не всегда сидим перед монитором, а ситуации ингода требуют оперативности, особенно когда дело касается высоких нагрузок в real-time системах. Поэтому мы решили сделать телеграм-бота SQL. (Поискали готовые варианты на Github, но, увы, не нашли того, что нам подошло бы).

У нас получилось
Total votes 11: ↑11 and ↓0+11
Comments17

ДИТ Москвы при проверке пропуска получает разрешение на отправку рекламы на следующие 10 лет

Reading time8 min
Views180K
Одна из вещей, которые никогда не делают пользователи — это чтение до конца лицензионных соглашений. Тем временем, читать их стоит, даже если, казалось бы, в контексте конкретного сервиса их содержание представляется очевидным.

К таким «очевидным» сервисам относится, например, сервис проверки цифрового пропуска https://i.moscow/covid. Если раньше он позволял проверить только организацию по ИНН, то с недавних пор ДИТ Москвы стал массово аннулировать пропуска горожанам за якобы предоставление неверных сведений о месте работы — и отсылать их для подтверждения места работы на указанный сервис.

При нажатии на «Если у Вас заблокировали цифровой пропуск, перейдите по ссылке» сервис выдаёт просьбу ввести сначала номер паспорта, а потом ИНН компании, сопровождаемую непримечательной галочкой:


Абсолютное большинство людей проставят её, не читая сопутствующий документ — и очень зря.

Если говорить коротко, все граждане, попавшие на этот сервис, подписываются на передачу абсолютно всех данных, которые сервис в принципе способен о них собрать — от IP-адреса до номера паспорта и названия работодателя — любым третьим лицам с практически любыми целями, включая рассылку рекламы, на срок в 10 лет.

Читать дальше →
Total votes 216: ↑209 and ↓7+279
Comments354

Современное программирование: взгляд после 25 лет перерыва или как я писал бота для Телеграм

Reading time7 min
Views29K
Задача кажется простой, когда ничего про нее не знаешь и когда решил.

В один “прекрасный” день, я понял, что мне не интересно сидеть на многочисленных форумах, а хочется создать свой канал и делиться “мудростью”.

Мне нравится Телеграм заложенными в него возможностями в том числе и ботами, поэтому канал в виде блога был создан там. Начал искать ботов, помогающих оформлять сообщения…. а так как мне хочется не нашел. Что ж, напишем сами. Умные люди посоветовали писать на Python.

Прочитал первый попавшийся в инете самоучитель на 149 страниц. Я знаком с Pascal, FoxPro, Interbase и даже (ха-ха 3 раза) 20 лет назад продавал свои программы, а потом как-то не сложилось, ушел в торговлю. Работа программистом мне сильно помогла в постановке задач для кодеров кстати. Но вернемся к Python, кажется, ничего сложного, ведь и на BASIC программировать можно было и это не мой институтский диплом с программно-аппаратным комплексом генератора поверки МИГа на Assembler. Одна проблема, всё это было давно, так что возвращаясь к заголовку — кажется что просто, потому что пока ничего не знаю про задачу, но попробовать стоит.

Я решил, что удобнее всего делать проект со смартфона на Андроид, ибо он всегда под рукой. Итак ставим:

  1. Pydroid 3 — IDE for Python 3 Собственно Питон для Андроид.
  2. @BotFather, В Телеграм устанавливаем отца всех ботов — он понадобится чтобы получить идентификатор вашего бота и сделать основные настройки.
  3. Rebootr Приложение для запуска проекта на heroku.
  4. GIT Приложение для онлайн-хостинга репозиториев.
  5. Windscribe Без VPN никуда?
  6. Termux Эмулятор терминала и среды Linux.

И что в сухом остатке? Программировать на смартфоне можно в теории, но невозможно на практике. Максимум проверить код, исправить ошибку, исследовать работоспособность.
Читать дальше →
Total votes 50: ↑39 and ↓11+28
Comments39

Нейросеть для определения хейтеров — «не, ну это бан»

Reading time4 min
Views11K
Привет!

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

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

Для работы я буду использовать Google Colab. Этот сервис позволяет запускать Jupyter Notebook'и, имея доступ к GPU (NVidia Tesla K80) бесплатно, что ускорит обучение. Мне понадобится backend TensorFlow, дефолтная версия в Colab 1.15.0, поэтому просто обновим до 2.0.0.

Импортируем модуль и обновляем.
Читать дальше →
Total votes 29: ↑23 and ↓6+17
Comments19

Herrmann Dominanz Instrument (HDI). Часть III

Reading time3 min
Views4.5K
О людях мы говорили много, пришло время подвести черту.
Эта статья будет моей последней в цикле статей про HDI: первая часть, вторая часть.
Также я решил, что в ней будут рассмотрены только следующие аспекты:


Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments1

Herrmann Dominanz Instrument (HDI). Часть II

Reading time7 min
Views6.5K
Продолжим наш разговор о людях.
Речь в этой статье пойдет больше о практических инструментах в области мотивации и делегирования полномочий персоналу. Но и какая-то часть теории тоже будет.

Несмотря на то, что первая часть была сравнительно холодно встречена, я все-таки решил продолжать публикацию. Отчасти, потому что были и теплые отзывы, а отчасти, потому что не люблю бросать начатое дело.

Материал в этой части будет опираться на предыдущую (что, согласитесь, логично). Поэтому для полного понимания терминологии — рекомендую сначала ознакомиться с вводной частью (если вы ее не читали).

В этой статье рассмотрим:


Традиционно скажу, что обратная связь приветствуется: как по первой, так и по этой части. Разумеется мне как автору больше хотелось бы, чтобы она была положительной, но конструктивной критике также буду рад.
Читать дальше →
Total votes 8: ↑8 and ↓0+8
Comments2

Herrmann Dominanz Instrument (HDI). Часть I

Reading time7 min
Views25K
Доброго времени суток, Хабр!
Поговорим о людях.

Сразу отвечаю на вопрос «Что это?»
HDI — это модель для определения профиля личности.

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

Несмотря на то, что эта типология имеет интересную и достаточно глубокую научную подоплеку, она имеет широкий потенциал практического применения для управления, мотивации и делегирования работы персоналу. Особенная ее ценность — сравнительно небольшой порог вхождения. И уже при небольшом опыте использования Вы сможете быстро находить правильные подходы к рабочему взаимодействию с людьми.

Особенно полезны знания HDI будут проектным менеджерам. Поскольку именно PM'ы должны быть руководителями «вдвойне» (если не «от бога»), поскольку именно они чаще сталкиваются с необходимостью руководить и мотивировать сотрудников, не находящихся в их прямом подчинении, а значит, не обладают в необходимом объеме административным ресурсом, что повышает риски срыва проекта из-за того, что у «непосредственный начальник Васи дал ему задание с более высоким приоритетом», или «зачем Васе делать дополнительную работу». Разумеется, подобные тонкости зависят от развития проектной культуры в организации (уровень зрелости организации), и рассматриваться в этой статье не будут, но определенную параллель можно будет провести. Также эта статья будет полезна руководителям функциональных подразделений, которые хотят отточить свои руководящие навыки и лучше понять возможности и потребности своих людей.

И я был бы совсем счастлив, если бы после прочтения этой статьи некоторые руководители поняли, почему их сотрудники делают одну работу лучше, чем другую; почему внешняя неуверенность и несамостоятельность сотрудника может на самом деле быть грубейшей ошибкой со стороны руководства в делегировании и мотивации. Любая обратная связь приветствуется.
Читать дальше →
Total votes 14: ↑10 and ↓4+6
Comments21

Предсказываем время решения тикета с помощью машинного обучения

Reading time21 min
Views6.8K

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


Под катом я расскажу о том, как проводил анализ и обучал ML модели, предсказывающие время решения оформляемых в нашу команду тикетов.

Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments6

Реализация системы GTD на основе новых возможностей Google Keep и Calendar

Reading time19 min
Views35K
This article in English: GTD Implementation via New Google Keep and Calendar Features

За последние годы Google Keep и Calendar значительно расширили свою функциональность, что дает возможность построить более удобную реализацию методологии GTD (Getting Things Done) на их основе. Ранее я уже публиковал материал с реализацией GTD на основе Google Calendar. Представленный теперь материал можно рассматривать как обновленную реализацию GTD на тех же принципах, но с использованием более современных средств.

В моем материале 2015 года в качестве базового элемента для всех пяти фаз управления рабочим процессом (Control) в системе GTD был выбран один и тот же сервис — Google Calendar. Теперь на различных фазах в качестве базовых элементов будут использоваться два разных сервиса — Calendar и Keep — в соответствии с приспособленностью их функционала для отдельных фаз.

  • Calendar теперь будет использоваться в качестве базы для фазы обзора (Review-Reflect), а также для фазы выполнения (Do-Engage).
  • Keep будет использоваться в качестве базы для фазы сбора (Collect-Capture), фазы обработки (Process-Clarify) и фазы организации (Organize).

Реализация GTD в Google Calendar (развернут список ближайших действий на неделю):


Pеализация GTD в Google Keep (категория ближайших действий):
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments18

Прием платежей с карты без юр. лица на Яндекс.Деньги

Reading time2 min
Views29K

Open source yandex money donation service


Прием платежей на Яндекс.Деньги физ. лица

  • онлайн платежи с карты, яндекса, телефона
  • добавление метки к платежу
  • получение и проверка оповещений на свой сервер
  • пример автоматизации подписки на Telegram бота

Реализация и описание под катом
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments31

Часть 2. Сначала они воруют, а когда ты побеждаешь, то тебя убивают

Reading time4 min
Views75K
Часть 1. Сначала они воруют, а когда ты побеждаешь, то тебя убивают

Реакция на первую статью была очень сильной. Во-первых, на неё отреагировал ДИТ. Их представитель появился в комментариях, а затем ответ на статью дал руководитель ДИТ. Во-вторых, на нее отреагировал интернет. Большое количество СМИ рассказали об этой истории своим читателям.

В этой статье будет разбор ответа ДИТ, парочка «ужастиков» со стороны ДИТ, раскрытие деятельности ООО «Альтарикс» и 1000 отзывов от детей и родителей. И да, у меня хорошие новости — заявление в ФАС подано.


Total votes 313: ↑304 and ↓9+295
Comments237

Почему открытые данные никому не нужны

Reading time4 min
Views27K

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



У всех этих ресурсов одни и те же болезни. Вот они:


  • Невалидность данных.
  • Разрозненность данных и отсутствие стандартов.
  • Отсутствие единого механизма поиска.
  • Отсутствие API для доступа к данным.

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

Читать дальше →
Total votes 45: ↑43 and ↓2+41
Comments57

Django Channels – ответ современному вебу

Reading time13 min
Views47K
В мире Django набирает популярность дополнение Django Channels. Эта библиотека должна принести в Django асинхронное сетевое программирование, которое мы так долго ждали. Артём Малышев на Moscow Python Conf 2017 объяснил, как это делает первая версия библиотеки (сейчас автор уже запилил channels2), зачем она это делает и делает ли вообще.

Прежде всего, дзен Python говорит, что любое решение должно быть единственное. Поэтому в Python всего минимум по три. Сетевых асинхронных фреймворков уже существует большое множество:

  • Twisted;
  • Eventlet;
  • Gevent;
  • Tornado;
  • Asyncio.

Казалось бы, зачем писать еще одну библиотеку и надо ли вообще.


О спикере: Артём Малышев независимый Python разработчик. Занимается разработкой распределённых систем, выступает на конференциях по Python. Артёма можно найти по никнейму PROOFIT404 на Github и в социальных сетях.
Total votes 44: ↑41 and ↓3+38
Comments35

Пишем умный контракт на Solidity. Часть 1 — установка и «Hello world»

Reading time6 min
Views134K

Люди, интересующиеся темой блокчейна, уже не раз слышали о проекте российско-канадского программиста Виталика Бутерина — Ethereum, а в вместе с ним и о так называемых умных контрактах. В данном цикле статей я постараюсь максимально просто описать суть Ethereum, умных контрактов, концепцию газа и показать, как пишутся умные контракты.


Smart Contract & Gas


Если на пальцах, "умный контракт" — это некоторый код, живущий внутри блокчейна. Любой участник сети может его вызвать за небольшую плату. Эта плата и называется Gas, дословно "топливо". Зачем это нужно? Для защиты майнера от злоупотребления мошенником его ресурсов.


Немногие знают, но даже в биткоине есть возможность писать эти самые контракты, но в силу некоторых причин этим мало кто занимается. Одна из главных проблем — язык Script не Тьюринг-полный и написать что-то более менее серьезное непросто (чтобы вы понимали масштаб проблемы — нет даже возможности добавить цикл). В случае с Ethereum все чуть по другому, языки Тьюринг-полные, и есть риск, что кто-то напишет контракт вида


// Это псевдокод
foo = 0;
while (True) {
    foo++;
}

Понятно, что майнер, запустивший этот контракт, закончит нескоро и по факту просто потратит в никуда свои ресурсы. Вот чтобы такого не произошло, разработчики Ethereum и придумали газ — в реальности запускать код вроде того, что я написал, будет просто экономически нецелесообразно, потому что вызвавшему придется заплатить за каждое действие контракта.

Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments16

SSH-туннели — пробрасываем порт

Reading time2 min
Views429K
Не всегда есть возможность, да и не всегда надо, строить полноценный туннель с интерфейсной парой адресов. Иногда нам нужно лишь «прокинуть» вполне определённые порты.

Тут важно понимать, что туннель можно организовать как изнутри сети, к ресурсам которой вы хотите получить доступ, на внешний ssh-сервер. Также можно организовать туннель с хоста в Интернете на пограничный ssh-сервер сети, чтобы получить доступ к внутренним ресурсам.
Читать дальше →
Total votes 93: ↑68 and ↓25+43
Comments80

Telegram MTPROTO Proxy — всё что мы знаем о нём

Reading time4 min
Views279K
image

Сразу после событий с блокировками Telegram в Иране и России, в бета-версиях мессенджера начал появлятся новый тип Proxy, а если быть точным, новый протокол — MTProto Proxy.

Этот протокол был создан командой Telegram для решения проблем обхода блокировок, но так ли он хорош?
Читать дальше →
Total votes 69: ↑60 and ↓9+51
Comments166

PyTest

Reading time24 min
Views362K

Предисловие


По историческому призванию я SQL-щик. Однако судьба занесла меня на BigData и после этого понесла кривая — я освоил и Java, и Python, и функциональное программирование (изучение Scala стоит в списке). Собственно на одном из кусков проекта встала необходимость тестирования кода на Python. Ребята из QA посоветовали для этих целей PyTest, но даже они затруднились толком ответить чем этот зверь хорош. К сожалению, в русскоязычном сегменте информации по данному вопросу не так уж и много: как это используют в Yandex да и все по-хорошему. При этом описанное в этой статье выглядит достаточно сложно для человека начинающего путешествие по этой стезе. Не говоря уже об официальной документации — она приобрела для меня смысл лишь после того, как я разобрался с самим модулем по другим источникам. Не спорю, там написаны интересные вещи, но, к сожалению, совсем не для старта.

Юнит-тестирование Python


Что это и для чего рассказывать смысла не вижу — Википедия все равно знает больше. По поводу существующих модулей для Python хорошо описано на Хабре.

Вводная по необходимым знаниям


На описываемый момент знания Python у меня были достаточно поверхностны — я писал кое-какие несложные модули и знал стандартные вещи. Но при столкновении с PyTest мне пришлось пополнять багаж знаний декораторами тут и тут и конструкцией yield.

Преимущества и недостатки PyTest


1) Независимость от API (no boilerplate). Как код выглядит в том же unittest:

Код
import unittest

class TestUtilDate(unittest.TestCase):
    def setUp(self):
        #init_something()
        pass
        
    def tearDown(self):
        #teardown_something()
        pass
        
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
        
    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        
    def test_failed_upper(self):
        self.assertEqual('foo'.upper(), 'FOo')
        
if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(TestUtilDate)
    unittest.TextTestRunner(verbosity=2).run(suite)


То же самое в PyTest:

Код
import pytest

def setup_module(module):
    #init_something()
    pass

def teardown_module(module):
    #teardown_something()
    pass

def test_upper():
    assert 'foo'.upper() == 'FOO'
    
def test_isupper():
    assert 'FOO'.isupper()
    
def test_failed_upper():
    assert 'foo'.upper() == 'FOo'


2) Подробный отчет. В том числе выгрузка в JUnitXML (для интеграции с Jenkins). Сам вид отчета может изменяться (включая цвета) дополнительными модулями (о них будет позднее отдельно). Ну и вообще цветной отчет в консоли выглядит удобнее — красные FAILED видны сразу.

image

3) Удобный assert (стандартный из Python). Не приходится держать в голове всю кучу различных assert'ов.

4) Динамические фикстуры всех уровней, которые могут вызываться как автоматически, так и для конкретных тестов.

5) Дополнительные возможности фикстур (возвращаемое значение, финализаторы, область видимости, объект request, автоиспользование, вложенные фикстуры)

6) Параметризация тестов, то есть запуск одного и того же теста с разными наборами параметров. Вообще это относится к пункту 5 «Дополнительные возможности фикстур», но возможность настолько хороша, что достойна отдельного пункта.

7) Метки (marks), позволяющие пропустить любой тест, пометить тест, как падающий (и это его ожидаемое поведение, что полезно при разработке) или просто именовать набор тестов, чтобы можно было запускать только его по имени.

8) Плагины. Данный модуль имеет достаточно большой список дополнительных модулей, которые можно установить отдельно.

9) Возможность запуска тестов написанных на unittest и nose, то есть полная обратная совместимость с ними.

Про недостатки, пусть их и не много, могу сказать следующее:

1) Отсутствие дополнительного уровня вложенности: Для модулей, классов, методов, функций в тестах есть соответствующий уровень. Но логика требует наличие дополнительного уровня testcase, когда та же одна функция может иметь несколько testcase'ов (например, проверка возращаемых значений и ошибок). Это частично компенсируется дополнительным модулем (плагином) pytest-describe, но там встает проблема отсутствия соответствующего уровня фикстуры (scope = “describe”). С этим конечно можно жить, но в некоторых ситуациях может нарушать главный принцип PyTest — «все для простоты и удобства».

2) Необходимость отдельной установки модуля, в том числе в продакшене. Все-таки unittest и doctest входят в базовый инструментарий Python и не требуют дополнительных телодвижений.

3) Для использования PyTest требуется немного больше знаний Python, чем для того же unittest (см. «Вводная по необходимым знаниям»).

Подробное описание модуля и его возможностей под катом.
Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments11

Безопасен ли Telegram? Или как я искал закладку в MTProto

Reading time4 min
Views332K
Telegram — мессенджер для смартфонов позиционирующий себя как безопасный, защищающий не только от злоумышленников, но и от гос. структур вроде АНБ. Для достижения этой безопасности Telegram использует собственную разработку — криптографический протокол MTProto, в надежности которого сомневаются многие, сомневаюсь и я.
Читать дальше →
Total votes 412: ↑401 and ↓11+390
Comments174

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity