Производство
<<  Компьютерные по дисциплине организационное поведение «Цеоформинг» Каталитический процесс производства моторных топлив  >>
Почему стоит понижать кульутру производства
Почему стоит понижать кульутру производства
Культура производства
Культура производства
Культура производства
Культура производства
4
4
С защитным кожухом гильотина требует меньшей культуры производства от
С защитным кожухом гильотина требует меньшей культуры производства от
Примеры завышенной культуры производства
Примеры завышенной культуры производства
Пример №1
Пример №1
Пример №1
Пример №1
Docstrings
Docstrings
Docstrings
Docstrings
Антипример №1, Debug Toolbar
Антипример №1, Debug Toolbar
Антипример №1, Debug Toolbar
Антипример №1, Debug Toolbar
Антипример №1, Debug Toolbar
Антипример №1, Debug Toolbar
Сборка проекта
Сборка проекта
Сборка проекта
Сборка проекта
Сборка проекта
Сборка проекта
Пример №2, fixtures
Пример №2, fixtures
Пример №2, fixtures
Пример №2, fixtures
Пример №3, спрайты
Пример №3, спрайты
Пример №3, спрайты
Пример №3, спрайты
Пример №3, спрайты
Пример №3, спрайты
Пример №4, urls и javascript
Пример №4, urls и javascript
Пример №4, urls и javascript
Пример №4, urls и javascript
Пример №4, urls и javascript
Пример №4, urls и javascript
Пример №4, urls и javascript
Пример №4, urls и javascript
Пример №4, urls и javascript
Пример №4, urls и javascript
Пример №5, протоколы
Пример №5, протоколы
Пример №5, протоколы
Пример №5, протоколы
Изменения всегда нужно делать в паре Не отлаживается статическим
Изменения всегда нужно делать в паре Не отлаживается статическим
Было переписано так: data = { 'event': visit, # объект класса Event }
Было переписано так: data = { 'event': visit, # объект класса Event }
Пример №6, меню приложений
Пример №6, меню приложений
<div class="submenu"> <a href="{% url photos %}">Фотоальбом</a> <a
<div class="submenu"> <a href="{% url photos %}">Фотоальбом</a> <a
Сложная вёрстка повторяется в шаблонах меню
Сложная вёрстка повторяется в шаблонах меню
urlpatterns = patterns('views', item(url(r'^photos$', 'photos',
urlpatterns = patterns('views', item(url(r'^photos$', 'photos',
<Div class="submenu"> {% for item in submenu %} {# права уже проверены
<Div class="submenu"> {% for item in submenu %} {# права уже проверены
Пример №6, меню приложений, итоги
Пример №6, меню приложений, итоги
Как можно делать новое приложение
Как можно делать новое приложение
Резюме
Резюме

Презентация на тему: «Почему стоит понижать кульутру производства». Автор: Ирина. Файл: «Почему стоит понижать кульутру производства.ppt». Размер zip-архива: 165 КБ.

Почему стоит понижать кульутру производства

содержание презентации «Почему стоит понижать кульутру производства.ppt»
СлайдТекст
1 Почему стоит понижать кульутру производства

Почему стоит понижать кульутру производства

На что обращать внимание, создавая приложения для Django Дмитрий Лебедев http://course.ryba4.com skype: siberianoNsk +7 923 732 1337

2 Культура производства

Культура производства

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

2

3 Культура производства

Культура производства

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

3

4 4

4

5 С защитным кожухом гильотина требует меньшей культуры производства от

С защитным кожухом гильотина требует меньшей культуры производства от

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

5

6 Примеры завышенной культуры производства

Примеры завышенной культуры производства

Что должно быть синхронным, лежит далеко Слово “прописывать” Огромное количество настроек, которые надо запомнить Сложные протоколы

6

7 Пример №1

Пример №1

Документация

Ещё один пример данных, которые должны быть синхронными. Код – Документация

7

8 Пример №1

Пример №1

Документация

Недостатки документации в Wiki Неохота исправлять Неточности незаметны Размыта ответственность Не интегрируется с IDE или консолью

8

9 Docstrings

Docstrings

9

In [65]: zip? Type: builtin_function_or_method Base Class: <type 'builtin_function_or_method'> String Form:<built-in function zip> Namespace: Python builtin Docstring: zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)] Return a list of tuples, where each tuple contains the i-th element from each of the argument sequences. The returned list is truncated in length to the length of the shortest argument sequence.

10 Docstrings

Docstrings

Вместе с кодом Исправить — дело нескольких секунд Неточности заметны сразу Ответственность — на авторе, проверяется на обзоре кода Легко получить документацию из консоли или IDE Сделать документацию в виде HTML можно при помощи инструментов В Wiki храним то, что никуда не пристраивается

10

11 Антипример №1, Debug Toolbar

Антипример №1, Debug Toolbar

INSTALLED_APPS = ( ... 'debug_toolbar',

11

12 Антипример №1, Debug Toolbar

Антипример №1, Debug Toolbar

MIDDLEWARE_CLASSES = ( ... 'debug_toolbar.middleware.DebugToolbarMiddleware', ... )

12

13 Антипример №1, Debug Toolbar

Антипример №1, Debug Toolbar

13

INTERNAL_IPS = ('127.0.0.1',)

14 Сборка проекта

Сборка проекта

14

$ hg clone ssh://bitbucket.org/siberiano/course.ryba4.com course $ cd course $ make run ... Development server is running at http://0.0.0.0:8001/ Quit the server with CONTROL-C. ... $ make rebuild Rebuilding the database...

15 Сборка проекта

Сборка проекта

Большая инструкция приводит к ошибкам Обновившиеся зависимости — это отрезанные пальцы

15

16 Сборка проекта

Сборка проекта

Нужен инструмент сборки, чтобы собрать зависимости проекта на новом месте развернуть базу данных пересоздать базу данных зафиксировать версии зависимостей Существующие решения: django-fab-deploy fastdev-django самодельное решение на virtualenv или bootstrap.py

16

17 Пример №2, fixtures

Пример №2, fixtures

Файлы fixtures нужно пложить по таким путям: apps/polls/dev_fixtures/initial_data.json apps/messages/dev_fixtures/initial_data.json В настройках приходится указать FIXTURE_DIRS = ( 'apps/polls/dev_fixtures/', 'apps/messages/dev_fixtures/', )

17

18 Пример №2, fixtures

Пример №2, fixtures

Пути этих файлов строгие и уже содержат всю необходимую информацию, чтобы их найти. Решение проблемы: FIXTURES_DIRS = tuple(ln.rtrim() for ln in os.popen('find . -path "*apps*dev_fixtures"'))

18

19 Пример №3, спрайты

Пример №3, спрайты

.folder.opened { width: 16px; height: 16px; background-image: url("icons.gif"); background-position: -64px -16px; }

19

20 Пример №3, спрайты

Пример №3, спрайты

Настройки для приложения, делающего спрайты: sprite=Sprite.create_from_local_files(['/path/to/first/file', '/path/to/second/file'])

20

21 Пример №3, спрайты

Пример №3, спрайты

# settings.py SPRITES_DIR = 'static/img/sprites' sprites/ sprite_one/ icon1.png icon2.png sprite_two/ icon3.png icon4.png

21

22 Пример №4, urls и javascript

Пример №4, urls и javascript

Статический файл js: $.ajax({url: '/path/to/API/', …}) Urls.py: url(r'^api/$', api_view, name='api') Связка разваливается, когда изменяют одну из этих 2 строк.

22

23 Пример №4, urls и javascript

Пример №4, urls и javascript

Функция в JS: reverse_url = function(url_name, params){ params = params || {}; $.extend(params, {url_name: url_name}) return '/reverse_url/?' + $.param(params); };

23

24 Пример №4, urls и javascript

Пример №4, urls и javascript

Middleware: class UrlReverseMiddleware(object): def process_request(self, request): if request.path_info == '/reverse_url/': query_dict = request.GET.copy() url_name = query_dict.pop('url_name')[0] args = query_dict.pop('args', []) if args == ['']: args = []

24

25 Пример №4, urls и javascript

Пример №4, urls и javascript

try: request.path = request.path_info = reverse(url_name, args=args) except NoReverseMatch: raise Http404 request.GET = QueryDict(query_dict.urlencode())

25

26 Пример №4, urls и javascript

Пример №4, urls и javascript

Использование: reverse_url('complicated_url', {args: [1, 2], param1: 3}); /reverse_url/?url_name=complicated_url&args=[1, 2]&param1=3 Преимущества: Адрес можно перемещать Можно искать использование адреса по его имени

26

27 Пример №5, протоколы

Пример №5, протоколы

Так можно: def view1(request, arg1, arg2): pass def view2(request, arg1, arg2): pass

27

28 Пример №5, протоколы

Пример №5, протоколы

Такого стоит избегать: data ={ 'location': place.name, 'date': visit.date, 'event': 'visit', 'type_of_' + place.__class__.__name__: place.place_type, }

28

29 Изменения всегда нужно делать в паре Не отлаживается статическим

Изменения всегда нужно делать в паре Не отлаживается статическим

анализатором Не отлаживается дебаггером

29

30 Было переписано так: data = { 'event': visit, # объект класса Event }

Было переписано так: data = { 'event': visit, # объект класса Event }

# visit.place — место # visit.user — человек

30

31 Пример №6, меню приложений

Пример №6, меню приложений

Много файлов apps/app/menu.html Много файлов templates/app/url.py

31

32 <div class="submenu"> <a href="{% url photos %}">Фотоальбом</a> <a

<div class="submenu"> <a href="{% url photos %}">Фотоальбом</a> <a

href="{% url calendar %}">Календарь</a> {% if request.user.is_authenticated() %} <a href="{% url inbox %}">Входящие сообщения {% if request.user.new_msg %} <b>({{ request.user.new_msg }} новых)</b> {% endif %} </a> {% endif %} {% if request.user.is_authenticated() %} <a href="{% url create_request %}"> Подать заявку</a> {% endif %} </div>

32

33 Сложная вёрстка повторяется в шаблонах меню

Сложная вёрстка повторяется в шаблонах меню

33

34 urlpatterns = patterns('views', item(url(r'^photos$', 'photos',

urlpatterns = patterns('views', item(url(r'^photos$', 'photos',

name='sport_photos'), caption='Фотографии'), item(url(r'^calendar$', 'calendar', name='sport_calendar'), caption='Календарь'), item(url(r'^inbox$', 'inbox', name='sport_inbox'), caption='Входящие', template= 'sport/menu_inbox.html'), item(url(r'^request$', 'create', name='sport_create_request'), caption='Подать заявку'), url(r'^ajax_request$', 'ajax', name='sport_ajax'), )

34

35 <Div class="submenu"> {% for item in submenu %} {# права уже проверены

<Div class="submenu"> {% for item in submenu %} {# права уже проверены

#} {{ item }} {% endfor %} </div>

35

36 Пример №6, меню приложений, итоги

Пример №6, меню приложений, итоги

Было

Стало

Много шаблонов с меню Много файлов с url Проверка прав доступа в view Проверка прав доступа в шаблонах

Много файлов с url Проверка прав доступа в view Функция регистрации пункта меню Функция выдачи меню в контекст

36

37 Как можно делать новое приложение

Как можно делать новое приложение

Проверить, нет ли готовых решений Определить кто им пользуется из разработчиков как ему удобнее им пользоваться какие данные (шаблоны, статические файлы, адреса) потребуются Поместить минимальный набор данных на нужные места Написать приложение под эти данные

37

38 Резюме

Резюме

Принципы.

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

38

«Почему стоит понижать кульутру производства»
http://900igr.net/prezentacija/ekonomika/pochemu-stoit-ponizhat-kulutru-proizvodstva-252137.html
cсылка на страницу
Урок

Экономика

125 тем
Слайды
900igr.net > Презентации по экономике > Производство > Почему стоит понижать кульутру производства