Так себе программист
97 subscribers
184 photos
7 videos
1 file
183 links
Меня зовут Александр Троценко. Разработчик, преподаватель, к.т.н. Пишу о программировании и профессии.

10 лет в разработке desktop на C/С++

Контент: https://taplink.cc/atrotsenko
Download Telegram
import hashlib

def get_md5_hash(str):
return hashlib.md5(str.encode()).hexdigest()

s1 = input()
s2 = input()

if s1 != s2:
h1 = get_md5_hash(s1)
h2 = get_md5_hash(s2)
if h1 == h2:
print(1)
else:
print(0)


Сегодня у нас python. Давайте подумаем над выводом программы 👇

Подсказка, если не знакомы с python:
Функция get_md5_hash() возвращает хэш MD5 для входящей переменной. Функция input() запрашивает ввод пользователя с клавиатуры (что-то вроде std::cin)
👍2
Может ли программа выше при корректной работе вывести на экран "1"?
Anonymous Quiz
62%
Может
38%
Не может
Баг в операционной

В 2020-2021 годах я участвовал в испытаниях софта по диагностике аномалий сердечного ритма. Испытания проводились во время реальных операций на сердце.

На пациента крепилось 200+ датчиков, с которых в наш софт передавалась электрокардиограмма (ЭКГ). Софт в режиме реального времени решал обратную задачу и восстанавливал картину возмущений на сердце. Это должно было в моменте помочь кардиохирургу уточнить план работ.

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

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

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

Я вышел из операционной, достал ноутбук и быстро нашел в коде проблему. Глупая, элементарная ошибка, которую я сам занес и ни разу не проверил... Собрать новый дистрибутив не получалось. Чего-то не хватало, уже не помню. Оставался вариант подключиться к офису и собрать там. Но в операционной не было связи. Вынес планшет в "предбанник", раздал интернет, подключился, исправил и собрал комплект. До начала второй операции успел все выкачать и развернуть на рабочей станции... Выдохнул.

В тот день план испытаний был выполнен. Счастливая случайность: буквально накануне я приобрел сим-карту с безлимитным интернетом. На всякий случай, который оказался не всяким, а решающим.

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

Мало найти очевидное. Научиться бы видеть невероятное.

—

Читать еще:
- О рентгеновских лучах
- Протезирование сердечных клапанов: взгляд из 1985 года
🤯4👍3
#include <iostream>

int main() {
int i = 0;
std::cout << ++i;
std::cout << i++;
std::cout << i;
return 0;
}
😁4🎉2
Выше дан код C++. Какой вывод будет у программы?
Anonymous Quiz
16%
011
16%
012
60%
112
8%
123
🙏4❤2🙉2
Объект или предмет исследования

Пишу статью по научной части и снова работаю с понятиями объекта и предмета исследования, которые всегда путал.

Нет, ну реально, "объект" и "предмет" звучат как одно и то же. Я же вижу на столе "объект", но его же могу назвать "предметом".

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

Как раз на этом моменте и всплыли те самые "объект" и "предмет". Оказывается, они задают рамки. Это, собственно, видно из определений.

Объект исследования - это широкая область, процесс или явление, которое изучается в работе.

Предмет исследования - это его конкретная, узкая часть, аспект, свойства, которые непосредственно рассматриваются и анализируются.

То есть объект шире предмета, а предмет - это часть объекта исследования.

Например:
- Объект исследования: Разработка приложения заказа еды.
- Предмет исследования: Алгоритм рекомендации блюд на основе истории заказов.

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

Сохраняйте, кому предстоит защита работы в ВУЗе)

—

А вы как, работали уже с этими понятиями?

👍 - Ага
😁 - Неа
🤔 - Видимо, предстоит

#Словарь
👍5😁3🤔1
#include <iostream>

int main() {
uint8_t a = 255;
uint8_t b = 1;
uint8_t c = a + b;
std::cout << int(c);
return 0;
}


Подсказка для незнакомых с C++:
uint8_t - беззнаковый 8-битный целочисленный тип
This media is not supported in your browser
VIEW IN TELEGRAM
Принять или толстый

Да-да. Имейте в виду, если используете автоматический перевод страниц 😁

Не понятно, почему он так переводит. По коду HTML там ничего подозрительного. Видимо, он просто обзывается)

—

Кстати, это была 9 часть рубрики "Путаница в интерфейсах".
Читать еще:
- Когда фильтры - так себе фильтры
- Переключатель в Яндекс Книгах
😁4👍1👏1
#include <iostream>

int main() {
int8_t a = 127;
int8_t b = 1;
int8_t c = a + b;
std::cout << int(c);
return 0;
}


Подсказка: можно сравнить с предыдущим тестом и сделать вывод 👆
😁2👍1
Выше дан код C++. Какой вывод будет у программы?
Anonymous Quiz
36%
0
32%
128
12%
-128
20%
Неизвестно. Зависит от реализации
Какие файлы нельзя коммитить в Git

В новой статье рассмотрим 3 главных последствия бесконтрольной загрузки проектов на GitHub:

- Неадекватный рост размера репозитория
- Конфликты совместной разработки
- Разглашение секретов

Эта проблема свойственна начинающим разработчикам и проявляется часто. С опытом это проходит, но зачем ждать)

👉 Читать статью
👍4😁1
А вы говорите школьная программа не пригодится...

Вот, пожалуйста, на курсе по реверсу следующая домашка - сложение в столбик.

Пригодилась!

Какие ещё нужны доказательства? 😁
😁6🤯1
Помню, Стив Макконнелл писал, что максимальное комфортное количество аргументов функции равно 7. Ну, плюс-минус 2. Если их будет больше, то работать с функцией станет совсем сложно.

Вообще мнения колеблются от 3 до 7 аргументов. Но мысль одна: много аргументов - плохо.

Тем не менее 👇
Какое максимальное количество аргументов функции допустимо в C++?
Anonymous Quiz
0%
15
4%
127
22%
255
74%
Неизвестно. Зависит от реализации
2 минуты осталось или 2 минуты прошло?

Рубрика "Путаница в интерфейсах". Часть 10.

На картинке - виджет фокусировки в Windows. Это стандартное приложение, которое отключает все уведомления на заданное время, помогая сфокусироваться на работе.

Сейчас циферблат виджета показывает 2 минуты. Как вы понимаете эти 2 минуты? Как "2 минуты осталось" или как "2 минуты прошло"?

Я был абсолютно уверен, что 2 минуты прошло и еще 8 осталось.

Но не было бы этой рубрики. На самом деле все наоборот)

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

Я понятия не имею, почему так сделано.

Создается ощущение, что внутри это просто обратный отсчет по тригонометрической окружности от 2π до 0. Кто-то поленился сделать сдвиг на π/2 и поднять начало отсчета наверх? Или тут есть неведомый мне смысл?
Если кто-то знает, напишите)

—

А вы запутались или я один такой?

👍 - Запутался
😁 - Один такой
👍9😁2
#include <iostream>

int main() {
const char a = '7';
const char b = '0';
const int c = a - b;
std::cout << c;
return 0;
}
Doc As Code: диаграммы PlantUML в Doxygen

ИИ заставляет по-другому смотреть на разработку. Привычные подходы оказываются так себе.

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

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

Как раз в этот момент я вспомнил про текстовые нотации диаграмм, про PlantUML в частности. Точнее я их и не забывал, но пользовался редко. А тут оказалось, что ИИ отлично понимает, генерирует и редактирует такие диаграммы.

Получив какой-то опыт на нескольких задачах, я доработал свои соображения по принципу Doc As Code для C++ проектов. Если раньше там использовался только Doxygen и Markdown, то теперь добавляется PlantUML. Код, документация и диаграммы полностью состоят из текста и в полном объеме обрабатываются ИИ.

👉 Смотрите в новой статье, что получилось, и пишите, что думаете по этому поводу. Ощущаете необходимость в хорошей документации или с ИИ можно работать и без нее?

—

Читать еще:
- Прошлая статья по Doc As Code для C++
- Зачем нужны UML диаграммы?
👍5
Снова и снова сводит олдскулы на курсе по обратной разработке)

ASM, DOS, BIOS, MBR...

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

А сейчас все как-то надежнее что ли стало. Пару лет назад я менял ноутбук просто потому, что он устарел) Но за все время его использования я ни разу не менял ОС. Может, просто повезло. Может, лень возиться. Не знаю...

Но к чему это я. А вы помните, что такое MBR? 😁👇
🥰2