• JavaScript фреймворк или библиотека?

    smanioso
    @smanioso
    Отмечайте ответы на свои вопросы!
    Довольно интересные мысли по этому поводу изложены здесь: https://andywalpole.me/#!/blog/142134/2015-the-end...
    Фреймворк - это ОЧЕНЬ хорошо для тех, кто не знает с чего начать. С ростом профессионализма можно задуматься о своем видении построения архитектуры.
    Ответ написан
    Комментировать
  • Кто виноват в срыве сроков?

    @Dr_Gonzo
    http://mahamba.com
    Тот, кто принимал решение и апрувил его! Т.е. оба
    Ответ написан
    Комментировать
  • Кто виноват в срыве сроков?

    @McBernar
    Виноват тот, кто назначил такие сроки, не разобравшись в вопросе.
    Ответ написан
    6 комментариев
  • Как организовать хранение последних изменений в БД проекта?

    @1nd1go
    code.google.com/p/flyway/ — хороший тул, а главное концепция.

    Мы в частности сначала сами делали файлики типа
    01.init_tables.sql
    02.add_one_table.sql
    03.add_another.JIRA-1251.sql

    Так и трэкали. Flyway делает многгое за вас, в частности делает метатаблицу, где отражает изменения и показывает текущую версию схемы.
    Ответ написан
    Комментировать
  • Зачем нужны миграции?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Зачем нужны миграции?

    Если по хорошему, то реальное их практическое применение только в том, что бы создать структуру таблиц, например, при установке какого-то бандла. Допустим, у Вас есть бандл "Новости", что бы Вам "руками" не лезть в базу и не запускать, пусть даже готовый SQL - миграции помогут Вам сделать это в автоматическом или полу-автоматическом режиме.

    а если постоянно таблицу с дынными надо поддерживать в актуальном состоянии? не проще ли держать sql-dump этой таблицы в git/svn ?
    На счёт SVN'а (по моему, он вымер как класс, даже Hg/Mercurial почти не осталось) не скажу, но мы так и делаем, храним дамп базы в репозитории, в некоторых случаях даже используем хуки Git'а, которые сверяют версии БД и при изменении - переписывают соотв. файл дампа и добавляют его к комиту.

    И основная проблема (*исключительно в нашей практике) даже не столько в самих миграциях как таковых, а в ущербности их возможностей, в большинстве случаев. Не редко, миграции покрывают лишь малую часть возможностей БД, обычно это: основные типы полей, внешние ключи и индексы. Таких вещей как: триггеры, хранимые процедуры/функции, виртуальные поля, View'шки, типы данных свойственные конкретной БД или просто "не популярные" типы данных, такие например, как GEOMETRY - очень часто, в миграциях не поддерживаются. Так же, как например, я пока не встречал механизмов миграций, которые бы могли нормально создавать такой элементарный тип, как ENUM в PostgreSQL, не говоря уже про более сложные, составные типы и т.д.

    Касательно Symfony, она как и многие другие фреймворки, не поддерживает даже такой типа данных как "ARRAY", вернее то, что в Symfony называется ARRAY - это по факту строка, с сериализованым массивом, а не массив в "чистом виде", который (как тип данных) есть например, в том же PostgreSQL. В виду чего, было бы удивительно ждать чего-то подобного от миграций.

    Ни в одном серьёзном/крупно проекте, я пока не видел настолько безумного администратора БД, который бы позволил модифицировать "живую" БД с помощью механизма миграций на уровне фреймворка. Только SQL-код, после предварительного анализа.

    На основании всего этого, мы для себя сделали вывод, что миграции отлично подходят для автоматизации создания примитивных болванок в БД, например, тех же "новостей", не более того.

    P.S. Я знаю, что для БД существуют специализированные механизмы/программы, для контроля БД, включая данные. Детально пока не разбирался, но подобная возможность ("Контроль версий БД") заявлена, например, в программе SQL Manager for PostgreSQL (для Windows).
    Ответ написан
  • Лимиты на HTTP кэширование браузером?

    @Fixid
    Зависит от браузера
    Зависит от браузера
    Зависит от браузера

    Браузер ориентируется на ответ сервера, если ему сказали закэшировать вот этот файл в 100мб, он закэширует. Проверяел на Firefox 5x

    Но лимиты все равно есть.
    Ответ написан
    2 комментария
  • Способы изменения параметров config.py?

    sim3x
    @sim3x
    Лучше используйте ini, json
    Ответ написан
    Комментировать
  • Способы изменения параметров config.py?

    @artem78
    Как правильно сказал товарищ sim3x, для этой цели больше подходит использование конфигурационных файлов. Также можно хранить настройки в БД.

    Изменить значение в config.py можно так:
    import fileinput
    import re
    import sys
    
    def setParam(param, value):
    	value = value.replace('"', '\"') # Экранируем двойные кавычки
    	for line in fileinput.input("config.py", inplace=True):
    		line = re.sub('^(\s*%s = ).*$' % param, '\\1"%s"' % value, line)
    		sys.stdout.write(line)
    
    setParam('VAR1', 'bye')
    Ответ написан
    Комментировать
  • Браузер игнорирует keep-alive?

    @Mercury13
    Программист на «си с крестами» и не только
    Это другая штука, имеющая опосредованное отношение к keep-alive. Это загрузка информации в несколько потоков.

    Почему шесть соединений, а не пять — другой вопрос. Я бы предположил вот что. Браузер разобрал index.html и увидел там картинку. Создаём новое HTTP-соединение (нешифрованное) — два пинга спустя поехали данные. Задействуем имеющееся — один пинг спустя. С небольшим пингом браузер просто подумал, что быстрее будет вот так. А может, браузер просто туп и если мы укладываемся в количество соединений с одним сервером — создаём новые, да и всё.

    А вот то, что все картинки в разных потоках — это верно. Если считать скорость сети «бесконечной», для каждой из них информация пойдёт с запозданием в два пинга. Работай мы в один поток — первая пришла бы с запозданием в 2 пинга, вторая в 3 пинга, третья в 4 пинга… А вот протоколы SPDY и HTTP/2 позволяют сказать: «Дай мне картинки А, Б и В»,— и они все, ОДНИМ СОЕДИНЕНИЕМ, придут с запозданием в два пинга.

    Другими словами:
    HTTP (все метки времени — когда они были посланы с клиента/приняты клиентом):
    К: SYN: (+0 пингов)
    С: SYN+ACK (+1 пинг)
    К: ACK (+1 пинг)
    К: Запрос 1 (+1 пинг)
    С: Ответ 1 (+2 пинга)
    К: Запрос 2 (+2 пинга)
    С: Ответ 2 (+3 пинга)

    HTTP2:
    К: SYN: (+0 пингов)
    С: SYN+ACK (+1 пинг)
    К: ACK (+1 пинг)
    К: Запросы 1, 2 (+1 пинг)
    С: Ответы 1, 2 (+2 пинга)

    На реальных «не очень быстрых» соединениях играют роль не только пинги, но и скорость передачи. Тогда картинки начнут появляться не по одной, а по восемь (или сколько там соединений) — это тоже может повлиять на впечатление от браузера. К тому же если случился затор на шлюзе локальной сети — тогда, если одно соединение забарахлит, другие что-то привезут. А если сеть не очень хорошо сконфигурирована — это ещё и ввосьмеро увеличит скорость передачи (реально в начале 2000-х качал в универе 10-мегабайтный драйвер за перемену в 100 потоков).

    Я бы посоветовал сделать штук двадцать картинок — и тогда начнётся повторное использование имеющихся соединений.
    Ответ написан
    Комментировать