В первом классе мы наследуемся от нашего основного класса, миксина проверки принадлежности к группе и встроенного класса
Во втором классе мы также наследуемся от основного класса, миксина, проверяющего идентичность автора поста и пользователя, и от стандартного
В обоих классах добавляем единственное поле
Код представлений:
Представление страницы удаления поста.
Для страницы удаления поста мы напишем отдельное представление.
Создадим класс
Прописываем четыре поля:
-
-
-
-
Также переопределяем метод
Код представления:
Шаблон страницы удаления поста.
Создадим файл
В шаблоне прописываем форму с двумя кнопками: "подтвердить удаление поста" и "вернуться в профиль".
Код шаблона:
URL-паттерны.
Осталось добавить
Кнопки в кабинете автора мы добавили в прошлом посте.
Откроем файл
CreateView.Во втором классе мы также наследуемся от основного класса, миксина, проверяющего идентичность автора поста и пользователя, и от стандартного
UpdateView.В обоих классах добавляем единственное поле
extra_context, в котором прописываем заголовок страницы. Это всё, что будет в двух представлениях.Код представлений:
from django.views.generic import CreateView, UpdateView
from user_app.mixins import PermissionSameAuthorMixin, PermissionGroupRequiredMixin
class AddPostByAuthorView(PostByAuthor, PermissionGroupRequiredMixin, CreateView):
extra_context = {'title': 'Добавление поста'}
class EditPostByAuthorView(PostByAuthor, PermissionSameAuthorMixin, UpdateView):
extra_context = {'title': 'Изменить пост'}
Представление страницы удаления поста.
Для страницы удаления поста мы напишем отдельное представление.
Создадим класс
DeletePostByAuthorView, унаследованный от PermissionSameAuthorMixin и DeleteView.Прописываем четыре поля:
-
template_name - шаблон страницы.-
model - модель поста.-
group_required - требуемая группа для доступа к странице.-
extra_context - дополнительные данные передаваемые в шаблон. В нашем случае заголовок страницы.Также переопределяем метод
get_success_url(), возвращая на страницу профиля. Он такой же как и в представлениях выше.Код представления:
from django.views.generic import DeleteView
from django.urls import reverse_lazy
from blog.models import PostModel
from user_app.mixins import PermissionSameAuthorMixin
class DeletePostByAuthorView(PermissionSameAuthorMixin, DeleteView):
template_name = 'user_app/delete_post_confirm.html'
model = PostModel
group_required = 'Автор'
extra_context = {'title': 'Удалить пост?'}
def get_success_url(self):
return reverse_lazy('user_app:user_profile', kwargs={'username': self.request.user.username})
Шаблон страницы удаления поста.
Создадим файл
delete_post_confirm.html в директории с шаблонами.В шаблоне прописываем форму с двумя кнопками: "подтвердить удаление поста" и "вернуться в профиль".
Код шаблона:
{% extends 'blog/base.html' %}
{% block title %}{{ title }}{% endblock %}
{% block content %}
<div class="form-section container mt-3">
<h2>Удаление поста {{ object }}</h2>
<p>Вы действительно хотите удалить этот пост?</p>
<form method="POST">
{% csrf_token %}
<button class="btn btn-secondary my-btn-danger me-2" type="submit">Да, удалить</button>
<a href="{% url 'user_app:user_profile' username=request.user.username %}" class="btn btn-primary my-btn-success">Отмена</a>
</form> </div>{% endblock %}URL-паттерны.
Осталось добавить
URL-паттерны представлений.Кнопки в кабинете автора мы добавили в прошлом посте.
Откроем файл
urls.py в директории приложения user_app и добавим следующие строки в список urlpatterns:🔥2
path('post/add_post/', views.AddPostByAuthorView.as_view(), name='add_post'),
path('post/edit_post/<int:pk>', views.EditPostByAuthorView.as_view(), name='edit_post'),
path('post/delete_post/<int:pk>', views.DeletePostByAuthorView.as_view(), name='delete_post'),Заключение.
В этом посте мы разобрали, что такое миксины. В Django есть ряд встроенных миксинов, таких как
LoginRequiredMixin, проверяющий зарегистрирован пользователь или нет. Написание собственных миксинов поможет расширить функционал представлений, без дублирования кода.Кроме того, мы ещё раз попробовали создать базовый класс и сделать на его основе представления. Мы сделали один большой класс и два буквально
двустрочных. Если бы мы не сделали базовый класс, у нас вместо трёх, было бы два представления, однако оба были бы идентичными.Файлы к посту, можно получить в боте по коду: 949621
Пост на сайте
Поддержать проект
#Python #Django #Гайды #шаблоны #представления #классы #наследование #Миксины #Mixin #группы
🔥5
Проекту "Код на салфетке" исполняется 6 месяцев!
Автор: Иван Ашихмин
Приветствую.
Сегодня каналу исполняется 6 месяцев!
Это большое событие для меня лично.
Начиная канал, я и не подозревал, что буду вести его не один, что в чате соберётся своё сообщество активных и интересных людей, что на канал подпишется аж 310 человек.
Благодарю всех подписчиков и причастных к каналу людей за помощь, поддержку и критику. Без вас этого всего бы не было.
Нельзя обойти стороной и тех, кто помогает с каналом и пишет посты:
- Спасибо Кристине Большаковой, за веру, поддержку, советы и идеи.
- Спасибо Андрею Лебедеву, за полезную, интересную и так легко читаемую рубрику о тонкостях Python.
- Спасибо Евгению Акопяну, за помощь в дизайне для канала, а так же за разработку нового дизайна для сайта.
- Спасибо Артуру Мурзыеву, моему хорошему другу, который ведёт рубрику пятничного кино, а может и ещё, что-то будет вести 😉.
- И другим причастным, пожелавшим остаться неизвестными, тоже огромное спасибо!
Автор: Иван Ашихмин
Приветствую.
Сегодня каналу исполняется 6 месяцев!
Это большое событие для меня лично.
Начиная канал, я и не подозревал, что буду вести его не один, что в чате соберётся своё сообщество активных и интересных людей, что на канал подпишется аж 310 человек.
Благодарю всех подписчиков и причастных к каналу людей за помощь, поддержку и критику. Без вас этого всего бы не было.
Нельзя обойти стороной и тех, кто помогает с каналом и пишет посты:
- Спасибо Кристине Большаковой, за веру, поддержку, советы и идеи.
- Спасибо Андрею Лебедеву, за полезную, интересную и так легко читаемую рубрику о тонкостях Python.
- Спасибо Евгению Акопяну, за помощь в дизайне для канала, а так же за разработку нового дизайна для сайта.
- Спасибо Артуру Мурзыеву, моему хорошему другу, который ведёт рубрику пятничного кино, а может и ещё, что-то будет вести 😉.
- И другим причастным, пожелавшим остаться неизвестными, тоже огромное спасибо!
🔥9❤1🤩1
И это только начало. Планов по развитию много, осталось только их воплотить в жизнь.
Особая благодарность поддерживающим проект на Boosty:
- Яковлев Павел
- Сергей Гордиенко
- Юрий Гаврилович
- Кристина
- MSSW
Вы помогаете оплачивать сервер и даёте мотивацию продолжать.
Огромное спасибо!
Пост на сайте
Поддержать проект
#Новости #Код_на_салфетке #пол_года
Особая благодарность поддерживающим проект на Boosty:
- Яковлев Павел
- Сергей Гордиенко
- Юрий Гаврилович
- Кристина
- MSSW
Вы помогаете оплачивать сервер и даёте мотивацию продолжать.
Огромное спасибо!
Пост на сайте
Поддержать проект
#Новости #Код_на_салфетке #пол_года
🔥6
Что? Уже? Пролетел очередной месяц учёбы...
По этому поводу готов очередной отчёт на Pikabu.
https://pikabu.ru/story/obuchenie_semnadtsatyiy_mesyats_10949513
😊Как обычно, с вас лайки)
По этому поводу готов очередной отчёт на Pikabu.
https://pikabu.ru/story/obuchenie_semnadtsatyiy_mesyats_10949513
😊Как обычно, с вас лайки)
🔥7
Приветствую, друзья!
Снова пятница, а это значит пришло время отдохнуть от дел и немного отвлечься. Давайте воспользуемся этим моментом для заслуженного отдыха, наслаждаясь просмотром отличного фильма. Приготовьте что-нибудь под ваш любимый напиток, расслабьтесь, очистите голову от мыслей и готовьтесь к приятному времяпрепровождению.
Фильм: Голодные игры: Баллада о змеях и певчих птицах
Год: 2023
До того как стать деспотичным президентом Панэма, молодой Кориолан Сноу был последней надеждой своего увядающего рода — некогда великой династии, впавшей в немилость послевоенного Капитолия. Накануне десятых ежегодных Голодных игр Сноу назначают наставником Люси Грей Бэйрд — трибута дистрикта 12. Постепенно девушка привлекает все больше внимание Панэма, становясь фавориткой грядущего соревнования. Начинается гонка со временем, которая покажет, кто певчая птица, а кто — змея.
Всем приятного просмотра и делимся своим мнением в комментариях
https://www.sspoisk.ru/film/1289334/?utm_referrer=www.google.com
Снова пятница, а это значит пришло время отдохнуть от дел и немного отвлечься. Давайте воспользуемся этим моментом для заслуженного отдыха, наслаждаясь просмотром отличного фильма. Приготовьте что-нибудь под ваш любимый напиток, расслабьтесь, очистите голову от мыслей и готовьтесь к приятному времяпрепровождению.
Фильм: Голодные игры: Баллада о змеях и певчих птицах
Год: 2023
До того как стать деспотичным президентом Панэма, молодой Кориолан Сноу был последней надеждой своего увядающего рода — некогда великой династии, впавшей в немилость послевоенного Капитолия. Накануне десятых ежегодных Голодных игр Сноу назначают наставником Люси Грей Бэйрд — трибута дистрикта 12. Постепенно девушка привлекает все больше внимание Панэма, становясь фавориткой грядущего соревнования. Начинается гонка со временем, которая покажет, кто певчая птица, а кто — змея.
Всем приятного просмотра и делимся своим мнением в комментариях
https://www.sspoisk.ru/film/1289334/?utm_referrer=www.google.com
🔥2🤮1
Что выведет код с изображения выше?
Anonymous Quiz
13%
Осталось конфет: 5
31%
Осталось конфет: 4
36%
UnboundLocalError
21%
Ничего из перечисленного выше
Вчерашняя задача была проще предыдущих, но, как нам представляется, получилась при этом не менее интересной. Она напоминает самую первую задачу из рубрики "Что выведет данный код?" и направлена на внимательность и понимание областей видимости в Python.
В викторине приняло участие 26 человек. Верный ответ оказался одним из двух наиболее популярных: 34% (9 человек) ответили, что код выведет "UnboundLocalError" - и это правильно! Столько же человек посчитало, что код выведет "Осталось конфет: 4". Увы, это неверно, и сейчас мы подробно разберём, почему...
Давайте же разберём эту задачу.
Код задачи:
В самом начале объявлена переменная
Далее прописывается простейший декоратор
Затем объявляем задекорированную функцию
В самом конце вызываем
Вернёмся к декоратору
И что же мы получаем в результате работы? Ошибку!
Почему ошибка?
Всё дело в области видимости, к которой относится переменная
Чтобы глобальная переменная
В викторине приняло участие 26 человек. Верный ответ оказался одним из двух наиболее популярных: 34% (9 человек) ответили, что код выведет "UnboundLocalError" - и это правильно! Столько же человек посчитало, что код выведет "Осталось конфет: 4". Увы, это неверно, и сейчас мы подробно разберём, почему...
Давайте же разберём эту задачу.
Код задачи:
candies = 5
def deco(func):
def wrapper():
candies -= 1
func()
return wrapper
@deco
def print_candies():
print(f'Осталось конфет: {candies}.')
print_candies()
В самом начале объявлена переменная
candies со значением 5.Далее прописывается простейший декоратор
deco. Если устройство декоратора вызывает вопросы, подробно эту тему мы рассматривали в посте "[Декораторы в питоне](https://pressanybutton.ru/post/nyuansy-python/dekoratory-v-pitone/?utm_source=telegram&utm_medium=channel&utm_campaign=post)". Сейчас же подробное описание пока пропустим.Затем объявляем задекорированную функцию
print_candies(), выводящую на экран количество конфет в переменной candies.В самом конце вызываем
print_candies(), чтобы запустить весь процесс.Вернёмся к декоратору
deco. В нём мы уменьшаем значение переменной candies на единицу и вызываем задекорированную функцию print_candies().И что же мы получаем в результате работы? Ошибку!
Почему ошибка?
Всё дело в области видимости, к которой относится переменная
candies. Переменная из верхней строчки кода (в которой лежит 5 конфет) существует в глобальном контексте: она определена вне любой из функций программы. В принципе к ней можно обратиться из любой функции, но только чтобы считать ее значение. Однако в функции wrapper() внутри декоратора мы не просто считываем значение глобальной переменной candies, но и пытаемся изменить его, уменьшив на единицу, а это уже запрещенный приём. Изменять внутри функции можно значение только тех переменных, которые существуют в их локальной области видимости. В противном случае нас ожидает исключение UnboundLocalError.Чтобы глобальная переменная
candies стала доступна для изменения внутри функции wrapper(), необходимо объявить её глобальной при помощи ключевого слова global:candies = 5
def deco(func):
def wrapper():
global candies
candies -= 1
func()
return wrapper
@deco
def print_candies():
print(f'Осталось конфет: {candies}.')
print_candies()
🔥4
Сравнение типизации Python и C
Автор: Arduinum628
Всем доброго дня! На канале начинается новая рубрика - "Сравнение языка Python 3 и C". Чем отличается высокоуровневый Python от низкоуровневого C? Что такое компилятор? Как работает интерпретатор Python? Как подружить Python и C? Как пк взаимодействует с низкоуровневыми языками? На эти и другие вопросы, связанные с данной темой, ответит новая рубрика. Все примеры я буду писать и запускать в операционной системе Kubuntu. Kubuntu - производный от Ubuntu дистрибутив Linux. Приготовьтесь к открытиям и экспериментам. Погружение в низкий уровень начинается...
Сравнение типизации
Нам известно, что Python имеет динамическую типизацию. Это означает, что типы переменных определяются во время выполнения программы и могут измениться на лету во время выполнения программы. Это даёт некоторую гибкость использования данных в Python.
Автор: Arduinum628
Всем доброго дня! На канале начинается новая рубрика - "Сравнение языка Python 3 и C". Чем отличается высокоуровневый Python от низкоуровневого C? Что такое компилятор? Как работает интерпретатор Python? Как подружить Python и C? Как пк взаимодействует с низкоуровневыми языками? На эти и другие вопросы, связанные с данной темой, ответит новая рубрика. Все примеры я буду писать и запускать в операционной системе Kubuntu. Kubuntu - производный от Ubuntu дистрибутив Linux. Приготовьтесь к открытиям и экспериментам. Погружение в низкий уровень начинается...
Сравнение типизации
Нам известно, что Python имеет динамическую типизацию. Это означает, что типы переменных определяются во время выполнения программы и могут измениться на лету во время выполнения программы. Это даёт некоторую гибкость использования данных в Python.
🔥4
age = 20
print('Возраст пользователя ' + str(age) + 'лет')
В примере выше мы преобразуем данные переменной
age в строку, складываем строку и выводим результат. Как же обстоят дела с типизацией в С? В языке С типизация является статической. Это значит, что типы переменных будут определяться на этапе компиляции. Что же такое, собственно, компиляция? Компиляция - это процесс преобразования исходного кода программы в машинный код или байт-код. Этот процесс выполняет программа-компилятор. В этой статье я покажу вам, как запускать С код. Однако более подробно про компиляцию и компилятор мы поговорим в следующих статьях, а пока давайте вернёмся к типизации языка С. К сожалению, в С нет возможности преобразования типа на лету, но есть удобный способ форматирования данных для вывода в консоль.int age = 20;
printf('Возраст пользователя %d лет', age);
В данном примере мы строго указываем тип при создании переменной, а также указываем спецификатор формата
%d (целое число int типа), который укажет, какой тип данных ожидать при выводе. Функция printf выведет данные в консоль. Я думаю, читатель заметит схожесть вставки данных из переменных с оператором % из Python для форматирования строк. Давайте посмотрим как это выглядит в Python.age: int = 20
print('Возраст пользователя %d лет' % age)
Главным отличием будет то, что в Python при форматировании строки
% произойдёт преобразование типа int в str на лету, в то время как в примере с языком С форматирование происходит для вывода в консоль и при этом тип данных при выводе не меняется. Также, начиная с Python 3.6 и выше, можно указать типы переменных в синтаксисе, если это необходимо для улучшения читаемости кода (как в примере выше). В версии Python 3.5 это делалось в комментарии age = 20 # type: int. Это называется "аннотация типов". После этого вы сможете изменить тип переменной, но некоторые IDE будут подсвечивать вам подсказки при неправильной работе с типом данных. Например, PyCharm поддерживает аннотации. На работу программы это влиять не будет, типизация в Python по-прежнему будет динамической. Однако это будет работать на уровне соглашения между разработчиками. Если в переменной указан тип int, значит, разработчики не будут менять тип данных для переменной.Оба вида типизации обладают своими преимуществами и недостатками. Преимущество динамической типизации в Python над статической в С том, что она позволяет писать код быстрее и делает его более гибким. Почему так?Преобразование типов данных происходит на лету, а сам синтаксис получается короче. Соответственно, C не такой гибкий и быстрый в написании кода. Преимущество статической типизации С над динамической Python в том, что при компиляции программы мы видим все ошибки в коде сразу. Также статическая типизация выигрывает у динамической типизации в скорости выполнения программы из-за того, что при динамической типизации приходится тратить дополнительное время для проверки типов во время выполнения программы.
Собственно говоря, я упоминал о выводе данных в консоль, но как вывести результат нашей программы, написанной на С? Достаточно ли этих двух строк для работы программы?
Для тестирования нашей программы нам необходим компилятор. Я буду использовать компилятор gcc, который уже был предустановлен в моей операционной системе Kubuntu. Посмотрим версию нашего компилятора, чтобы убедиться что он присутствует в операционной системе.
В terminal
$ gcc --version
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. &nbsp;There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
🔥2👍1
Вывод выше показывает, что у нас установлена версия компилятора 11.4.0. Это означает, что мы можем приступить к сборке программы и увидеть результат? Ответ "да", но только если мы добавим дополнительные строки в нашу программу.
Итак, что мы добавили за строки? Строка
Давайте с вами скомпилируем программу для получения исполняемого файла. Для этого нам нужно, находясь в terminal, перейти в папку с нашим файлом
В terminal
Рассмотрим команду подробнее. Мы говорим
Повторно запустим команду выше и посмотрим на результат. При успешной компиляции мы не видим никакого сообщения в terminal. Но мы видим, что рядом с нашим
В terminal
Поздравляю, мы написали нашу первую программу на C, скомпилировали и запустили её. Моя рубрика сравнивает Python и C, и, раз я затронул в этой статье тему компиляции, в следующей статье я раскрою тему выполнения программ на обоих языках. Вы узнаете, чем компилятор С отличается от интерпретатора Python. Дальше будет ещё интереснее :)
Заключение
1. При объявлении переменной в С мы явно указываем тип в отличие от Python, но зато в Python есть аннотация для типов данных;
2. В отличие от Python язык С не способен преобразовывать типы данных на лету для вставки данных, но есть удобный способ форматирования данных для вывода в консоль;
3. Язык с динамической типизацией быстрее в разработке и код более гибкий;
#include <stdio.h>
int main(){
int age = 20;
printf('Возраст пользователя %d лет', age);
return 0;
}
Итак, что мы добавили за строки? Строка
#include <stdio.h> подключает стандартную библиотеку для С, в которой содержится функционал для ввода/вывода в том числе функция printf, которую мы используем в нашем коде. Функция main является обязательной и в случае успеха возвращает 0 по умолчанию (С99 и новее). Также можно прописывать return 0, что не будет ошибкой, особенно для более старых версий. Я решил оставить вариант с return 0, так как он более универсален. Наш файл с кодом мы должны сохранить в файл с расширением .c. Пусть это будет age_print.c.Давайте с вами скомпилируем программу для получения исполняемого файла. Для этого нам нужно, находясь в terminal, перейти в папку с нашим файлом
age_print.c и дать команду компиляции.В terminal
$ gcc age_print.c -o age_print
age_print.c: In function ‘main’:
age_print.c:5:12: warning: character constant too long for its type
5 | printf('Возраст пользователя %d лет', age);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
age_print.c:5:12: warning: passing argument 1 of ‘printf’ makes pointer from integer without a cast [-Wint-conversion]
5 | printf('Возраст пользователя %d лет', age);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| int
In file included from age_print.c:1:
/usr/include/stdio.h:356:43: note: expected ‘const char * restrict’ but argument is of type ‘int’
356 | extern int printf (const char *__restrict __format, ...);
Рассмотрим команду подробнее. Мы говорим
gcc компилятору скомпилировать исходный код с именем age_print.c и создать исполняемый файл age_print. На название файла указывает флаг -o. Под командой в terminal мы видим вывод. Что же это за вывод такой? Это предупреждения отладчика. В нашем случае я специально указал не те кавычки, чтобы показать вам, что произойдёт, когда показываются предупреждения при компиляции. Более подробно о компиляции вы узнаете в следующих статьях. При замене на "" кавычки эти предупреждения пропадут. Исправим наш код и добавим перенос \n строки для более красивого вывода результата работы программы.#include <stdio.h>
int main(){
int age = 20;
printf("Возраст пользователя %d лет\n", age);
return 0;
}
Повторно запустим команду выше и посмотрим на результат. При успешной компиляции мы не видим никакого сообщения в terminal. Но мы видим, что рядом с нашим
age_print.c появился исполняемый файл age_print. Файл появился в результате успешной компиляции без ошибок.В terminal
$ ./age_print
Возраст пользователя 20 лет
Поздравляю, мы написали нашу первую программу на C, скомпилировали и запустили её. Моя рубрика сравнивает Python и C, и, раз я затронул в этой статье тему компиляции, в следующей статье я раскрою тему выполнения программ на обоих языках. Вы узнаете, чем компилятор С отличается от интерпретатора Python. Дальше будет ещё интереснее :)
Заключение
1. При объявлении переменной в С мы явно указываем тип в отличие от Python, но зато в Python есть аннотация для типов данных;
2. В отличие от Python язык С не способен преобразовывать типы данных на лету для вставки данных, но есть удобный способ форматирования данных для вывода в консоль;
3. Язык с динамической типизацией быстрее в разработке и код более гибкий;
🔥3❤1
4. Язык со статической типизацией быстрее выполняется и все ошибки кода видны сразу при компиляции;
5. Посмотрели как скомпилировать код и запустить программу на С.
Файлы к посту, можно получить в боте по коду: 224220
Пост на сайте
Поддержать проект
#Python #Типизация #Сравнение_Python_и_C #Компилятор #C
5. Посмотрели как скомпилировать код и запустить программу на С.
Файлы к посту, можно получить в боте по коду: 224220
Пост на сайте
Поддержать проект
#Python #Типизация #Сравнение_Python_и_C #Компилятор #C
🔥4
Приветствую.
Второго ноября мы объявили о запуске нашего "Тайного Котямбы".
И вот, спустя почти два месяца, мы готовы предоставить отчёт!
Всего в обмене подарками приняло участие 9 человек. Подарки отправили все участники, но, к сожалению, не все на данную минуту смогли их получить. Ввиду погодных условий (в какой-то момент там было очень холодно - под -50) в Иркутск временно не летали самолеты, а когда залетали, в местных почтовых отделениях произошел логистический коллапс. Посылка для Ивана уже добралась до отделения, и на днях он ее получит. Отзыв мы, разумеется, добавим.
А вот посылка для Эльвиры, к сожалению, застряла, но Иван обещал поспособствовать скорейшему разрешению ситуации.
Отчёты в порядке получения:
Отчёт Кристины
Отчёт Насти (РБ)
Отчёт Юрия
Мой отчёт
Отчёт Ильи
Отчёт Антона
Отчёт Насти (МСК)
Отчёт Ивана
Отчёт Эльвиры
Надеюсь, подарочки принесли всем участникам новогоднее настроение и радость.
Давайте в следующем году повторим?
Второго ноября мы объявили о запуске нашего "Тайного Котямбы".
И вот, спустя почти два месяца, мы готовы предоставить отчёт!
Всего в обмене подарками приняло участие 9 человек. Подарки отправили все участники, но, к сожалению, не все на данную минуту смогли их получить. Ввиду погодных условий (в какой-то момент там было очень холодно - под -50) в Иркутск временно не летали самолеты, а когда залетали, в местных почтовых отделениях произошел логистический коллапс. Посылка для Ивана уже добралась до отделения, и на днях он ее получит. Отзыв мы, разумеется, добавим.
А вот посылка для Эльвиры, к сожалению, застряла, но Иван обещал поспособствовать скорейшему разрешению ситуации.
Отчёты в порядке получения:
Отчёт Кристины
Отчёт Насти (РБ)
Отчёт Юрия
Мой отчёт
Отчёт Ильи
Отчёт Антона
Отчёт Насти (МСК)
Отчёт Ивана
Отчёт Эльвиры
Надеюсь, подарочки принесли всем участникам новогоднее настроение и радость.
Давайте в следующем году повторим?
🔥4🎅1
🎄Приветствую и поздравляю всех с наступающим новым годом!🎄
По случаю такого события команда проекта "Код на салфетке" объявляет "Новогодний балаган"!
Общий созвон в нашем уютном чатике "Кот на салфетке", на котором можно будет пообщаться обо всём в свободной форме.
Созвон состоится 31-го декабря в 17:00 по МСК.
Ссылка на чат: https://t.iss.one/pressanybutton_chat
🎄Приходите, мы рады всем!🎄
По случаю такого события команда проекта "Код на салфетке" объявляет "Новогодний балаган"!
Общий созвон в нашем уютном чатике "Кот на салфетке", на котором можно будет пообщаться обо всём в свободной форме.
Созвон состоится 31-го декабря в 17:00 по МСК.
Ссылка на чат: https://t.iss.one/pressanybutton_chat
🎄Приходите, мы рады всем!🎄
🔥6😱1
Приветствую вас, дорогие участники!
Очередная неделя пролетела как МКС вокруг земного шара. Вечер пятницы... Что может быть прекрасней, чем когда наконец можно отложить все дела до понедельника? Ну или хотя бы на пару часов. Ведь именно такая длительность нашего следующего фильма. Заваривайте чаёк и устраивайтесь поудобнее. Погнали!
Фильм: Мятежная Луна, часть 1
Год: 2022
Перевод: Профессиональный, многоголосый
Жестокий тиран угрожает жителям мирной колонии на краю галактики, и их единственной надеждой становится таинственная незнакомка.
Ставьте реакции и делитесь своим мнением. Приятного просмотра
https://www.sspoisk.ru/film/4538172/?utm_referrer=www.google.com
Очередная неделя пролетела как МКС вокруг земного шара. Вечер пятницы... Что может быть прекрасней, чем когда наконец можно отложить все дела до понедельника? Ну или хотя бы на пару часов. Ведь именно такая длительность нашего следующего фильма. Заваривайте чаёк и устраивайтесь поудобнее. Погнали!
Фильм: Мятежная Луна, часть 1
Год: 2022
Перевод: Профессиональный, многоголосый
Жестокий тиран угрожает жителям мирной колонии на краю галактики, и их единственной надеждой становится таинственная незнакомка.
Ставьте реакции и делитесь своим мнением. Приятного просмотра
https://www.sspoisk.ru/film/4538172/?utm_referrer=www.google.com
🔥3
🎅Новогоднее поздравление
Авторы: Иван Ашихмин, Андрей Лебедев
Приветствую.
Вот и закончился 2023 год. Для меня это выдался непростой год. Много учёбы, какие-то проекты, дела, вписывался практически во всё и изрядно так устал) В следующем году пора бы заняться контролем времени, защитить диплом в GB, успешно пройти стажировку и наконец-то начать искать работу)
Хочу пожелать Вам в новом году успехов в учёбе, побольше перспективных проектов, найти или сменить работу на более интересную и конечно же здоровья (особенно ментального, выгорание штука такая, неприятная). И самое главное - не говнокодьте! Пишите красивый, эффективно работающий код и всё будет хорошо!)
Хочу передать слово коллегам:
Андрей Лебедев:
Авторы: Иван Ашихмин, Андрей Лебедев
Приветствую.
Вот и закончился 2023 год. Для меня это выдался непростой год. Много учёбы, какие-то проекты, дела, вписывался практически во всё и изрядно так устал) В следующем году пора бы заняться контролем времени, защитить диплом в GB, успешно пройти стажировку и наконец-то начать искать работу)
Хочу пожелать Вам в новом году успехов в учёбе, побольше перспективных проектов, найти или сменить работу на более интересную и конечно же здоровья (особенно ментального, выгорание штука такая, неприятная). И самое главное - не говнокодьте! Пишите красивый, эффективно работающий код и всё будет хорошо!)
Хочу передать слово коллегам:
Андрей Лебедев:
🔥5❤2
Не знаю, получилось ли у меня в этом году освоить новые знания и стать лучше как разработчик. Иногда кажется, что я забыл больше, чем узнал. Но в этом году я присоединился к замечательной команде канала «Код на салфетке», а также к проекту, который был инициирован моими друзьями. Я благодарен им за эти возможности и за неповторимую атмосферу на канале и во всех связанных с ним чатиках.
Всем нашим читателям и единомышленникам хочу пожелать в новом году приблизиться к достижению своих целей. И помните: как бы сложно ни было, вы не одни. Рядом есть люди, готовые помочь. Нужно только попросить.
Артур Мурзыев:
С Новым Годом, дорогие подписчики! Желаю вам процветания, всех благ в любых аспектах вашей жизни и успехов во всех делах!
Напишите в комментариях как прошёл год для Вас и какие планы на новый 2024 год!
Пост на сайте
Поддержать проект
#Код_на_салфетке #новый_год #поздравление
Всем нашим читателям и единомышленникам хочу пожелать в новом году приблизиться к достижению своих целей. И помните: как бы сложно ни было, вы не одни. Рядом есть люди, готовые помочь. Нужно только попросить.
Артур Мурзыев:
С Новым Годом, дорогие подписчики! Желаю вам процветания, всех благ в любых аспектах вашей жизни и успехов во всех делах!
Напишите в комментариях как прошёл год для Вас и какие планы на новый 2024 год!
Пост на сайте
Поддержать проект
#Код_на_салфетке #новый_год #поздравление
❤4🔥4👍1
Статистика сайта за месяц 04.12-04.01
Автор: Иван Ашихмин
Прошёл ещё месяц и даже сменился год! Что же у нас по статистике сайта?
Статистика продолжает расти! Хотя и была просадка перед новым годом. Доля поисковых запросов растёт, что не может не радовать (всё ещё ищу того, кто поможет с SEO 😭). На втором месте практически нога в ногу идут переходы из Dzen и прямые переходы на сайт по домену. Четвёртое и пятое место делят внутренние переходы и переходы из паблика в VK.
В сухом итоге:
- Посетители: Было 785, стало 1040. Прирост 32.48%.
- Переходы из Dzen: Было 13.1%, стало 8.69%. Падение 33.66%.
- Переходы из Telegram-канала: Было 18%, ушли из топа.
- Переходы из поиска: Было 58.3%, стало 69.4%. Прирост 19.03%.
- Переходы из VK сообщества: Было 0%, стало 3.06%.
Автор: Иван Ашихмин
Прошёл ещё месяц и даже сменился год! Что же у нас по статистике сайта?
Статистика продолжает расти! Хотя и была просадка перед новым годом. Доля поисковых запросов растёт, что не может не радовать (всё ещё ищу того, кто поможет с SEO 😭). На втором месте практически нога в ногу идут переходы из Dzen и прямые переходы на сайт по домену. Четвёртое и пятое место делят внутренние переходы и переходы из паблика в VK.
В сухом итоге:
- Посетители: Было 785, стало 1040. Прирост 32.48%.
- Переходы из Dzen: Было 13.1%, стало 8.69%. Падение 33.66%.
- Переходы из Telegram-канала: Было 18%, ушли из топа.
- Переходы из поиска: Было 58.3%, стало 69.4%. Прирост 19.03%.
- Переходы из VK сообщества: Было 0%, стало 3.06%.
🔥5