Релиз Django 5.0
Автор: Иван Ашихмин
Приветствую.
4 декабря, Django Team представили релиз фреймворка Django 5.0.
Примечания к выпуску подробно охватывают все изменения и новые функции, но вот несколько ключевых моментов:
- Значения по умолчанию, вычисляемые базой данных, позволяют определять значения по умолчанию, вычисляемые базой данных, для полей модели.
- Продолжая тенденцию расширения Django ORM, сгенерированное поле модели, позволяет создавать столбцы, сгенерированные базой данных.
- В шаблонную систему была добавлена концепция группы полей для упрощения отображения полей формы.
Список изменений Django 5.0 на русском языке
Установить Django 5.0 можно из PyPi или используя pip:
Автор: Иван Ашихмин
Приветствую.
4 декабря, Django Team представили релиз фреймворка Django 5.0.
Примечания к выпуску подробно охватывают все изменения и новые функции, но вот несколько ключевых моментов:
- Значения по умолчанию, вычисляемые базой данных, позволяют определять значения по умолчанию, вычисляемые базой данных, для полей модели.
- Продолжая тенденцию расширения Django ORM, сгенерированное поле модели, позволяет создавать столбцы, сгенерированные базой данных.
- В шаблонную систему была добавлена концепция группы полей для упрощения отображения полей формы.
Список изменений Django 5.0 на русском языке
Установить Django 5.0 можно из PyPi или используя pip:
pip install Django5.0
🔥3
Обратите внимание! При обновлении существующего проекта на более ранних версиях Django, удостоверьтесь, что используемые вами сторонние библиотеки поддерживают актуальную версию.
С выпуском Django 5.0 поддержка Django 4.2 завершена. Последний минорный релиз с исправлением ошибок, 4.2.8, был выпущен сегодня. Django 4.2 является версией с долгосрочной поддержкой (LTS) и будет получать исправления по безопасности и устранение потери данных до апреля 2026 года. Всем пользователям рекомендуется обновиться до этой даты, чтобы продолжать получать исправления для проблем безопасности.
Django 4.1 завершил свой период дополнительной поддержки. Последний релиз с исправлением безопасности (4.1.13) был выпущен 1 ноября. Всех пользователей Django 4.1 настоятельно рекомендуется обновиться до версии Django 4.2 или более поздней.
Пост на сайте
Поддержать проект
#Django #список_изменений #Новости #Django_5 #Django_4 #новая_версия #релиз
С выпуском Django 5.0 поддержка Django 4.2 завершена. Последний минорный релиз с исправлением ошибок, 4.2.8, был выпущен сегодня. Django 4.2 является версией с долгосрочной поддержкой (LTS) и будет получать исправления по безопасности и устранение потери данных до апреля 2026 года. Всем пользователям рекомендуется обновиться до этой даты, чтобы продолжать получать исправления для проблем безопасности.
Django 4.1 завершил свой период дополнительной поддержки. Последний релиз с исправлением безопасности (4.1.13) был выпущен 1 ноября. Всех пользователей Django 4.1 настоятельно рекомендуется обновиться до версии Django 4.2 или более поздней.
Пост на сайте
Поддержать проект
#Django #список_изменений #Новости #Django_5 #Django_4 #новая_версия #релиз
🔥3
Какой метод используется для сравнения двух объектов в Python, учитывая как их значения, так и их типы?
Anonymous Quiz
35%
equals()
19%
compare()
41%
__eq__()
5%
is_same()
В ближайшее время в рамках рубрики «Код в мешке» у нас выйдет пост о декораторах. А какую тему о Python вы бы хотели разобрать следом?
Anonymous Poll
9%
Области видимости
7%
Изменяемость/неизменяемость типов данных ч. 2
37%
Основы ООП ч. 1
33%
Сборщик мусора
14%
Хэшируемость объектов
0%
Напишу свой вариант в комментариях
🤔4🔥2
Оглавление для серии постов рубрики "Вести с полей стажировки".
Для удобства навигации по предстоящим материалам, в данном посте будут публиковаться ссылки на сообщения.
Тестовое задание для стажировки
Прошёл отбор на стажировку
Вести с полей стажировки
Начало работ
Второй месяц стажировки в LAD Academy
Первый фриланс проект - школа паралимпийского резерва
#стажировка #путь_в_it #оглавление
Для удобства навигации по предстоящим материалам, в данном посте будут публиковаться ссылки на сообщения.
Тестовое задание для стажировки
Прошёл отбор на стажировку
Вести с полей стажировки
Начало работ
Второй месяц стажировки в LAD Academy
Первый фриланс проект - школа паралимпийского резерва
#стажировка #путь_в_it #оглавление
🔥3
Оглавление для серии постов рубрики "Некий проект".
Для удобства навигации по предстоящим материалам, в данном посте будут публиковаться ссылки на сообщения.
Маленькая предыстория...
Зарождение проекта...
Первый созвон...
#некий_проект #оглавление
Для удобства навигации по предстоящим материалам, в данном посте будут публиковаться ссылки на сообщения.
Маленькая предыстория...
Зарождение проекта...
Первый созвон...
#некий_проект #оглавление
🔥2
Оглавление для серии постов рубрики "Boosty эксклюзив".
Для удобства навигации по предстоящим материалам, в данном посте будут публиковаться ссылки на сообщения.
Django + AIOgram3 + Redis - Отправка поста с Django в AIOgram
Django - Добавление новой категории в форме создания поста без перезагрузки страницы
Отправка поста с Django в AIOgram - обновление
#boosty_эксклюзив #оглавление
Для удобства навигации по предстоящим материалам, в данном посте будут публиковаться ссылки на сообщения.
Django + AIOgram3 + Redis - Отправка поста с Django в AIOgram
Django - Добавление новой категории в форме создания поста без перезагрузки страницы
Отправка поста с Django в AIOgram - обновление
#boosty_эксклюзив #оглавление
🔥3
Приветствую!
В длинных постах можно запутаться поэтому, собираю воедино всё, что есть на данный момент.
Оглавления:
Для удобства навигации есть посты с оглавлениями по темам:
"Сайт на Django"
"Telegram-бот на AIOgram3"
"Применение Docker"
"Полезные инструменты"
"Вести с полей стажировки."
"Некий проект"
"Код в мешке"
"Boosty эксклюзив"
Ресурсы канала:
Уютный и немного безумный чат канала.
Бот с материалами к постам
Сайт со всеми постами
Канал в Dzen
Сообщество в VK
Поддержка.
Если вам нравится канал и выходящий материал, поделитесь ссылкой с людьми, кому это тоже может быть интересно.
Также поддержать канал можно на Boosty.
Или внеся сайт в исключения вашего блокировщика рекламы.
В длинных постах можно запутаться поэтому, собираю воедино всё, что есть на данный момент.
Оглавления:
Для удобства навигации есть посты с оглавлениями по темам:
"Сайт на Django"
"Telegram-бот на AIOgram3"
"Применение Docker"
"Полезные инструменты"
"Вести с полей стажировки."
"Некий проект"
"Код в мешке"
"Boosty эксклюзив"
Ресурсы канала:
Уютный и немного безумный чат канала.
Бот с материалами к постам
Сайт со всеми постами
Канал в Dzen
Сообщество в VK
Поддержка.
Если вам нравится канал и выходящий материал, поделитесь ссылкой с людьми, кому это тоже может быть интересно.
Также поддержать канал можно на Boosty.
Или внеся сайт в исключения вашего блокировщика рекламы.
🔥2
Декораторы в питоне
Декораторы в питоне
Авторы: Иван Ашихмин, Андрей Лебедев
Вы наверняка сталкивались с декораторами в Python, но знаете ли вы, как они работают? Можете без подсказки написать свой декоратор? А если вы только начинаете изучать Python и ещё не знакомы с ними, то не за горами тот момент, когда вы с ними так или иначе встретитесь, так почему бы не ускорить встречу?
Небольшое теоретическое вступление.
Прежде чем мы поговорим о декораторах, рассмотрим один небольшой, но важный нюанс, касающийся функций. Функции, как и всё в Python, являются объектами. И, как и любой другой объект, мы можем передавать функцию в качестве аргумента в другую функцию. Рассмотрим это на следующем примере.
Вот, что у нас здесь происходит:
Декораторы в питоне
Авторы: Иван Ашихмин, Андрей Лебедев
Вы наверняка сталкивались с декораторами в Python, но знаете ли вы, как они работают? Можете без подсказки написать свой декоратор? А если вы только начинаете изучать Python и ещё не знакомы с ними, то не за горами тот момент, когда вы с ними так или иначе встретитесь, так почему бы не ускорить встречу?
Небольшое теоретическое вступление.
Прежде чем мы поговорим о декораторах, рассмотрим один небольшой, но важный нюанс, касающийся функций. Функции, как и всё в Python, являются объектами. И, как и любой другой объект, мы можем передавать функцию в качестве аргумента в другую функцию. Рассмотрим это на следующем примере.
def func_one():
print("Как дела?”)
def func_two(func):
func()
func_two(func_one) # Как дела?
Вот, что у нас здесь происходит:
🔥4
1️⃣ Сначала мы создаем функцию
2️⃣Затем создаем вторую функцию
3️⃣ Последним действием вызовем функцию
Функции-обертки.
Давайте немного усложним рассматриваемую конструкцию:
1️⃣ Создаем функцию
2️⃣ Внутри функции
3️⃣ Функция
4️⃣ Создаем уже известную нам функцию
5️⃣ Вызываем функцию
Что же мы получим? Ничего. Всё дело в том, что функция
Вот теперь у нас всё заблестело и заискрилось: функция
А где же декораторы?
Терпение, спокойствие, сейчас они появятся.
Как нам сделать так, чтобы вызов функции
Решение как будто напрашивается: нам надо перезаписать в переменную
Еще раз: у нас была функция
А есть ли более удобный вариант записи для вызова функции декоратора? Есть - при помощи символа
Интересный факт: символ @, по мнению разработчиков, похож на пирог, от чего такой способ вызова декоратора назвали "Pie Decorator Syntax"
Полностью наш код будет выглядеть следующим образом:
func_one, которая выводит на печать строку “Как дела?”.2️⃣Затем создаем вторую функцию
func_two. Она принимает в качестве аргумента некоторую функцию func, которую в дальнейшем вызывает. Обратим внимание на то, что для передачи функции в качестве аргумента мы пишем только название функции - func, но на ставим скобки, так как в этот момент не вызываем ее.3️⃣ Последним действием вызовем функцию
func_two, передав в нее func_one. Как мы видим, func_one успешно вызывается внутри func_two, о чем и возвещает, интересуясь, как у нас дела.Функции-обертки.
Давайте немного усложним рассматриваемую конструкцию:
def deco(func):
def wrapper():
print("Привет!")
func()
print("Пока!")
return wrapper
def func_one():
print("Как дела?")
deco(func_one)
1️⃣ Создаем функцию
deco, в которую передадим в качестве аргумента некоторую функцию func.2️⃣ Внутри функции
deco создаем еще одну функцию wrapper. В ней сначала выводим на печать приветствие (“Привет!”), затем вызываем функцию func, которую получаем из внешней функции deco при помощи замыкания (обращения к объекту из внешней области видимости). Далее выводим на печать прощание (“Пока!”).3️⃣ Функция
deco возвращает функцию wrapper.4️⃣ Создаем уже известную нам функцию
func_one, вопрошающую, как дела.5️⃣ Вызываем функцию
deco.Что же мы получим? Ничего. Всё дело в том, что функция
deco возвращает функцию-обёртку wrapper, но не вызывает её. Чтобы заставить всю конструкцию работать, нам надо сделать кое-что странное: поставить после вызова функции deco дополнительную пару скобок.deco(func_one)()
# Привет!
# Как дела?
# Пока!
Вот теперь у нас всё заблестело и заискрилось: функция
wrapper, которую вернула нам вызванная функция deco, вызвалась дополнительной парой скобок и подарила нам короткий, но вежливый монолог: “Привет! Как дела? Пока!”.А где же декораторы?
Терпение, спокойствие, сейчас они появятся.
Как нам сделать так, чтобы вызов функции
func_one всегда сопровождался оборачиванием ее в функцию wrapper? Другими словами, как нам отдекорировать func_one, чтобы до вопроса о делах с нами здоровались, а после – прощались?Решение как будто напрашивается: нам надо перезаписать в переменную
func_one результат вызова функции deco с переданной в нее в качестве аргумента изначальной функцией func_one:func_one = deco(func_one)
Еще раз: у нас была функция
func_one. Мы обернули ее дополнительным кодом при помощи функции deco и в переменную func_one записали уже результат этого оборачивания. Теперь когда бы мы ни вызвали func_one, мы всегда получим усовершенствованный (отдекорированный) результат ее работы:func_one()
# Привет!
# Как дела?
# Пока!
А есть ли более удобный вариант записи для вызова функции декоратора? Есть - при помощи символа
@.Интересный факт: символ @, по мнению разработчиков, похож на пирог, от чего такой способ вызова декоратора назвали "Pie Decorator Syntax"
Полностью наш код будет выглядеть следующим образом:
def deco(func):
def wrapper():
print("Привет!")
func()
print("Пока!")
return wrapper
@deco
def func_one():
print("Как дела?")
func_one()
# Привет!
# Как дела?
# Пока!
🔥4⚡1
Результат работы этого кода точно такой же, просто синтаксис стал попроще и посимпатичнее. У большинства само понятие «декоратор» плотно ассоциируется с этим «пирожковым» оператором, но не самом деле декорирование - это не про синтаксис. Декорирование - это про принцип.
А что делать, если нам надо отдекорировать функцию, которая принимает какие-то аргументы?
В этой ситуации на помощь приходят звёздные братья
Мы передали в функцию
Вернёмся к нашим декораторам.
Допустим, что строку в нашей функции
1️⃣ В функцию-обертку (
2️⃣ В функцию
3️⃣ В декорируемую функцию передаем аргумент
В итоге всё работает ровно так, как мы и хотели, но функция и декоратор приобрели более универсальный вид.
Так что же такое декораторы?
Декоратор - это функция, которая позволяет нам "обернуть” кодом другую функцию, не изменяя при этом код самой оборачиваемой функции. Это даёт нам возможность выполнить какие-то дополнительные действия до и/или после выполнения самой оборачиваемой функции. Например, как в нашем примере выше, поздороваться перед тем, как сказать что-то, и попрощаться после этого. В принципе декораторы похожи на ритуалы, которые мы все выполняем в обычной жизни. Например, перед тем, как что-то съесть, мы моем руки. При этом неважно, из чего будет состоять трапеза: перед едой все хорошие мальчики и девочки обязательно вымоют руки - таков декоратор, обернувший функцию “поесть” в процессе воспитания в детстве.
Самым распространённым примером использования декоратора в коде является логгер. Он срабатывает при выполнении декорируемой функции и записывает в файл результат выполнения, а также сопутствующие данные, такие, как название функции, входные аргументы и другие.
Вообще декораторами бывают не только функции. В декоратор можно превратить целый класс, но об этом поговорим в отдельной статье.
А что делать, если нам надо отдекорировать функцию, которая принимает какие-то аргументы?
В этой ситуации на помощь приходят звёздные братья
*args и **kwargs. Многих начинающих питонистов эта парочка пугает, но на самом деле бояться здесь нечего. Это всего лишь синтаксис, который позволяет нам не уточнять, сколько аргументов мы хотим передать в функцию:*args кортежем передает в функцию любое количество позиционных аргументов (то есть тех, к которым внутри функции можно обратиться по позиции).**kwargs словарём передает в функцию любое количество именованных аргументов (то есть тех, к которым внутри функции можно обратиться по имени, или, другими словами, по ключу). Вот простенький пример, из которого всё должно стать понятно:def my_function(*args, **kwargs):
print(args[1])
print(kwargs[name])
my_function(1, 2, 3, name='John', age=25)
def my_function(*args, **kwargs):
print(args[1])
print(kwargs['name'])
my_function(1, 2, 3, name='Аристарх', age=25)
# 2
# Аристарх
Мы передали в функцию
my_function заранее неоговоренное количество позиционных (1, 2, 3) и именованных (name="Аристарх", age=25) аргументов. В самой функции по индексу 1 мы вызвали второй элемент кортежа позиционных аргументов (2) и по ключу "name" вызвали из словаря значение ("Аристарх"). Ничего сложного. Надо только следить за тем, чтобы в функции не вызывался аргумент с несуществующим индексом в кортеже или с несуществующим ключом в словаре. Иначе работа кода прервется исключением. Исключение, правда, можно и обработать, но об этом поговорим как-нибудь в другой раз.Вернёмся к нашим декораторам.
Допустим, что строку в нашей функции
func мы не прописываем уже внутри, а передаем в функцию позиционным аргументом. Тогда уже знакомый нам код изменится следующим образом:def deco(func):
def wrapper(*args, **kwargs):
print("Привет!")
func(*args, **kwargs)
print("Пока!")
return wrapper
@deco
def func_one(text):
print(text)
func_one("Как дела?")
# Привет!
# Как дела?
# Пока!
1️⃣ В функцию-обертку (
wrapper) мы записываем те самые *args и **kwargs2️⃣ В функцию
func внутри wrapper мы также их передаём.3️⃣ В декорируемую функцию передаем аргумент
textВ итоге всё работает ровно так, как мы и хотели, но функция и декоратор приобрели более универсальный вид.
Так что же такое декораторы?
Декоратор - это функция, которая позволяет нам "обернуть” кодом другую функцию, не изменяя при этом код самой оборачиваемой функции. Это даёт нам возможность выполнить какие-то дополнительные действия до и/или после выполнения самой оборачиваемой функции. Например, как в нашем примере выше, поздороваться перед тем, как сказать что-то, и попрощаться после этого. В принципе декораторы похожи на ритуалы, которые мы все выполняем в обычной жизни. Например, перед тем, как что-то съесть, мы моем руки. При этом неважно, из чего будет состоять трапеза: перед едой все хорошие мальчики и девочки обязательно вымоют руки - таков декоратор, обернувший функцию “поесть” в процессе воспитания в детстве.
Самым распространённым примером использования декоратора в коде является логгер. Он срабатывает при выполнении декорируемой функции и записывает в файл результат выполнения, а также сопутствующие данные, такие, как название функции, входные аргументы и другие.
Вообще декораторами бывают не только функции. В декоратор можно превратить целый класс, но об этом поговорим в отдельной статье.
🔥6
В посте ==!=is, Андрей рассказывал о операторе is. Пора проверить как закрепилась тема.
Какая из перечисленных особенностей языка Python неверна в отношении оператора is?
Какая из перечисленных особенностей языка Python неверна в отношении оператора is?
Anonymous Quiz
24%
Оператор is проверяет, указывают ли две переменные на один и тот же объект в памяти.
31%
is может использоваться для сравнения содержимого двух объектов на их идентичность.
17%
is оператор является более строгим, чем оператор == при сравнении объектов.
28%
is можно использовать для того, записан ли в переменную None
Что выведет код с картинки выше?
Anonymous Quiz
3%
([1], [2], [3, 4])
31%
TypeError
26%
([1], [2], [3, 4, 5, 6, 7])
40%
([1], [2], [3, 6, 7])
👍1
Вчера мы опубликовали ещё одну задачу из рубрики «Что выведет данный код?». Ответ, наверное, многих удивил. На этот раз задача требовала не столько внимательности, сколько знаний о специфике работы некоторых методов и операторов с причудливым сочетанием кортежей и списков в Python.
Общее количество ответов на данный момент 28, из них верных 9 - это 32%. Удивительно распределились оставшиеся ответы: 36% ответили, что будет выведена ошибка
Код задачи:
Для начала небольшое теоретическое вступление.
В посте об изменяемых и неизменяемых типах данных мы говорили о том, что ячейку, которая хранит неизменяемый объект (в частности кортеж), нельзя «вскрыть», чтобы изменить сам этот объект. На самом деле в реальности всё несколько сложнее. Кортеж мы действительно не можем изменить (например, добавить, удалить или, что особенно для нас важно, – переписать) элемент. Однако если кортеж внутри себя содержит изменяемые типы данных, например, списки, то сами эти списки могут изменяться.
Например, список
Ситуация с оператором += сложнее.
Сам по себе этот оператор - «синтаксический сахар» (то есть простая и удобная запись) для вызова следующего алгоритма действий:
1️⃣ Сначала вызывается метод
2️⃣ Перезаписыват результат слияния в ту же самую ячейку, где хранился изначальный список.
В коде это выглядело бы так:
И
Вооружившись этим знанием, посмотрим, как сработает код из нашей вчерашней задачи:
1️⃣ Записываем в
2️⃣ Под
3️⃣ Срабатывает обработка и мы перемещаемся в
4️⃣ Весь кортеж выводится на печать:
Вот такой вот неожиданный ответ. Надеемся, вы почерпнули для себя что-то новое из этой задачки и ее объяснения. А если нет, то освежили свои знания. Приглашаем поделиться впечатлениями в комментариях.
Общее количество ответов на данный момент 28, из них верных 9 - это 32%. Удивительно распределились оставшиеся ответы: 36% ответили, что будет выведена ошибка
TypeError и оставшиеся 32%, что отработает только блок except.Код задачи:
numbers = ([1], [2], [3])
try:
numbers[2] += [4, 5]
print(numbers)
except TypeError:
numbers[2].extend([6, 7])
print(numbers)
Для начала небольшое теоретическое вступление.
В посте об изменяемых и неизменяемых типах данных мы говорили о том, что ячейку, которая хранит неизменяемый объект (в частности кортеж), нельзя «вскрыть», чтобы изменить сам этот объект. На самом деле в реальности всё несколько сложнее. Кортеж мы действительно не можем изменить (например, добавить, удалить или, что особенно для нас важно, – переписать) элемент. Однако если кортеж внутри себя содержит изменяемые типы данных, например, списки, то сами эти списки могут изменяться.
Например, список
[3], если он является элементом кортежа, можно слить со списком [6, 7] методом extend(). Для этого к списку [3] надо обратиться по индексу в кортеже. Само изменение происходит внутри первоначального списка, то есть в той же самой ячейке, где он и хранился. Если смотреть на ситуацию «глазами кортежа», в нём самом ничего не изменяется: он содержит ссылки на все те же ячейки по всё тем же адресам, а что там происходит внутри этих ячеек, его как бы не касается.Ситуация с оператором += сложнее.
Сам по себе этот оператор - «синтаксический сахар» (то есть простая и удобная запись) для вызова следующего алгоритма действий:
1️⃣ Сначала вызывается метод
__iadd__ для списка, который по сути работает так же, как и уже упомянутый нами метод extend(): сливает содержимое изначального списка с содержимым нового. Причем делает это точно так же – внутри ячейки, поэтому кортеж по этому поводу никак не "тревожится".2️⃣ Перезаписыват результат слияния в ту же самую ячейку, где хранился изначальный список.
В коде это выглядело бы так:
a_list = [3]
result = a_list.__iadd__([4, 5])
a_list = result
И
a_list, и result ссылаются на один и тот же объект – список, который мы только что изменили, поэтому эта перезапись - пустая формальность, но только не для кортежа. Для него это всё равно попытка перезаписать что-то новое (пусть на самом деле и хорошо забытое старое) в один из элементов, а так как кортеж – неизменяемый тип данных, такие штуки с ним не проходят. В этом месте вызывается исключение TypeError. Но важнейший нюанс заключается в том, что первая часть алгоритма, а именно применение метода __iadd__ успевает выполниться. Поэтому если мы обработаем исключение, список, который мы изменяли, успеет слиться с новым, оставаясь при этом элементом кортежа.Вооружившись этим знанием, посмотрим, как сработает код из нашей вчерашней задачи:
1️⃣ Записываем в
numbers кортеж списков ([1], [2], [3]).2️⃣ Под
try записываем попытку применить += к элементу кортежа под индексом 2. Первая часть этой задачи проходит успешно: список [3] сливается со списком [4, 5]. А вот попытка перезаписать этот список в ту же ячейку, как мы выяснили, оборачивается вызовом исключения TypeError.3️⃣ Срабатывает обработка и мы перемещаемся в
exception. Там к нашему уже измененному однажды списку [3, 4, 5] применяется "безобидный" метод extend, поэтому в конечном виде последний элемент кортежа приобретает вид [3, 4, 5, 6, 7].4️⃣ Весь кортеж выводится на печать:
([1], [2], [3, 4, 5, 6, 7]).Вот такой вот неожиданный ответ. Надеемся, вы почерпнули для себя что-то новое из этой задачки и ее объяснения. А если нет, то освежили свои знания. Приглашаем поделиться впечатлениями в комментариях.
🔥5👍1
С днём рождения, Ваня!
Автор: Андрей Лебедев
Наш канал, созданный не так уж давно, на сегодняшний день объединяет уже 288 человек. Кому-то это число может показаться небольшим, но среди нас уже наверняка есть люди, которые не знают, с чего или, точнее, с кого началось и на ком держится всё наше небольшое сообщество. Возможно, есть и те, кто просто не помнит таких вещей, потому что люди тут в том числе собрались пожилые. Первым - расскажем, а вторым - напомним, потому что старость надо уважать.
Автор: Андрей Лебедев
Наш канал, созданный не так уж давно, на сегодняшний день объединяет уже 288 человек. Кому-то это число может показаться небольшим, но среди нас уже наверняка есть люди, которые не знают, с чего или, точнее, с кого началось и на ком держится всё наше небольшое сообщество. Возможно, есть и те, кто просто не помнит таких вещей, потому что люди тут в том числе собрались пожилые. Первым - расскажем, а вторым - напомним, потому что старость надо уважать.
🔥6😱2
А началось всё с того, что один умный, инициативный, любознательный и во всех отношениях приятный мужчина в самом расцвете лет решил поделиться своими знаниями со всеми желающими, для чего создал канал, написал (и продолжает писать) сайт, запустил самый живой из всех известных мне чатов на 50 человек, объединив десятки людей с очень разной биографией из всех уголков России, а потом как будто растворился, превратившись в админа и спрятавшись за фотографией кота на салфетке. С тех пор каждое утро кот возвещает в чате о том, что “проснувся”, а затем без устали отвечает на любые вопросы - технического и образовательного характера, про мемы, музыку, отношения типа “Госпожа/миньоны” и, конечно же, про рыжих женщин и шарообразных дизайнеров. Параллельно кот учится в нескольких местах, пишет дипломы, запускает проекты, участвует в стажировках, проходит технические собеседования в IT-компаниях и обо всём этом честно докладывает всем собравшимся.
Сегодня у нашего Вани (я бы так кота, конечно, не назвал) день рождения! Я от всей души поздравляю нашего @proDreams и желаю ему просто оставаться собой, потому что нет никаких сомнений в том, что все личностные настройки у Вани уже правильно подобраны и подкручены так, чтобы состояться и как разработчик, и как просто хороший человек. Желаю только попутного ветра и чтобы никакие внешние обстоятельства все эти настройки не сбивали. Спасибо, Ваня, что ты такой и что ты у нас есть!
Передаю слово другим поздравляющим:
Поздравляю с днем рождения и желаю, чтобы в твоём кодe жизни не было никаких багов, чтобы твоим проектам не страшны были никакие вирусы, чтобы твоя деятельность была запрограммирована только на успех, чтобы твое сердце было запаролено от любых разочарований и всякого негатива. Чтобы скрипты твоего здоровья всегда выполняли свои функции. Чтобы база данных твоих знаний никогда не устаревала и всегда только обновлялась. И чтобы список твоих доходов тянул на миллионы строк.
Артур
***
Что ж, воот и твой день рождения настал, поздравляю тебя с ним, старик) я благодарю тебя за все те помощи что ты мне давал, даже в долг без процентов на видеокарту 😁 научил многому, как ставить винду, даж родители говорили «смотри давай и учись» хввхха как вы пьяные с Яриком у меня дома хавали и винду ставили очередной раз 🤣 жди меня с пивком, с тебя покушатс, с твоим днём Sooshkoo
Анатолий
***
Хочу пожелать тебе, чтобы этот день стал особенным!
Ты замечательный! Ты молодец! Ты стараешься! У тебя обязательно все получится и ты добьешься всего, что тебе хочется!!! Пусть твой канал растет и развивается, привлекая новых участников и авторов! Ты собрал вокруг себя прекрасных людей! Успехов в стажировке и карьерного роста! Пусть все твои мечты сбываются!!! Будь счастлив и спасибо за всё, что ты делаешь!!!
Кристина
***
Привет Кот!
Сегодня твой день рождения, и мы не можем пропустить возможность поздравить тебя :
*️⃣ Крутяцкого босса Некого проекта
*️⃣ Автора кучи умных постов
*️⃣ И создателя этого сумасшедшего чатика
Желаем тебе огромного количества баг-фри кода, интересных проектов, звания сеньора и возможности удаленной работы где- нибудь на Мальдивах за очень очень большую зарплату)).
Ну а так как я не умею сама писать нормально поздравления ваша задача оставить как можно больше поздравляшек в комментариях
Ps: Тык в кнопку поддержать канал приветствуется.
Анастасия
***
Остальных приглашаем присоединиться к поздравлениям в комментариях!
Пост на сайте
Поддержать проект
#Код_на_салфетке #День_рождения #Ваня
Сегодня у нашего Вани (я бы так кота, конечно, не назвал) день рождения! Я от всей души поздравляю нашего @proDreams и желаю ему просто оставаться собой, потому что нет никаких сомнений в том, что все личностные настройки у Вани уже правильно подобраны и подкручены так, чтобы состояться и как разработчик, и как просто хороший человек. Желаю только попутного ветра и чтобы никакие внешние обстоятельства все эти настройки не сбивали. Спасибо, Ваня, что ты такой и что ты у нас есть!
Передаю слово другим поздравляющим:
Поздравляю с днем рождения и желаю, чтобы в твоём кодe жизни не было никаких багов, чтобы твоим проектам не страшны были никакие вирусы, чтобы твоя деятельность была запрограммирована только на успех, чтобы твое сердце было запаролено от любых разочарований и всякого негатива. Чтобы скрипты твоего здоровья всегда выполняли свои функции. Чтобы база данных твоих знаний никогда не устаревала и всегда только обновлялась. И чтобы список твоих доходов тянул на миллионы строк.
Артур
***
Что ж, воот и твой день рождения настал, поздравляю тебя с ним, старик) я благодарю тебя за все те помощи что ты мне давал, даже в долг без процентов на видеокарту 😁 научил многому, как ставить винду, даж родители говорили «смотри давай и учись» хввхха как вы пьяные с Яриком у меня дома хавали и винду ставили очередной раз 🤣 жди меня с пивком, с тебя покушатс, с твоим днём Sooshkoo
Анатолий
***
Хочу пожелать тебе, чтобы этот день стал особенным!
Ты замечательный! Ты молодец! Ты стараешься! У тебя обязательно все получится и ты добьешься всего, что тебе хочется!!! Пусть твой канал растет и развивается, привлекая новых участников и авторов! Ты собрал вокруг себя прекрасных людей! Успехов в стажировке и карьерного роста! Пусть все твои мечты сбываются!!! Будь счастлив и спасибо за всё, что ты делаешь!!!
Кристина
***
Привет Кот!
Сегодня твой день рождения, и мы не можем пропустить возможность поздравить тебя :
*️⃣ Крутяцкого босса Некого проекта
*️⃣ Автора кучи умных постов
*️⃣ И создателя этого сумасшедшего чатика
Желаем тебе огромного количества баг-фри кода, интересных проектов, звания сеньора и возможности удаленной работы где- нибудь на Мальдивах за очень очень большую зарплату)).
Ну а так как я не умею сама писать нормально поздравления ваша задача оставить как можно больше поздравляшек в комментариях
Ps: Тык в кнопку поддержать канал приветствуется.
Анастасия
***
Остальных приглашаем присоединиться к поздравлениям в комментариях!
Пост на сайте
Поддержать проект
#Код_на_салфетке #День_рождения #Ваня
❤4🔥3👍2😱1