DevIO | IT | GameDev – Telegram
DevIO | IT | GameDev
31 subscribers
9 photos
3 videos
1 file
18 links
Привет! Я разработчик, а это мой авторский канал про АйТи и разработку.

Автор: Панкрашов Дмитрий
Сайт: https://dev-io.ru
Download Telegram
❤‍🔥1👍1
Курица не птица, 1Сник не программист?

Слышали шутку "На паралимпиаду по программированию приглашаются программисты 1С"? Бытует мнение, что 1С - это не программирование, и есть какое-то другое, настоящее программирование, где на созвонах молоденькие девочки HRы только топлес обсуждают сложные архитектурные вопросы, а не "как сформировать отчёт". Я несколько лет работал в своеобразном франчайзи (правда мы внедряли и допиливали не 1С, а систему электронного документооборота Directum), и таки имею шо сказать за описываемое явление.

Вкратце - оно называется "прикладная разработка". Есть веб-программирование (с ним все понятно, REST'ы, CRUD'ы и т.д.), системное программирование (чтобы это не значило), и прикладное. Прикладным оно называется в том числе и потому, что обычно результаты такого программирования используются в какой-то прикладной области. Прикладное программирование тоже бывает разным. В 1С, например, пишут на своем, специальном языке, который так и называется "Язык программирования 1С". Directum старых версий тоже использовал свой собственный язык для доработок системы, в новой версии переехали на C#.

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

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

Во-вторых, скилы и доход. С опытом и преодоленными проблемами на проектах растут способности конкретного специалиста, а также его ценность для компании, что, в свою очередь, влияет на зарплату. Слышал даже, что франчайзи, занимающиеся 1С-Битрикс, со старта предлагаю ЗП в 1.5-2 раза выше, чем в вакансиях по какому-нибудь Пайтону. Чем выше зарплата и уровень жизни, тем сложнее от этого отказаться. С переходом в другую область (другой стек, язык) возможно снижение дохода на какое-то время. А ведь, возможно, до успешной попытки перехода нужно еще дойти, вложившись в свое обучение.

В-третьих, получаемые эмоции. Тут лучше посмотреть на картинку к посту, вопросы отпадут сами собой.

Программист - это тот, кто пишет программы на языке программирования. 1С - язык программирования, а значит, по формальному определению 1Сники - программисты. Если же назвать программистами только тех, кто пишет на low-level, то мы все не программисты, потому что писать надо в машинных кодах. А надо ли писать на 1С - решать вам.

#мюсли
👍2🔥1
Про то, как ChatGPT заменит программистов

Любителям рассказывать о том, что скоро ИИ заменит <профессия_name>, посвящается.

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

Как можно провалидировать написанный код, если ты не программист, а, скажем, маркетолог? Как понять, что учтены все пожелания? Что код отказоучстойчив? Что он обрабатывает ошибки? А никак. Либо применять выдачу ChatGPT как есть, и смотреть взлетит или не взлетит. Либо разбираться в вопросе. Вот тут автор хорошо постебал эффективных-кабанчиков-заменяльщиков-всех-на-ИИ.

Бытовая техника не заменила уборщиков, мультиварки не заменили поваров, suno не заменил исполнителей и композиторов, так что не ссыте.

#мюсли
👍2
Про No-Code и RPA

Вот представьте, сидят какие-то люди, например в фирме 1С, и эту самую 1С пишут. Или в Директуме. Или в <company_name>. А зачем? Ну ясен пень, чтобы продать какому-нибудь бизнесу. Но не просто продать и забыть, а продать хитро. Сначала лицензию. Потом обслуживание. Доступ к обновлениям. Ну а как вы хотели? Сливочное масло само в холодильнике не заведется, и на колбасу не намажется.

Однако бизнес-дяди, как-никак, с калькулятором, или на спичках, считать всё-таки умеют. И возникает у бизнес-дядь вопрос: может ли какой-нибудь IT-падаван Хуан снизить затраты на обслуживание ПО (по-умному это называется стоимостью владения), чтобы себестоимость производимого кубометра продукции тоже была пониже, а прибыль, как следствие, повыше? И тогда бизнес-дяди ищут решения вопросов. А в директумах и 1Сах сидят маркетологи, которые тоже жрать хотят, и хотят они бизнес-дядям рассказать, что, мол, есть решение! Мы его вот прямо вот сегодня для вас родили. И называется оно (блядь, вот аж самому смешно) No-Code разработка. Это как разработка, только без кода. Не дай Бог конечно эти маркетологи до порнохаба доберутся. А то и там no-penis лысых из brazzers ждать недолго.

Короче, что такое no-code? Это когда у вас есть система, но каждому бизнес-дяде надо ее под свои уникальные потребности кастомизировать (иначе бизнес работать не будет). И эта кастомизация делается с помощью настроек разной степени удобности. Где-то переменные поставляются, где-то галочки включаются. Говорят, что это как бы "визуальное программирование". Мышкой, мол, блоки на схеме таскаешь, а система эту конфигурацию считает, и по ней все сделает. Старое слово "настройка" продали под новым соусом, браво!

Но на этом приключения не заканчиваются. Есть еще RPA-автоматизация. Это когда, цитирую "рутинные процессы выполняют программные роботы, а сотрудники освобождают время для творчества и созидания". В демо-примерах приводятся откровенно всратые кейсы, по типу "робот может за вас открыть почту и нажать кнопку". Чем они при этом от автокликера отличается, конечно же не объяснено. Да и в целом роботы помогают компании повышать ROI (коэффициент возврата инвестиций - сколько рублей вы получаете на 1 вложенный рубль). Короче, роботы делают бизнес эффективным, и позволяют сотрудникам не заниматься рутиной. Потому, что чем уволенный за ненадобностью человек будет заниматься Кабан Кабанычу как-то пофиг.

Что характерно - среды разработки RPA - это тоже No-Code среды, с отдельными блоками, где код все-таки можно и пописать.

Вливаться в эти стройные ряды, или нет - решать вам.

#мюсли
👍1
CodeWars #1

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

Например, CodeWars. Выбираете язык, сложность, и вперед. Есть еще LeetCode, HackerRank.

Когда-то я решал задачки на CodeWars, но потом надоело. Возможно, было бы неплохо снова к этому вернуться, чтобы заставить мозг поработать.

На сегодня предлагаю решение одной из задач.

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

Решение:
Самым банальным решением для такого сценария было бы написать цикл, однако в питоне у строки есть метод join(), который может принять в качестве аргумента список, и "склеить" элементы между собой, используя строку, на которой join был вызван.

",".join([1,2,3]) # 1,2,3


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

Для этого, во-первых, используем функцию isinstance(), она принимает два аргумента. Первый - объект какого-то типа, второй - тип, на соответствие которому мы хотим проверить объект. Функция вернет True если тип совпадет, и False, если нет. Также мы проверим, что список не пустой. В Python пустой список автоматически приводим к False, что исключает необходимость проверять на пустоту путём сравнения длины списка с нулём.

Итоговая функция на картинке к посту.

#codewars #python
👍1
CodeWars #2

Продолжаем решать задачи с CodeWars.

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

Например:

Дан список [34, 15, 88, 2], мы должны вернуть 2.
Дан список [34, -345, -1, 100], мы должны вернуть -345.
Список на пустоту можно не проверять.

В стандартной библиотеке Python предусмотрены различные функции, в том числе математические. В частности есть функции min() и max() для поиска минимального и максимального значения в списке. Функцией min() мы и воспользуемся. Наше решение будет простым, и лаконичным.

def find_smallest_int(arr):
return min(arr)

#codewars #python
👍1
Python для троллинга Java\C#\PHP разработчиков

Как известно, объектно-ориентированное прогаммирование, позволяет создавать объекты, вступающие друг с другом в отношения родитель-наследник.

Например:

class Cat:
pass

class BlackCat(Cat):
pass


Здесть класс BlackCat будет наследником по отношению к классу Cat. Зачем это нужно? Во-первых, на основе наследования легко работать с дополнением. Нам не нужно полностью копировать класс Cat, чтобы добавить в него что-то новое. Мы можем наследоваться от него.

В языках со строгой системой типов вы уже на этапе компиляции получите ошибку, если передадите объект не того типа в метод или функцию. Python же язык с достаточно специфическим отношением к типобезопасности, и, хотя тайп-хинты (возможность указать, что вот в эту функцию вот этим аргументом передайте, пожалуйста, вот такой вот тип) существуют, ничто не мешает творить непотребства.

В частности, в Python, для проверки является ли некоторый наследником по отношению к другому типу, можно использовать функцию issubclass(). Она принимает два аргумента - проверяемый на родство тип, и предполагаемый родитель.

Пример 1:

class Cat:
pass

class Dog:
pass

issubclass(Dog, Cat) # False - Собака не наследует кошку


Пример 2:

class Cat:
pass

class Dog(Cat):
pass

issubclass(Dog, Cat) # True - собака воспитана кошками


Собственно в Python есть возможность переопределить это поведение с помощью специального метода subclasshook, реализуемого в родительском классе.

Пример 3:

from abc import ABC

class Cat(ABC):
def __subclasshook__(cls, *agrs):
print(cls)
return True

class Dog:
pass


issubclass(Dog, Cat) # True
issubclass(int, Cat) # True - видели когда-нибудь целочисленных кошек?


Спасибо, Гвидо, что дал нам возможность жирно потроллить джавистов!

#python
😁2
CodeWars #3

Решаем следующую задачу: нужно подсчитать количество гласных в строке, которая нам дана в качестве аргумента. Считаем, что символы a, e, i, o, u это гласные. Входная строка будет состоять из символов в нижнем регистре (это важно, потому что в некоторых случаях требуется данные привести к какому-то виду) и пробелов.

Задача достаточно простая - берем список гласных, идем циклом по строке (да-да, по строкам в Python можно ходить циклом, на каждой итерации мы получаем следующий символ), проверяем входит ли очередной символ в список искомых. Если да - инкрементируем счетчик.

def get_count(sentence):
# Список гласных букв
vowels = ["a", "e", "i", "o", "u"]

# Счетчик, инициализируем нулём
count = 0

# Цикл по строке, допустим для строки `hello` тело цикла выполнится пять раз
# На каждой итерации в переменной letter будет буква из строки
# Сначала h, потом e, потом l, и т.д.
for letter in sentence:
# Оператор in проверяет вхождение элемента letter в список vowels
# Если элемент присутствует - тело if выполнится
if letter in vowels:
# Инкрементируем (увеличиваем на 1) наш счетчик
count += 1

# Возвращаем значение счетчика
return count


А можно ли лаконичнее? Да!

def get_count(inputStr):
return len([x for x in inputStr if x in 'aeoiu'])


Здесь использован так называемый list comprehension - специальный синтаксис, который позволяет в одну строчку кода описать создание последовательности. Базово, он состоит из выражения
[x for x in inputStr]


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

digits = [1,2,3,4]

# Квадраты чисел в digits, операция ** (две звездочки) - возведение в степень
squares = [x**2 for x in digits]


Соответственно, как и в теле цикла, в list comprehension можно дописывать условие, чтобы отбраковать те элементы, которые нам не нужны. Делается это с помощью if.

digits = [1,2,3,4]

# Квадраты чисел в digits, операция ** (две звездочки) - возведение в степень
# В блоке if мы отбираем x только если он четный (% - остаток от деления, если он равен нулю - берем)
squares = [x**2 for x in digits if x % 2 == 0]


Таким образом, выражение из второго примера даст нам список символов, которые точно входят в интересующий нас диапазон (aeoiu).

[x for x in inputStr if x in 'aeoiu']


Остается взять его длину с помощью функции len(), и вернуть. Кстати, знаете, почему значение, возвращенное функцией len() не проверяется на равенство с нулём, а просто возвращается как есть? Дело, опять же, в системе типов. Ноль приводится к False для целых чисел, все остальное - к True. Да и сами константы True и False в Python это целые числа. True = 1, False = 0. Поэтому выражение 1 + True будет равно 2.

#codewars #python
👍1
Codewars #4

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

Пример: для списка [19, 5, 42, 2, 77] функция вернет 7 (5 + 2).

Итак, у нас есть функция:
def sum_two_smallest_numbers(numbers):
pass


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

first_num = 0
second_num = 0
for i in numbers:
if not first_num:
first_num = i

if first_num < i:
first_num = i

for i in numbers:
if not second_num:
second_num = i

if second_num >= first_num and second_num < i:
second_num = i


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

Есть решение лучше - сортировка! Отсортируем список по возрастанию и просто вернем сумму двух первых элементов!

def sum_two_smallest_numbers(numbers):
numbers = sorted(numbers)
return numbers[0] + numbers[1]

#codewars #python
👍1
Про настольные приложение

Когда я начинал изучать C# в университете - мы начинали с написания настольных приложений. Тем более что встроенный WIndows Forms был вообще не сложен в освоении. И даже в методичках по базам данных были примеры того UI, который нужно реализовать. Сейчас, в связи с тем, что появилось некоторое разделение на front-end и back-end писать UI (как по мне) стали больше для web-приложений. Но иногда бывает нужно сделать настольное приложение. В статье рассказываю о том, как сделать такое GUI-приложение в golang.

А вообще, если интересует UI для Python но неохота заморачиваться с HTML - можно посмотреть в сторону PyQt. Qt - кроссплатформенный фреймворк. Его можно много куда затащить (даже в тот же golang). Из минусов - скорее всего снова придется писать много кода.

#golang #gui
👍1
Интересный случай

Пишет мне как-то Женя. Этой мой коллега, вместе мы работали еще в Астраханьэнерго. Сейчас он в Берлине. Скидывает, значит, скриншот переписки с неким человеком. Человек интересуется - знает ли Женя владельца аккаунта на гитхабе. И скидывает ссылку на мой аккаунт, со словами, дескать, этот Дмитрий взял заказ и деньги, а теперь на связь не выходит!

Ну что за дела, думаю. Деньги я люблю, работать нет, тут все сходится. Но чтобы я взял деньги и на связь не выходил - отродясь такого не было. Если бы фигню всякую писал - то да, похоже, а так - я не я, лошадь не моя. Будем разбираться. Прошу Женю дать страдальцу мой контакт для прямой связи. Пишет. Разместил, мол, заказ на Хабр.Фрилансе, помощь была нужна с ВКР (выпускная квалификационная работа). В заказе был указан телеграм-аккаунт, куда постучался потенциальный исполнитель. Представился Дмитрием, показал документ-портфолио, со ссылкой на МОЙ гитхаб аккаунт, взял десять тысяч рублёв, а теперь на связь не выходит, и везде заблокировал.

Немного выяснив обстоятельства, и даже списавшись с предполагаемым виновником (мне он, кстати, ответил, сказав что ни у кого ничего не брал и вообще это бред, но так уж и быть, свяжется с потерпевшим, дабы не порочить свое честное имя), расскажу про типичные совершенные ошибки:

1. Общаться с исполнителем за пределами фриланс-площадки.
Исполнитель удалит переписку, и всё. Ничего не докажешь, если только ежесекундно не делать скрины. Но кто так делает? Никто. Общаться в tg можно, но все важные детали по проекту\заказу лучше обсуждать там, где условия контролируемы. Кроме того, фриланс-площадки охотнее встанут на сторону заказчика, чем исполнителя. Деньги-то им заказчик несет.

2. Переводить деньги на карту, да еще и из банка другой страны.
Чарджбэк в пределах РФ для перевода в пределах банка не всегда получится сделать, что уж про международный банковский перевод говорить. Денюшка ушла - всё.

3. Не пользоваться безопасной сделкой.
Безопасные сделки для этого и придуманы. Заказчик переводит сумму на счет фриланс-площадке, выступающей в роли брокера. Исполнитель знает, что заказ оплачен, но деньги он получит после сдачи работы. Страховка и для заказчика и для исполнителя.

Ну и на последок. Как понять, что кто-то выдает себя за меня? Топ-5 red flag`ов:
1. Слишком вежлив, сообщения без мата.
2. Ни разу не ругал Директум.
3. Маленькая сумма сделки.
4. Не шлет мемы с Буруновым в переписке.
5. Ни разу не призвал уверовать в Директум.

#мюсли
🔥1
Про гарантии трудоустройства

Есть на IT-курсах (но не на всех) такая фишка - вы, мол, курс наш пройдите, а мы вас трудоустроим. Мамой клянусь, век созвонов не видать! Возможность востребованная, и даже может служить киллер-фичей. Джунам, ни дня не работавшим в IT, устроиться тяжело. Работодатели учить никого не хотят. Тем более, что на обучение нужно тратить время, деньги, и платить сотруднику зарплату, пока тот учится.

Если работодатель предоставляет такую возможность, чем это хорошо для сотрудника:
- Учиться за счет работодателя, получая при этом заработную плату
- Получить знания и навыки, которые нельзя отнять при увольнении

Чем может быть плохо:
- Работодатель может заключать ученический договор, предусматривающий либо необходимость отработать определенное время (например 3 года) в компании, либо вернуть деньги, затраченные на обучение при увольнении, в случае, если сотрудник увольняется раньше оговоренного договором срока

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

Я же хочу рассказать о другом. О том, почему лучше не верить гарантиям трудоустройства.

Во-первых, потому, что трудоустроят вас явно не в Google/Yandex/Sber/Ozon, а на галеру, которая согласна брать начинающего специалиста без внятных перспектив его развития. Ну и с соответствующими условиями оплаты.

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

И в третьих. Это ваша трудовая биография. Расскажу случай из практики. Проводили собеседования на должность C#-разработчика. Один из кандидатов прошел собес, все нормально, ничем не выделялся. Начали оформлять, и полезли звоночки. 

Первым звоночком была опечатка в заявлении о приеме на работу. Человек написал “Прошу принять на должность инжИнера”. Я вот этот текст пишу, и у меня слово инжИнер подчеркнуто красным. Неужели в Ворде так сложно исправить? 

Второй (и собственно последний) звоночек - выписка из электронной трудовой. Человек за 4 года сменил примерно 20 мест работы, работая везде от 2-х недель до 2-х месяцев. А последним местом работы было троллейбусное депо, и должность “Водитель троллейбусов”. Причем, компании, указанные в резюме на HeadHunter, вообще не совпадали с записями в трудовой. На вопрос “Что это, собственно, за Харитон Ульяна Йозеф Николай Яков?” внятных разъяснений не последовало, а посему в заключении трудового договора было отказано.

#мюсли
❤‍🔥1👍1
Про трудоустройство и работодателей

Регулярно читаю статьи про рынок труда на Хабре. Если вы читаете новости, то наверняка видели в ленте что-нибудь про "дефицит IT-специалистов", который достигает значений чуть ли не в 1-1.5 миллиона человек. С другой стороны, на том же Хабре регулярно выходят статьи про ненужность и неприкаянность специалистов уровня junior на рынке труда.

Ситуация как в анекдоте:
- Рядовой Иванов! Поднять танк!
- *Иванов пытается поднять танк* Товарищ прапорщик, поднять танк возможности не имею!
- Ну а что ты думал! 40 тонн!

Собственно, изучив разные материалы, иногда отражающие диаметрально противоположные точки зрения на вопрос, читатель нередко может остаться в замешательстве относительно своих шансов начать карьеру в IT.

Что тут хочется сказать:

1. Всё не прям вот хорошо, но и не то что бы очень плохо. Как в сериале "Чернобыль" - не отлично, но и не ужасно. Есть на рынке как небольшие компании, набирающие джунов за мелкий прайс, так и крупные, проводящие стажировки (иногда даже оплачиваемые).

2. Конкурировать всё равно придется. Рынок не резиновый, как бы вдруг не казалось обратное. Когда возникает вопрос о том, почему у айтишников нет своего профсоюза, то ответ звучит примерно так: "Зачем нужно защищать свои трудовые права специалисту, который за 2 недели может найти новую работу с той же ставкой, или выше?". А потом вдруг выясняется, что крупные работодатели могут проводить сокращения, что приводит к увеличению предложения на рынке, и конкурировать уже приходится не с аналогичными джуниорами, а с людьми, имеющими опыт работы.

3. Факт трудоустройства не есть гарантия того, что ваша карьера тут же пойдет в гору. По многим причинам. Особенность работы в IT - постоянно приходится разбираться в чем-то, с чем ранее не имел дела. Прошел, например, курс по C#, а надо еще и с базами данных уметь работать, и с API, и вообще что-то всё тормозит, посмотри в чем дело. Дело-то может быть в чем угодно, от неправильного MTU на сетевом интерфейсе роутера, или, например, вхлам устаревшем сервере, до rate limit`а на внешнем IP-адресе. Универсальный совет, как всегда, дать сложно, но всё же - ищите тестовые задания. На github есть целые репозитории с разбивкой по направлениям. Решайте, смотрите записи собеседований на аналогичные позиции, пусть даже с другими языками программирования. Часть вопросов пересекается, и нелишне будет пораскинуть мозгами на тему "А как это работает в том языке, который изучаю я?".

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

1. Проверьте компанию по ИНН\ОГРН. Поищите на сайтах-агрераторах информации о компаниях текущее состояние. Большинство сайтов предоставляет информацию за деньги, но можно найти интересующую информацию бесплатно.

Стоит обращать внимание на:
- Списочную численность. Если численность сотрудников не сходится с информацией от налоговой по данным агрегатора, и компания существует как минимум в течение нескольких лет - скорее всего сотрудники оформлены по ГПХ, либо как ИП. Тут следует понимать, что ИП\ГПХ не есть трудоустройство, и договор ГПХ с физ.лицом, или договор с ИП не равны трудовому договору (ТД). К трудовым отношениям (оформленным по ТД) применяются нормы Трудового кодекса, который защищает работника, например от невыплаты зарплаты. Если работодатель не выплачивает работнику зарплату 2 недели и более - можно прекращать работу, уведомив работодателя о вынужденном простое, по его же вине. В случае с ИП\ГПХ - идите в суд и там бодайтесь за свои деньги.

- Доход, прибыль. Базовая метрика, вообще-то. Доход - всё что заработали, прибыль = доход - расход. Если прибыть около нуля - это конечно не фонтан, но и не ужас. Компания на плаву. А вот если в графе "доход" по нулям, ну или там максимум на мороженное - это сразу ахтунг!

- Судебные дела. Тут можно посмотреть есть ли с кем-нибудь споры, в чем их суть, и как они решались.
👍2
- Налоги и сборы. Вот тут можно примерно прикинуть среднюю зарплату. А некоторые сервисы ее даже за вас посчитают. Давайте для примера возьмем какую-нибудь организацию. Поищем информацию о ней в разных источниках. Что мы видим?

- Среднесписочная численность сотрудников: 1 человек. За всех бедняга пашет.
- Чистая прибыль\выручка: 0\0. Видимо сотрудник болел.
- Налоги и взносы: 1.54 тыс. руб. Примерно от 30% до 50% (примерно - потому что в налогах я такой же профи как и в жонглировании горящими медведями) вашей зарплаты работодатель платит в качестве взносов в ФСС\ПФР\и т.д. Получается (грубо), что ЗП+13% (НДФЛ)+30% (взносы) = полная стоимость сотрудника. Если 1054 рубля - это 30% зарплаты одного сотрудника, то 100% = (1054 * 30) / 100 = 3153. И минус 13% - 3056 рублей в месяц. А это значит, что если там больше одного сотрудника, то выплаты серые. И скорее всего нерегулярные, судя по дырке в графе "доходы".

Классная компания, да?

А если еще и по учредителям посмотреть, то выяснится, что открытых, и затем ликвидированных компаний там больше, чем вшей на уличной дворняге.
👍1
Среднее и медиана

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

Что делать в таких случаях? Использовать перцентиль! Его еще процентилем называют, но мне моя версия больше нравится. Перцентиль - значение, которое случайная величина не превышает с указанной в процентах вероятностью. Объясню на примере с теми же зарплатами. Берем все зарплаты, заносим их в массив. Массив сортируем по возрастанию чисел. Берем значение среднего элемента массива.

[10_000, 10_000, 10_000, 10_000, 1_000_000]


Тут и так понятно, что значением будет 10'0000. Получается, что 50% людей в выборке имеет зарплату меньше, либо равную десяти тысячам. А остальные 50% больше, либо равную. Массив же отсортирован. Таким вот нехитрым образом мы нашли 50й перцентиль, его еще называют медианой. И вот теперь-то мы видим более реальную картину в распределении доходов по нашей выборке!

А если тот же самый показатель посчитать, например для 90% людей в выборке? Это будет 90-й перцентиль. Правда есть один нюанс. Если количество элементов в выборке таково, что нет возможности взять, например, средний, то значением перцентиля берется среднее арифметическое двух соседних элементов. То есть в массиве из 10-ти чисел 50-м перцентилем будет среднее арифметическое 5 и 6 элементов.

В нашем случае будет среднее арифметическое между 10'000 и 1'000'000, но ничего не поделаешь, такая уж тут выборка.

Я использовал перцентили, когда нужно было протестировать свои сервисы, и понять за какое время они в целом отработают на разных объемах данных. Алгоритм был таким:
1. Выбирались несколько сэмплов данных, разного объема. Например 1, 5, и 10 Мб.
2. Для каждого сэмпла выполнялось 100 запусков с замером времени.
3. По каждому сэмплу строились 50, 90, и 95 перцентили.
4. Итоги сводились в таблицу, где было видно, за какое время половина (50-й перцентиль) запросов обрабаботаются, а так же за какое время 90 и 95 процентов пользователей (90-й и 95-й перцентили соответственно, т.е. подавляющее большинство), смогут получить ответ.

Ну и без Python никуда! Используйте numpy, он тоже не лыком шит.

np.percentile([1,2,3,4,5], 50)
np.percentile([1,2,3,4,5], 90)
np.percentile([1,2,3,4,5], 95)
👍2
Про демонов и петушар

Давно не писал, но тут жизнь подкидывает. Помните пост про некоего разработчика, кидающего заказчиков на деньги? Так вот, пишет мне сегодня еще один товарищ. Спрашивает, мол, ваш ли это гитхаб, и ваш ли это аккаунт телеграма. И тут и там dmitry8912, так что да, подтверждаю, что мой. "А что же вы мне не отвечаете? Деньги взяли, и дурачка включаете" - спрашивает человек.

И тут я понимаю, что ситуация повторяется один в один.

Если кратко - после первого случая указал на страничке в гитхабе свой аккаунт в телеграме, и написал в биографии, что у меня только один tg-аккаунт, а если кто-то другой выдает этот гитхаб за свой - то он мошенник. Написал, да не проверил, что в ссылке на аккаунт tg перепутал местами две буквы - вместо dmitry8912 написал dmirty8912. Чем собственно и воспользовался один нехороший человек.

Итак, пациент:
- @dmirty8912 - тут особое внимание на порядок букв
- @dm_copy - старый аккаунт

Дмитрий, как он сам себя называет, Копылов.

Суть развода следующая:
1. Жертва размещает заказ на какой-нибудь площадке (или в чате).
2. Жертве в ЛС приходит наш пациент, говорит, что возьмется за задачу, договаривается о деньгах.
3. Возможно наш пациент - гражданин РФ. Об этом косвенно свидетельствует то, что двое пострадавших, с которыми я общался, не были гражданами РФ. Оно и понятно, кидать заграничных заказчиков безопаснее, тем более что законы и МВД везде работают по-разному.
4. Пациент принимает оплату межбанковским переводом (одна известная мне карта обслуживается банком Уралсиб), либо в крипте (тут вообще без комментариев).
5. После получения оплаты происходит классический кидок в виде отсутствия ответов на сообщения, удаления чатов, и т.д.

Что тут сказать?

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

И, да, Дима Копылов, или как там тебя, с новым годом!

Прикрепляю пару скринов переписок с согласия автора.
😱3
Про геймдев

Вот есть у меня слово "геймдев" в названии канала, а постов про геймдев как бы и нету. Непорядок!

Дети 90-х, их еще называют "миллениалы", играли в Dendy, Sega, Playstation 1, и на ПК в компьютерных клубах. Эти игры были необычным развлечением, они приковывали внимание, давали эмоции. Помню, как играл в игры по мотивам фильма "Терминатор" на Dendy и Sega, очень любил играть в Dune 2: The battle for Arrakis, первая RTS как-никак.

Если я оставался дома, не шел в школу потому, что болел, то мама, уходя на работу убирала блок питания от приставки подальше, но я его находил, и успевал зарубиться в пару-тройку миссий до возвращения родителей. Играть мне (да и не только мне) очень нравилось. А когда у меня появился ПК - тут история приобрела совсем другой оборот. Игры для ПК были насыщеннее, интереснее. До сих пор время от времени перепрохожу Vampire the masquerade: Redemption. ПК давал разработчикам больше возможностей сделать красивую и интересную игру. Помню, когда нашел на базарчике с дисками игру “Блицкриг” - стратегию на тему второй мировой от российский разработчиков. Она была невероятна. 3D (хоть и псевдо 3D на самом-то деле) графика, взаправдашние танки, рычащие моторами, ползли по дорогам. Артиллерийский расчеты, суетясь у орудий, открывали огонь, и где-то там, на территории противника, скрытой туманом войны, гулко бухал очередной снаряд. И таких эпитетов, если углубиться в воспоминания, можно на целый сборник рассказов в стиле Пришвина написать.

В то время доступа в интернет у меня ещё не было, и узнать о новых играх, поиграть в них можно было в основном через друзей и друзей друзей. А ещё выпускались печатные журналы. Страна игр, Игромания, Лучшие компьютерные игры, Хакер, и чего-то там ещё. К ним прилагались диски с демо-версиями игр. Да и когда доступ в интернет появился - в нём ещё не было такой прорвы информации, сайтов, обзоров всего и вся.

Так вот, о чем это я - играть в компьютерные игры было и остается для меня сегодня классным способом провести время. А в детстве я мечтал, что вырасту, и буду сам делать игры! Но, ожидание != реальность.

Сегодня стать разработчиком игр может любой желающий. Да чего там, на Unity даже детей учат. С бесплатными ассетами из Unity Store и ChatGPT наперевес можно за некоторое время склепать что-то относительно играбельное.

Только вот проблема, что “что-то относительно играбельное” склёпано уже в разных вариациях всеми, кем только можно, не раз и не два. Ожидать, что новое видение какого-нибудь консольного тенниса “выстрелит”, так же логично, как и ожидать, что после написания Hello, World вас возьмут в Google с зарплатой 300к\наносек.

Я, в некотором роде, тоже жертва пропаганды. Начитавшись постов про “заработал мульён на Я.Играх” решил сделать свою игру. Правда ни с одним 3D-движком я не знаком. Зато набрел на интенсив от Skillbox, и по нему, кое-как, с помощью ChatGPT и такой-то матери, сделал что-то играбельное.

Правда, выкладывать не стал. Посмотрел на свой шедевр, да подумал “а кому будет в него интересно играть, если даже мне в него играть неинтересно?”.

Вывод: сделать игру 20 лет назад было сложно, потому что требовались специфические знания. Сегодня порог входа ниже, тот же Unity не предъявляет каких-то сверхъестественных требований к разработчикам (правда, в результате из-за неполного понимания того, как и что работает, даже крестики-нолики могут занимать 1ГБ), а вот потребители игр должны заинтересоваться.

Напоследок рекомендую прочитать книгу “Кровь, пот и пиксели”, про то, как люди реально работают в индустрии создания видеоигр. Интереснейшее чтиво.
👍4
Media is too big
VIEW IN TELEGRAM
Про мини-курс

Так, я ж тут пару курсов запилить собрался! И один даже начал делать! Курс будет про создание своего мессенджера с помощью Python и Quasar Framework.

За несколько уроков разберем:
- Как работают веб-приложения
- Сделаем фронт мессенджера на Quasar Framework
- Сделаем бэк на Python с помощью FastAPI
- Прикрутим к бэку СУБД (PostgreSQL) и добавим шифрование сообщений

Сейчас у меня на 80% готов первый урок. Его осталось озвучить - а мне всё время свой голос не нравится.

Поэтому пока что держите спидран первого урока.
🔥4👍1
Про информационную безопасность

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

Помню, еще в школе, кто-то из одноклассников принес распечатки статей про Linux (это ж операционная система для хакеров!). А в журнале Хакер каждая статья, как булочка, щедро посыпанная кунжутом, была также щедро сдобрена словечками “ламер”, “прокся”, “хэндл”, и другими, вызывающими благоговейный трепет, при полном отсутствии понимания значений этих слов.

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

Что тут можно посоветовать? Есть несколько бесплатных ресурсов:
- https://www.hackthebox.com/ - образовательный ресурс, позволяющий вам в живом режиме потренироваться что-то взламывать, такой codewars для хакеров.
- https://crackmes.one/ - крякмисы. Программы, созданные, чтобы их взломали. Я и сам про парочку несложных писал тут и тут.
- https://cryptohack.org/ - криптография. По-сути направленный больше на понимание использующихся сегодня криптографических системы ресурс. Однако, от этого не менее интересный.
🔥2