Я использую grc
(Generic Colouriser), который позволяет раскрасить вывод ряда команд, включая diff
.
Это скрипт на python, который можно обернуть вокруг любой команды. Таким образом, вместо вызова diff file1 file2
, вы бы вызывали grc diff file1 file2
для просмотра цветного вывода. Я добавил псевдонимы diff
- grc diff
, чтобы было легче.
Мы можем сделать это, получив ScrollViewer , который присутствует в ControlTemplate ListView. Если у вас есть доступ к ScrollViewer, то есть много различных методов прокрутки.
Во-первых, мы можем создать ListView, к которому мы хотим добавить этот эффект:
<ListView ItemsSource="{Binding Percents}"
SelectionChanged="OnSelectionChanged"
x:Name="uiListView"/>
public List<int> Percents { get; set; }
public Window1()
{
InitializeComponent();
Percents = new List<int>();
for (int i = 1; i <= 100; i++)
{
Percents.Add(i);
}
this.DataContext = this;
}
Нам также понадобится то, что мы можем использовать для получения ScrollViewer из ListView. Раньше я использовал нечто подобное для работы с настраиваемой прокруткой, и мы можем использовать это и здесь.
public static DependencyObject GetScrollViewer(DependencyObject o)
{
if (o is ScrollViewer)
{ return o; }
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++)
{
var child = VisualTreeHelper.GetChild(o, i);
var result = GetScrollViewer(child);
if (result == null)
{
continue;
}
else
{
return result;
}
}
return null;
}
Теперь нам просто нужно обработать событие SelectionChanged. Поскольку мы пытаемся прокрутить элемент в начало списка, лучший вариант - прокрутить вниз, а затем повторно прокрутить вверх до выбранного элемента. Как вы сказали, ScrollIntoView будет прокручиваться до тех пор, пока элемент не станет видимым, как-то прописать обработчик ошибок с PHP, так что мне просто нужно выбросить ошибку, а затем решить, что что с этим делать и продолжать ли.
Вы можете сделать именно это с помощью set_error_handler () и set_exception_handler () .
Не существует "единственного правильного пути" для обработки ошибок, но вот некоторые вещи, которые следует учитывать.
Вот некоторые вещи, которые я обычно делаю:
error_handeling (E_ALL | E_STRICT)
set_error_handler ()
и остановить выполнение. Это заранее устраняет множество ошибок и в результате дает очень надежный код. При работе на большом сайте лучше иметь представление об истории ошибок, особенно когда вещи могут довольно легко перейти в непредусмотренные логические пути, когда тестировщик или пользователь запускают странное использование кейс.
Я обычно встраиваю блоки try catch, которые способны как регистрировать ошибку, так и останавливать выполнение в случае чего-то фатального (и выплевывать страницу ошибки с кодом ошибки) или в случае программного ошибка, продолжаю, но отмечая это в моих журналах ошибок. В основном заканчиваюсь созданием собственного обработчика ошибок, поскольку я считаю, что в противном случае при масштабировании будет слишком много нюансов.
Во время разработки я использую профилировщик PHP Particletree для регистрации ошибок и других соответствующих данных на консоли с трассировкой, сообщение и строка. Это просто красиво - не могу говорить о его эффективности. Это может привести к раздуванию кода, но, боже мой, это может спасти жизнь, если вы будете иметь представление о том, где и как произошли ошибки, простым текстом. Это особенно полезно при работе с такими вещами, как веб-службы SOAP, которые бросают вам исключения, как ничейный бизнес.
Я также считаю полезным абстрагировать журнал отладки и сохранять его глобальным, чтобы, как люди говорили раньше, при переключении в производство, вы не выбрасываете грязное белье в холодный воздух Интернета, поскольку можете относительно легко изменить вывод отладчика на базу данных sql, электронную почту или что-то еще.
Профайлер Particletree: http://particletree.com/features/php-quick-profiler/
Перед запуском я полностью тестирую свой проект на ключевых этапах разработки, проверяя мои журналы ошибок (я использую панель управления Plesk) для отслеживания ошибок php.
Когда проект запущен, на ключевых этапах в классе или приложении я отправляю отчет об ошибке или отладке, используя созданный мной класс. Он отправляет отчет об ошибке на определенный адрес электронной почты с ключевой информацией, такой как: дата и время, IP-адрес пользователя, ссылающаяся страница, полный URL-адрес и короткое примечание, которое я определяю при запуске / вызове класса отладки.
Я использую, чтобы принудительно запустить его. напишите файл журнала, но обнаружил, что это небезопасно, так как каталог должен иметь chmod 777, и неэффективно, поскольку мне приходилось каждый раз обращаться к последним журналам.