Архив автора: admin

Абстрактные классы для коллекций

Пусть мы сделали какой-то класс для хранения набора данных. Например, настроек вида ключ -> значение:

class Settings:

def __init__(self):
self._data = {}

def add_property(self, key, value):
assert isinstance(key, str), key
self._data[key] = value

def get_property(self, key):
assert isinstance(key, str), key
return self._data[key]

И тут нам в голову приходит удачная идея, что было бы здорово вместо вызова settings.get_property('key') использовать квадратные скобки как для dict: settings['key']:

def __getitem__(self, key):
return self.get_property(key)

Что не так?
То, что наш класс стал отчасти походить на readonly dict (он же mapping) — но он не реализует весь предполагаемый контракт.
Так, я привык, что если класс похож на readonly dict, то он позволяет узнать количество элементов в нём. Добавляем __len__:

def __len__(self):
return len(self._data)

Всё ещё не хорошо. Для mapping обычно можно итерироваться по ключам. Добавление __iter__ решает проблему:

def __iter__(self):
return iter(self._data)

Всё? Нет! Хочется ещё проверять на наличие ключа: key in settingsdict ведь это позволяет!
Можем добавить метод __contains__ — а можем вспомнить, что есть класс collections.abc.Mapping.
Это абстрактный базовый класс, задающий контракт для неизменяемого словаря.
Описание того, что таке абстрактный базовый класс — здесь
Просто наследуемся от Mapping:

from collections.abc import Mapping

class Settings(Mapping):

# ...

В качестве бесплатного бонуса получам поддержку .get(), .keys(), .items(), .values(), __eq__ и __ne__.
Реализация этих методов не оптимальная с точки зрения производительности, но она уже есть из коробки. К тому же всегда можно добавть свой вариант, который будет работать быстрее стандартного (если мы знаем как это сделать).
Если мы забудем реализовать какой-то критически важный метод — при создании экземпляра класса получим исключение:

>>> settings = Settings()
TypeError: Can't instantiate abstract class Settings with abstract methods __iter__

В стандартной библиотеке есть большой набор абстрактных базовых классов:

  • ByteString
  • Callable
  • Container
  • Hashable
  • ItemsView
  • Iterable
  • Iterator
  • KeysView
  • Mapping
  • MappingView
  • MutableMapping
  • MutableSequence
  • MutableSet
  • Sequence
  • Set
  • Sized
  • ValuesView

Очень рекомендую изучить набор методов, реализуемых этими классами — помогает понять систему типов собственно Питона.
При необходимаости можно (и нужно) написать свои.
А в заключение забавный пример.
В библиотеке sqlalchemy есть класс RowProxy для строки-кортежа, получаемой в результате SQL запроса.
Класс выглядит как mapping: имеет длину, .keys(), .items(), .__contains__() и все прочие нужные методы. Позволяет получать значение как по позиционному номеру так и по названию колонки в базе данных.
При этом он реализует контракт Sequence (как у tuple).
Т.е. iter(row) возвращает данные, а не названия колонок. И это немного сбивает с толку: выглядит как утка, а крякает как поросёнок.
В оправдание sqlalchemy могу сказать, что RowProxy появился в самой первой версии алхимии, еще до того как в Питон добавили collections.abc. А потом что-то менять стало поздно.
Но сейчас при разработке собственных библиотек стоит придерживаться устоявшихся стандартов и активно применять абстрактные базовые классы для коллекций.

Автор: Andrew Svetlov

Как исправить ошибку 404 или Not Found («не найдено»)

WordPress-это мощная CMS. Иногда незначительная ошибка может сделать вашу статью или весь сайт кроме главной страницы недоступным. Найти решение для сайта на WordPress — проблема несложная. Ранее мы рассмотрели 14 самых распространенных проблем пользователей CMS WordPress. Это ошибка установления соединения с базой данных и внутренняя ошибка сервера. Еще одна распространенная проблема, с которой большинство пользователей WordPress сталкиваются в какой-то момент при открытии записей:  это ошибка 404  или «не найдено». В этой статье мы расскажем вам об ошибке 404, и как исправить эту ошибку.

В данном случае пользователь сможет получить доступ к админ. панели сайта на WordPress, и к главной странице сайта, но при переходе на отдельную страницу они получают 404 ошибку: не найдена. Прежде всего, не нервничайте, в основном ваши посты до сих пор существуют и полностью в безопасности. Обычно это происходит, если ваш файл .htaccess был удален или что-то (обычно какой нибудь плагин) перезаписал правила. Мы расскажем вам о последовательности действий, что нужно сделать, чтобы  исправить правила.

Зайти в Настройки » Постоянные ссылки, и внизу нажмите на кнопку «Сохранить изменения».

Как исправить ошибку 404 или Not Found («не найдено»)

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

Войдите на ваш сервер через FTP и отредактируйте файл .htaccess, который расположен в корне сайта, где находятся настройки сайта, если нет его то тогда создайте его там. Самое первое, что вы должны сделать, это сделать файл временно доступным для записи, изменив разрешения на 666. После того как сделали доступным файл для записи, добавить код в ваш .htaccess файл:

# BEGIN WordPress

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteRule ^index.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

</IfModule>

# END WordPress

 

Не забудьте возвратить разрешение обратно на 660.

Устранение на локальном сервере

Зачастую разработчики и  дизайнеры устанавливают, для удобства, локальный WordPress на свой компьютер, используя локальный сервер для тестирования. Если вы хотите использовать довольно часто, то Вам необходимо включить rewrite_module в вашей конфигурации Apache файл mamp, сервер WAMP, или XAMPP.

Мы написали учебник здесь о том, как включить пользовательские постоянные ссылки в локальной среде WordPress.

Мы надеемся, что данная статья помогла решить вам проблему ошибку 404  «не найдено». У вас получилось решить проблему с помощью нас? Или у вас есть другое решение, которое помогло вам? Пожалуйста, расскажите о нём в комментариях ниже. Мы хотели бы сделать эту статью всеобъемлющей для пользователей, которые столкнулись с данной ситуацией.



2015-06-04T09:25:22
CMS WordPress

​Рис с овощами и креветками Термомикс ( для ТМ5).

на 4 порции

Ингредиенты:

  • 800 г воды
  • 1 ст. л. оливкового масла
  • 2 ч. л. соли
  • 200 г цуккини (кружками 0,5 см)
  • 400 г цветной капусты (разобрать)
  • 450 г очищенных креветок
  • 320 г риса Басмати (18-20 мин варка)
  • 1 ч. л. сухой петрушки Читать

Диеты американских астронавтов

Тип диеты — малоуглеводная.

Убыль веса — 2-3 кг в неделю.

space_027-cropДиета Американских астронавтов ничем не отличается от кремлевской диеты. Кроме этого, можно с уверенностью сказать, что именно эта диета послужила основой для создания и раскрутки очень популярной, в настоящее время, кремлевской диеты.

Появилась диета в нашей стране благодаря Юрию Лужкову. В начале, она имела довольно секретное название:  «Условная эффективность питания. Применяется при разработке питания для военных и астронавтов США». Этой диетой увлекался Юрий Лужков и его супруга Елена Батурина, а затем, по цепочке, все тогдашнее руководство Москвы. Постепенно диета поменяла название и превратилась в знаменитую кремлевку.

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

Разрешено употребление любой белковой пищи, включая: мясо, рыбу, сыр, овощи с малым количеством углеводов и другую пищу с «низкой стоимостью». Причем, потребление продуктов с низкой стоимостью разрешается в любом объеме, поэтому во время применения этой диеты не ощущается чувство голода. Однако следует помнить, что чрезмерное увлечение белковыми продуктами во время диеты может привести к сильным запорам. Поэтому, обязательно включайте в рацион как можно больше разрешенных овощей и старайтесь употреблять полезные белки, исключая колбасы, копчености, жирные сорта мяса, жареное мясо. Старайтесь отдавать предпочтение постному мясу, мясу птицы, морепродуктам. Читать

Как отключить Wi-Fi на роутере

Для того чтобы отключить Wi-Fi на роутере нужно войти в веб-интерфейс, найти там функцию, отвечающую за беспроводную связь, и отключить ее. Для начала расскажем о том, как войти в веб-интерфейс. Читать

Как исправить белый экран смерти в WordPress

Если вы используете WordPress продолжительное время, тогда вы наверняка столкнулись с белым экраном смерти множество раз. В WordPress белый экран смерти — это один из тех крайне неприятные проблемы, такие как ошибка установления подключения к базе данных. Причина, почему этот вопрос раздражает пользователей, в том что он блокирует вас в вашей панели администратора WordPress. Потому что нет вывода ошибок, Вы находитесь в замешательстве, и не знаете, в чем кроется проблема. Худшее, что про белый экран смерти заключается в том, что иногда это повлияет только на отдельной части сайта. Вы можете наблюдать белый экран смерти в вашей панели администратора, а все остальное работает отлично. В других случаях, вы можете увидеть его на конкретном месте, тогда как все функции сайта работают без проблем. В данной статье мы предложим вам методы исправления белого экрана смерти в WordPress, рассмотрев несколько различных решений.

Примечание: перед внесением любых изменений на ваш сайт, убедитесь, что у вас есть достаточные резервные копии.

Почему вы получаете эту ошибку?

Зачастую, когда вы наблюдаете белый экран смерти, то это означает исчерпан лимит памяти. Причины могут быть разные, это может быть вызвано плагином, из-за которого не функционирует ваш сайт. Это также может быть вызвано некачественно разработанной темы, которые вы используете. Это может также означать, что есть проблема у вашего веб-хостинг-сервер. Поскольку проблема может быть вызвана различными причинами, необходимо рассмотреть  различные варианты устранения.

Проблема возникает на других сайтах?

Если у вас множество сайтов, то следующим шагом будет проверка других сайтов на белый экран смерти. Проверьте, ошибка происходит на всех сайтах или только на одном домене. Если проблема со всеми сайтами на одном сервере, то это однозначно указывает на то что у вашего веб-хостинг-провайдера возникли некоторые проблемы. Однако, если проблема только с одним сайтом, то это круг сужается до проблемного плагина или темы, которых вы используете.

Увеличить лимит памяти

Обычно эта проблема происходит потому, что ваша память исчерпана. Используйте наш учебник о том, как увеличить память для PHP в WordPress.

Отключение всех плагинов

Если увеличение лимита памяти не помогает, или если у вас высокий лимит памяти вроде 256 МБ или 512 МБ, то вам нужно начать поиск и устранение неисправностей. Наш опыт в устранении этой проблемы, мы всегда находили, что проблема либо с конкретным плагином или темой. Давайте отключим все плагины.

Используйте инструкции о том, как деактивировать все плагины для WordPress в один раз.

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

Заменить тему с темой по умолчанию

Если модуль устранения неполадок не помогло решить проблему, тогда вы должны попробовать заменить вашу текущую тему на тему по умолчанию. Лучший способ сделать это с помощью резервного копирования в папке темы. Затем удаление темы. WordPress будет автоматически подключать обратно тему по умолчанию.

Альтернативно, вы можете пойти в свой phpmyadmin и обновление таблиц в БД в таблице wp_options. В следующей таблице названия должны быть обновлены:

  • template,
  • stylesheet,
  • current_theme.

Измените значение на twentyeleven.

Если это решит проблему, то вы должны смотреть в вашей темы файл functions.php, наверняка там закралась ошибка. Возможно есть лишние пробелы в коде (внизу), то вам необходимо их удалить. Если вы используете плохо закодированные функции в вашей темы файл functions.php, то лучше их закомментировать.

Другие исправления

Если ни один из вышеперечисленных методов не выявил ошибок, то вы должны попробовать переустановить свежий дистрибутив WordPress. Хотя маловероятно, но всегда есть вероятность, что файл может быть поврежден.

Вы также можете использовать функции из WordPress для отладки, чтобы увидеть ошибки. Добавьте нижеследующий код в ваш wp-config.php.

error_reporting(E_ALL); ini_set('display_errors', 1);

 

define( 'WP_DEBUG', true);

После добавления данного кода, на пустом экране теперь появятся видны ошибки, уведомления и предупреждения. Они могут быть в состоянии помочь вам определить причину вашей проблемы.

Иногда, вы можете иметь доступ к внутренней системе, но на главной странице сайта будет белый экран смерти. Это может произойти из-за плагина кэширования. Просто очистите кэш.

Если у вас белый экран смерти только на очень длинном посте странице, то Вы также должны стараться очистить кэш. Еще один трюк, который мы нашли в работе является повышение рекурсии и отката лимита. Вы можете вставить следующий код в ваш файл wp-config.php. Или в некоторых серверах вам будет необходимо изменить ваш файл php.ini.

/** Хитрость для длинных Сообщений */

ini_set('pcre.recursion_limit',20000000);

ini_set('pcre.backtrack_limit',10000000);

Мы понимаем, что это очень печальная ошибка, и мы надеемся, что одной методов выше будет исправлена ошибка у вас. Если вы пробовали, что сработало для вас? Если вы нашли решение данной проблемы другим методам, то, пожалуйста, дайте нам знать. Мы были бы рады расширить на этом ресурсе, чтобы другим не приходилось тратить столько времени на поиск решения.



2015-06-01T08:43:02
CMS WordPress