↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи

Награды

8 наград» 
8 лет на сайте 8 лет на сайте
16 февраля 2024
7 лет на сайте 7 лет на сайте
16 февраля 2023
6 лет на сайте 6 лет на сайте
16 февраля 2022
5 лет на сайте 5 лет на сайте
16 февраля 2021
4 года на сайте 4 года на сайте
16 февраля 2020
Был на сайте 26 августа 2016
Пол:мужской
Зарегистрирован:15 февраля 2016
Рейтинг:265
Показать подробную информацию

Блог


реализовать as_completed, sleep, ensure_future, .create_task, .call_later, .call_at, wait.

как методы/функции получают EventLoop

Handle, start_server, .create_server

I am a Django and aiohttp web developer. Proficient in building scalable web sites. My specialization is backend programming, but I am also good enough in frontend stuff (HTML, CSS and JavaScript), though as for me, backend is much more fun. I like solving difficult tasks in elegant way. My schedule is rather flexible, so I can get to work quickly and spend 7-8 hours for doing useful things every day. Feel free to write me any time :)
прогресс в задаче насколько возможно без блокировки -> возврат в цикл. Следующая задача из очереди - снова прогресс насколько возможно -> возврат в цикл и тд.

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

Для каждой блокирующей операции должно быть что-то, что даст нам понять, что операция больше не является блокирующей и что задание, связанное с этой операцией, можно смело снова класть в очередь заданий, тк когда до него дойдет очередь, оно совершенно точно будет способно продвинуться дальше в своем логическом развитии. Для операций I/O это 'что-то' - selectors.select(). Для операции 'получение item'а из очереди' - операция 'положить item в очередь'. Для операций, выполняющихся в другом потоке/процессе, - callback, который будет вызван, когда операция завершится.
threads, processes, pools, socketpair, pipes, fifos
/etc/letsencrypt/live/domain.com/fullchain.pem 2016-06-30
если next после логаута - профиль, перенаправлять на главную.
Страница в меню всего одна. На ней сразу же предоставляется csrf-token. При оформлении заказа отправляется ajax-запрос для проверки зарегистрирован ли юзер, и, если да, то назад приходит словарь с данными, которыми надо презаполнить форму.

messages!
Если переход из не-меню в меню, то полная загрузка страницы вместе с basket из session, если есть. На странице уже будут каталог и кнопки сортировки (скрытые).

Если переход из меню в не-меню, то отправка формы ajax-ом (если есть поля в форме), сохранение в сессии, потом полная загрузка страницы вместе с basket из session.

Если переход из меню в меню, то частичное обновление страницы.

Если переход из не-меню в не-меню, то полная загрузка страницы вместе с basket из session.

При добавлении item в корзину отправляется ajax-post-запрос с целью сохранения корзины в session, если посетитель вышел с сайта.
.whole width&height
input'ы переделать
[09.03 - 26.03] Chill-out

user and profile creation in single form at the same time

проверить регистрацию с уже зарегистрированным email

редактирование страниц через админ-панель (главная страница - смена акции, например; страница о доставке, изменение фотки блюда и тд)

график продаж в админ-панели

в меню высвечиваются все общие блюда + собственные блюда юзера

калорийность

зарегистрированные юзеры могут создавать свои блюда, которые будут сохранены в бд; анонимные могут только одноразово состряпать блюдо и заказать его, само блюдо не будет сохранено в базу

ведение статистики: самые популярные блюда и тп

история заказов

нажимаешь 'добавить в корзину' --> в корзину добавляется slug блюда. нажимаешь 'оформить заказ' --> на сервер отправляется форма со slug'ами --> юзеру возвращается форма для заполнения

на странице 'меню' сразу предоставляется пустая (без элементов, только с кнопкой 'оформить заказ') форма (в корзине), которая заполняется элементами формы при нажатиях кнопки 'добавить в корзину' <input type='number' name='<dish_name>' value='<amount>'>

JavaScript проверяет, не пуста ли корзина

Анонимное блюдо:
'Добавить ингредиент' --> в каком-то элементе все ингредиенты группируются (название:кол-во).
'Добавить в корзину' --> <input type='text' name='anonimous<N>:<amount>' value='<ingredient1>:200,<ingredient2>:100,...'>

Когда создается блюдо, указываются ингредиенты и их кол-во (<input type='number' name='<ingredient_name>' value='<amount>'>). На сервере автоматически высчитывается калорийность, составляется описание (рецепт, калории, белки и тп), вычисляется цена.

корзина остается заполненной...
sessions? временное сохранение. при добавлении элемента в корзину выполняется ajax-запрос?

При нажатии на любые другие кнопки (все, кроме 'Оформить заказ') форма корзины отправляется --> сохраняется в сессии --> потом следует редирект на нужную страницу (данные формы корзины вытаскиваются из сессии и отображаются на нужной странице, если должны там отображаться).

Обновляется не вся страница, а только часть.

Если в сессии есть данные, то, например, на главной странице отображать кнопку 'Перейти к оформлению заказа'. После того, как заказ сделан, удалять сессию. Либо удалить сессию после истечения определенного времени.

проверить QueryDict
Свернуть сообщение
Показать полностью
скрыть поле формы + initial
убрать поле целиком + добавить во время сохранения

Tag.objects.prefetch_related('startup_set')
.getElementsBy* -> что-то вроде queryset (NodeList или HTMLCollection), то есть изначально никакой поиск не осуществляется, просто записывается поисковый запрос.
parseInt, parseFloat, n.toFixed(5) --> string, n.toString(2), isNaN, isFinite, str.trim(), str.split('').

> parseInt('123', 2);
< 1

arr.splice(index[, deleteCount, elem1, ..., elemN]) --> returns arr of del.
.sort
.forEach(callable[, thisArg])
.map
.filter
.every
.some
.reduce

аргументы отделены от локальных переменных

Когда интерпретатор 'заходит' в область видимости, он создает объект LE, устанавливает ему свойство __proto__ (ссылка на родительский объект LE), сканирует область на предмет объявлений FD и var ...

LE
[[Scope]]

Фактически, мы всегда имеем дело не с переменными, а с объектами и их свойствами.

window - один глобальный объект на страницу.

Функция - подвид объекта.

Любая функция может иметь в себе this. Совершенно неважно, объявлена ли она в объекте или отдельно от него.
Значение this называется контекстом вызова и определяется в момент вызова функции.

Сама функция никак не запоминает this. Контекст в функцию нужно явно передать (вызвать в контексте объекта). ReferenceType.

Скобки получают из base свойство name и вызывают в контексте base.

При строковом преобразовании объекта используется его метод toString. Он должен возвращать примитивное значение, причём не обязательно именно строку.

Для числового преобразования используется метод valueOf, который также может возвратить любое примитивное значение. У большинства встроенных объектов valueOf не работает (возвращает сам объект и потому игнорируется), при этом для числового преобразования используется toString.

Вообще, в выражениях (бинарный +, сравнения и тп) объект сначала должен быть преобразован к примитивному типу. Для такого приведения всегда используется метод valueOf, если определен. Если нет - используется toString. Исключение - объекты Date. Бинарный + преобразует объект Date с использованием метода toString, хотя метод valueOf у объектов Date также определен.

Object.defineProperty(obj, property_name, descriptor);
Если свойство не создается, а переопределяется, то старый дескриптор объединяется с новым.

Метод - просто название. На самом деле, все методы объектов - это обычные функции, которые вызываются в контексте объекта. Поэтому методы можно одалживать.

Карринг (currying) или каррирование – термин функционального программирования, который означает создание новой функции путём фиксирования аргументов существующей.

setTimeout(user.sayHi, 1000);


JSON.parse(str, reviver)
JSON.stringify(data, replacer, indent)

Сериализация объекта.

window.onerror

Вызов приватного метода (локальной функции по факту) с явным указанием контекста, привязка контекста к локальной функции при объявлении, self.

Переопределение/расширение метода родителя.

__proto__ - чтение
Object.create(proto[, descriptors])

Func.prototype = {constructor: Func}

console.dir(obj)

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

При декорировании функции, возвращаемая обертка должна выглядеть так, будто это та же самая базовая функция, ведь эту обертку потом будут вызывать так, будто это базовая функция.
Свернуть сообщение
Показать полностью
- проверить id/pk, user.profile - exception. +++
- Добавить на страницу /admin/user/user/id/change/ ссылку на страницу с сообщениями юзера. Сделать вьюху в админке для просмотра всех сообщений юзера. +++

в request.POST могут быть поля, имеющиеся в форме, но не имеющиеся в модели.

max-width overrides width.

background-origin specifies the positioning area of the background images (default: padding-box).
background-clip specifies the painting area of the background (default: border-box).

Absolute size:
- Sets the text to a specified size
- Does not allow a user to change the text size in all browsers (bad for accessibility reasons)
- Absolute size is useful when the physical size of the output is known

Relative size:
- Sets the size relative to surrounding elements
- Allows a user to change the text size in browsers

The em size unit is recommended by the W3C.
1em is equal to the current font size. The default text size in browsers is 16px. So, the default size of 1em is 16px.

a:hover MUST come after a:link and a:visited
a:active MUST come after a:hover

list-style-position: inside - маркер входит в контент.

tr:nth-child(even) {background-color: #f2f2f2}

http://www.w3schools.com/cssref/css_selectors.asp

<div style="overflow-x:auto;">

<table>
... table content ...
</table>

</div>

outline - накладывается поверх margin
outline-offset

Setting the display property of an element only changes how the element is displayed and which properties can be applied to it, NOT what kind of element it is. So, an inline element with display: block; is not allowed to have other block elements inside it.

display: none;
visibility: hidden;

position: relative;
элемент как бы выдергивается из нормального потока и располагается на сетке поверх потока, но место, которое элемент занимал бы при static резервируется (размеры зарезервированного места учитывают размеры элемента).

position: absolute;
элемент выдергивается из нормального потока ..., место не резервируется. Элемент, относительно которого позиционируется эл. с position: absolute; принимается как бы за родительский элемент.

Если указать relative или absolute и не указать смещения, то элемент как бы останется на своем месте (визуально), хотя будет выдернут из потока.

http://www.w3schools.com/css/css_positioning.asp

overflow: auto;
...

Elements after a floating element will flow around it.

If an element is taller than the element containing it, and it is floated, it will overflow outside of its container.

http://www.w3schools.com/css/css_inline-block.asp

a {display: block;}

display: none + position: absolute + elem:hover ddelem = dropdown content

::before, ::after
Свернуть сообщение
Показать полностью
Показать 1 комментарий
Показать более ранние сообщения
ПОИСК
ФАНФИКОВ







Закрыть
Закрыть
Закрыть