«И даже DNS-сервера, которые не поддерживают рекурсию, обязаны отвечать списком корневых серверов» — с этим не согласен. Сейчас рекомендация — вообще никак не отвечать на запросы за пределами своей зоны, чтобы не быть инструментом для amplification-атаки. Источник: www.dns-oarc.net/oarc/articles/upward-referrals-considered-harmful.
Риски, похожие на описанные в стаье, возникают только при продаже заказчикам шкуры неубитого медведя. Компания, в которой я работаю, так не делает, а продает только готовые решения, поэтому и риски совсем другие (в основном — увольнение носителей какого-либо знания до того, как они это знание передадут другому). Речь из похожего может идти только о срыве только внутренних сроков, и в таком срыве всегда виноват тот, кто изначально заложил нереалистичный срок. Поэтому проголосовал «Знаем, но не применяем».
Еще один плюс предложенной конструкции: если таки при завинчивании шестирганник сорвет, то уже есть готовое коническое углубление для обычного экстрактора. Ничего рассверливать не нужно.
А вот камень от меня лично в огород линуксоидам на Dell'ах.
Пользователи Windows, прежде чем спалить динамики, должны были самостоятельно выкрутить громкость на максимум. В Linux даже этого не требуется. Эта веб-страница, если ее просматривать через любой браузер, основанный на Webkit-GTK или Qt-Webkit (т.е., например, Midori, Epiphany или Konqueror), при настройках PulseAudio по умолчанию, поставит громкость на максимум и, более того, не даст ее убавить штатными средствами без закрытия браузера.
Так как в Ubuntu настройки PulseAudio (flat-volumes = no) отличаются от таковых по умолчанию (flat-volumes = yes), там это не воспроизводится.
Наш багтрекер не поддерживает вложенные задачи. Однако, руководство не умеет разбивать задачи на этапе формулировки (например, сваливает совершенно несвязанные проблемы из нескольких жалоб пользователей в одну задачу и обзывает ее «проблемы, найденные пользователями» и ставит milestone на следующий релиз). Тактика «закрывать абсолютно любую задачу, содержащую список, как невалидную по формальной причине необходимости разбить» только привела к конфликтам. Не знаю, помогли бы в такой ситуации подзадачи или нет, но, думаю, не попробовав, не узнаю.
У меня на похожей задаче (выгрузка статистики пользовательских DNS-запросов в CSV), когда она возникла, была очень жесткая позиция: только потоковая обработка. Никаких переменных, хранящих весь результат запроса (потенциально сотни тысяч строк). Любая попытка сложить все в память (в том числе любой вызов C-функции mysql_fetch_result()) автоматически является багом. Вот рекомендации, как этого бага избежать.
Во всех случаях перед формированием очередного запроса необходимо полностью прочитать результат предыдущего.
К сожалению, при использовании с Django, SSCursor немедленно делает приложение совершенно не поддающимся отладке, и вот почему. Если при обработке очередной (не последней) строки view выбросит исключение, то вызовется стандартный обработчик исключений. Он постарается откатить транзакцию и отправить traceback куда надо. Только вот попытка откатить транзакцию проваливается: выбрасывается исключение ProgrammingError, так как SQL-запрос ROLLBACK пришел до того, как все строки прочитаны. В итоге первоначальное исключение теряется, а в лог и в почту попадает «безволосая черная дыра» в виде ProgrammingError. Собственно, я считаю это багом в Django: code.djangoproject.com/ticket/21777
Вот костыль для тех случаев, когда патчить Django запрещено.
# Workaround against https://code.djangoproject.com/ticket/21777
# In short: gets meaningful tracebacks in apache log even if
# SSCursor is not completely consumed by the application when
# an exception occurs
from django.core.signals import got_request_exception, request_finished
from MySQLdb import DatabaseError
from MySQLdb.cursors import SSCursor
from threading import local
store = local()
class SafeSSCursor(SSCursor):
def execute(self, *args, **kwargs):
if not hasattr(store, 'cursors'):
store.cursors = []
if not self in store.cursors:
store.cursors.append(self)
return super(SafeSSCursor, self).execute(*args, **kwargs)
def expunge_cursors(**kwargs):
store.cursors = []
def consume_cursors(**kwargs):
if not hasattr(store, 'cursors'):
return
for cursor in store.cursors:
try:
for item in cursor:
pass
except DatabaseError:
pass
store.cursors = []
request_finished.connect(expunge_cursors)
got_request_exception.connect(consume_cursors)
Считаю, что навязывать какой-либо конкретный вариант неправильно, должна быть конкуренция как с участием частных компаний, так и государственных, так и должен остаться доступен вариант «нефильтрованный интернет + надзор глазами родителей». Контроль со стороны государства здесь недопустим, а то получим ситуацию «формально поставщиков много, но от прокурорских проверок спасает только этот».
Собственно, так оно и делается — пропихивается одно конкретное решение от NetPolice. Можете считать это распилом, можете не считать — дело ваше. У меня мнения нет.
Белые списки — не выход. Мне, в силу профессиональной деятельности, известно несколько случаев, когда за их использование прокурорская проверка вынесла предписание по типу «цензура у нас запрещена».
Видеокарта встроенная в процессор. Собственно, в Linux использовать что-либо, отличное от Intel, не имеет смысла (иначе разработчики игнорируют все багрепорты).
Поиск нового блока питания уже идет. В случае неуспеха заменю процессор на Intel Core i7 4770T.
Пользователи Windows, прежде чем спалить динамики, должны были самостоятельно выкрутить громкость на максимум. В Linux даже этого не требуется. Эта веб-страница, если ее просматривать через любой браузер, основанный на Webkit-GTK или Qt-Webkit (т.е., например, Midori, Epiphany или Konqueror), при настройках PulseAudio по умолчанию, поставит громкость на максимум и, более того, не даст ее убавить штатными средствами без закрытия браузера.
Так как в Ubuntu настройки PulseAudio (flat-volumes = no) отличаются от таковых по умолчанию (flat-volumes = yes), там это не воспроизводится.
CVE ID уже запрошен, но не получен.
1. Раз проблема
2. Два проблема
3. Три проблема
И тикет был в итоге разбит ровно по пунктам 1, 2, 3.
C: используйте mysql_use_result()
PHP: выполняйте небуферизованные запросы с флагом MYSQLI_USE_RESULT, см. www.php.net/manual/en/mysqlinfo.concepts.buffering.php
Python: есть класс MySQLdb.cursors.SSCursor.
Во всех случаях перед формированием очередного запроса необходимо полностью прочитать результат предыдущего.
К сожалению, при использовании с Django, SSCursor немедленно делает приложение совершенно не поддающимся отладке, и вот почему. Если при обработке очередной (не последней) строки view выбросит исключение, то вызовется стандартный обработчик исключений. Он постарается откатить транзакцию и отправить traceback куда надо. Только вот попытка откатить транзакцию проваливается: выбрасывается исключение ProgrammingError, так как SQL-запрос ROLLBACK пришел до того, как все строки прочитаны. В итоге первоначальное исключение теряется, а в лог и в почту попадает «безволосая черная дыра» в виде ProgrammingError. Собственно, я считаю это багом в Django: code.djangoproject.com/ticket/21777
Вот костыль для тех случаев, когда патчить Django запрещено.
Считаю, что навязывать какой-либо конкретный вариант неправильно, должна быть конкуренция как с участием частных компаний, так и государственных, так и должен остаться доступен вариант «нефильтрованный интернет + надзор глазами родителей». Контроль со стороны государства здесь недопустим, а то получим ситуацию «формально поставщиков много, но от прокурорских проверок спасает только этот».
Количество недовольных не имеет значения, пока они не могут ни на что повлиять.
В опенсорсных драйверах не работает передача звука 5.1 по HDMI. Частично решается костылями вроде моего dcaenc.
Поиск нового блока питания уже идет. В случае неуспеха заменю процессор на Intel Core i7 4770T.