В связи с тестированием сетевых блокировок в РФ на стороне нашего хостинг-провайдера наблюдаются проблемы с сетью. Сайт может работать нестабильно. Проблема известна, ожидаем восстановления маршрутов.
А пока видео с первого дня велопутешествия по Японии. https://youtu.be/VVx4dbBqMqg
Ночуем у реки Аракава, из неё пьёт почти всё Токио. https://youtu.be/PW70J2PmCpI
Покупаем продукты на ужин в японском магазине.
ЧАСТЬ ПЕРВАЯ.
Алиса Нестерова всегда опаздывала. Но не сегодня. Сегодня она приехала на ВДНХ за час до встречи, потому что перепутала станцию и вышла раньше. И правильно сделала.
Вместо интервью с замдиректора фабрики «Золотая молния» она увидела оцепление, полицейские ленты, две машины «Скорой» и экспертов в бахилах. У входа в павильон №57 стояла женщина в строгом костюме, размазывая тушь по щекам. Алиса узнала её мгновенно. Это была Валерия Сергеевна — жена её начальника, главного редактора Parader, и по совместительству следователь прокуратуры.
— Вы ищете понятых? — спросила Алиса с невинным видом. — Я готова.
Валерия скрипнула зубами, но закон есть закон. Через три минуты Алиса стояла в служебном помещении павильона и смотрела на тело мужчины в дорогом костюме. Он лежал на полу, завалившись на бок, рядом с разбитым манекеном и рулоном ткани. Лицо было спокойным, будто он просто уснул.
Алиса огляделась. На столе — пустая папка, разбросанные образцы, чашка с остывшим чаем. У стола — платок, а рядом с ним уголок металлического предмета с чётко различимой свастикой и надписью на немецком. Она быстро задвинула портсигар носком туфли под шкаф, а платок сунула в карман. Валерия в этот момент говорила по телефону.
«Россиянин, замдиректора, уравновешенный человек, — подумала Алиса. — И вдруг фашистский портсигар? Странно. Но потом разберусь».
Пока эксперты фотографировали труп, Алиса делала вид, что записывает показания, но на самом деле изучала стол. На нём лежал открытый ежедневник. Она хотела его сфотографировать, но в этот момент Валерия повернулась к ней.
— Ты что там трогаешь? — рявкнула она.
Алиса вздрогнула, дёрнулась, зацепила локтём стоявшую рядом стеклянную вазу. Та закачалась, Алиса попыталась её удержать, поскользнулась на разлитом растворителе и рухнула на стол, опрокинув вазу на Валерию. Вода вылилась на её костюм, а сама Алиса, хватаясь за всё подряд, выдернула из-под бумаг ежедневник.
— Ты, растяпа безмозглая! — заорала Валерия, отряхиваясь. — Ты чуть не снесла все улики! Я сейчас на тебя рапорт напишу! Ты вообще понимаешь, что ты только что уничтожила вещдоки на глазах у следователя?!
— Извините, — проблеяла Алиса, но уже листала ежедневник.
На одной странице было написано рукой погибшего: «Питер — грибы (3 дня назад). Дозу увеличить?» Ниже: «Водитель — 69, сердечко». И ещё ниже: «Директор — угрожал увольнением. Сказал, что пожалею».
Алиса сунула ежедневник в сумку, пока Валерия вытирала пиджак бумажными салфетками.
Через час они сидели в редакции Parader. Валерия устало потёрла виски и сказала:
— У него на руке укол. Микроскопический. Эксперт еле заметил, когда уже начали снимать одежду. И знаешь, что странно? Он умер через пять-шесть часов после того, как приземлился в Москве. По документам — сердечный приступ. Но у здорового мужика, который только что прошёл медкомиссию?
— Может, яд? — спросила Алиса.
— Может. Но стандартные анализы не покажут, что именно. Если это рицин, его в крови сразу не найдут, нужны спецтесты. Попадает через микроповреждение, действует через несколько часов, разрушает клетки. — Валерия взяла ежедневник, который выхватила у Алисы, и усмехнулась: — А у твоего зама в записной книжке написано «Питер — грибы». Догадайся с трёх раз.
В этот момент у Валерии зазвонил телефон. Она слушала минуту, потом нажала отбой и посмотрела на Алису:
— Только что из лаборатории. В желудке нашли остатки бледной поганки. Но это не смертельно — он их съел в Питере для бодрости, перебрал с дозой. Эксперт говорит, что от этого он бы не умер. А вот укол — да. Если это рицин, то он попал в кровь через царапину. Убийца мог быть в самолёте или в аэропорту, а зам спокойно доехал до ВДНХ и там рухнул.
Алиса перевела дыхание. Укол, грибы для бодрости, а настоящий яд — рицин. Значит, убийца не тот, кто угощал грибами, а тот, кто сделал этот укол. Она открыла ноутбук и начала писать статью для сайта Parader (parader.ru). Она перечислила всех троих из ежедневника: питерского друга, водителя (или его жену) и директора. Изложила факты: укол на руке, яд с отсрочкой, три мотива — наркотики, ревность, угроза увольнения. В конце она написала:
«У меня есть три версии, но я не знаю, какая правильная.
Помогите мне.
Кто из этих троих мог знать о яде и сделать укол?
Предложите свой вариант. Результаты — в следующем выпуске».
Привет! Хочу поделиться своим проектом, который решил возродить пару недель назад — мессенджер на Python. Не сомневаюсь, что такие штуки уже есть на просторах интернета и могут быть лучше того, что делаю я, но меня это не интересует. Мне нравится делать что-то самому, разбираться и по возможности «не зависеть» от чего-то.
Это чат с клиентской и серверной частью, который работает через сокеты. На данный момент всё происходит в консоли, но в планах GUI на PyQt5. Сервер поднимается локально, клиенты подключаются к нему и начинают взаимодействовать с помощью различных команд. Клиент должен иметь аккаунт на сервере для ряда функций, поэтому первым делом он регистрируется либо входит в аккаунт. Показываю команды пользователя ниже.
🔐 Авторизация и регистрация
/reg <юзернейм> <пароль> <пароль> — зарегистрироваться на сервере
/auth <юзернейм> <пароль> — аутентифицироваться на сервере
👤 Профиль и общение
/set_nick <никнейм> — установить отображаемый никнейм
/msg <никнейм> <сообщение> — отправить личное сообщение
/offline_sms — получить сообщения, пришедшие в ваше отсутствие
/get_users — посмотреть список пользователей
📂 Файлы
/all_files [количество] — показать последние файлы (все, если число не указано)
/send_file <никнейм> <имя_файла> [текст] — отправить файл из папки data/files
/load_file <имя_файла> — скачать файл, присланный вам
🛠️ Системные
/help — показать эту справку
/exit — выход из программы
На сервере я сделал CLI-команды для админа:
/users_dict — посмотреть словарь с пользователями
/close_server — безопасное закрытие сервера
/help — эта справка
Если честно, всё было в меру сложно. Конечно, чем больше папок и файлов, тем больше нужно помнить в голове и сложнее организовывать что-либо. Но всё же трудненько было сделать систему для обмена файлами, потому что пришлось параллельно думать об очереди сообщений, и в моменте я вообще ничё не понимал. Я ожидал, что придётся дебажить, но на удивление пришлось этим заниматься не очень-то и долго — всего день.
Хочу также затронуть некоторые технологии, которые я применял. Одна из них — хэширование (hashlib + secrets). Я применял его для регистрации и аутентификации пользователей, чтобы по сети не гуляли пароли. Однако всё равно можно перехватить запрос на авторизацию:
request = self.encode({
'type': 'auth',
'username': parts[0],
'hash': hash_b64
})
И по сути войти в чужой аккаунт, скопировав этот запрос и отправив на сервер от себя. Типа да, пароль никто не узнает, но хэш-то стырить можно. В общем, не всё идеально.
Ещё я использую потоки (threading) для параллельных задач. Например, приём и отправка запросов идут в разных потоках на клиенте. А на сервере вообще под каждого клиента свой поток запускается.
Также недавно узнал про классную штуку в Python — декораторы. Очень хорошо очищают код и местами упрощают логику. Ещё датаклассы — аналогично упрощают жизнь, особенно при перекрёстных передачах параметров в экземпляры классов, коих у меня немало.
Как уже говорил, буду делать GUI, ещё хочу уведомления о сообщениях, локальную историю переписок и шифрование. Шифрование буду делать симметричное — самый незапарный вариант, для чата с друзьями за глаза.
Кстати, я не просто так это всё делаю: хочу в будущем купить Raspberry Pi и поднять свой сервер для этого мессенджера. Ну и по мелочи: группы (может и не добавлю, так как на 10 человек незачем), мобильная версия, если прям будет желание, ну и оптимизация, безопасность и так далее.
Кто хочет посмотреть — велкам, можно даже пулл-реквесты делать)
И мой Telegram-канал, где рассказываю и про другие проекты:
... состояние не стояния 🤣
Ох уж эти "выходные"...
