Архив категории ‘Программирование’

Smarty: Расширяем возможности strip_tags

smarty

Удаляем из Smarty\libs\plugins\ файл modifiercompiler.strip_tags.php на его место записываем файл modifier.strip_tags.php (обратите внимание, что файлы отличаются в названиях)

В результате получаем расширенный функционал «strip_tags»:

  • {$string|strip_tags} strips all tags and replaces them with a space
  • {$string|strip_tags:false} strips all tags without replacing them with a space
  • {$string|strip_tags:'<b><br>’} strips all tags except b and br tags and replaces them with a space
  • {$string|strip_tags:false:'<b><br>’} strips all tags except b and br tags without replacing them with a space

Delphi: динамические массивы

delphi массив

Некоторые полезности при работе с динамическими массивами:

Очистить переменную в оперативной памяти

  ZeroMemory(@l_synchronizations, SizeOf(Tl_synchronizations));

Процедура SetLength изменяет размер строки, одномерного динамического массива или многомерного динамического массива

1) В корне неверное решение, массив на то и динамически, чтобы не иметь ограничений
  setlength(analiz_programs_out, 1000);

2) Инициируем массив, по размеру массива данных. 
Верно до первого условия, при котором какое-либо значение исходного 
массива отбрасывается.
  setlength(analiz_programs_out, Length(b));

3) Не будет работать для разорванного заполения массивов
  setlength(analiz_film.names, ii + 1);

4) Наиболее правильный из придуманных решений
 setlength(analiz_film.Genres, Length(analiz_film.Genres) + 1);

 Добавляем следующий элемент.
 analiz_film.Genres[Length(analiz_film.Genres) - 1] := database_Genre_Add(b[i, 1], 1);

FFmpeg базовые команды

FFmpeg базовые команды

В прошлом посте я рассказал как установить FFmpeg на CentOS 6.4.

В данном посте я рассмотрю базовые команды, которые существенно облегчат работу с FFMpeg.  Огромное количество информации содержится в мануалах, они как известно рулез, так что если какая-то информация оказалась за пределами поста, «man ffmpeg» вам в помощь.

Для понимания, более простых конструкций, например такой:


ffmpeg -ss 5 -i a.mp4 -aspect 4:3 -f image2 -r 1 -vframes 300 a%2d.jpg

чуть ниже я перечислю наиболее часто используемые опции.

(далее…)

$ svn update. Conflict discovered…

Conflict discovered in 'services.html'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: p
C    services.html
Обновлено до редакции 11.
Summary of conflicts:
  Text conflicts: 1

При обновлении был обнаружен конфликт в файле. Нам предложено выбрать действие для его решения:

  • (e) edit — редактировать файл с изменениями;
  • (df) diff-full — показать все конфликтующие изменения;
  • (r) resolved — принять файл, содержащий маркеры слияния конфликтующих изменений;
  • (dc) display-conflict — показать все конфликты;
  • (mf) mine-full — принять свою версию и игнорировать полученные изменения;
  • (tf) theirs-full — принять полностью полученную версию файла и отказаться от своих изменений;
  • (p) postpone — отметить конфликт и разрешить его позднее;
  • (l) launch — использовать внешние средства для разрешения конфликта.

Поставить статус разрешенного конфликта:

svn resolved

Рекурсивное добавление всех файлов и папок в систему контроля версий svn: svn add –force *

PHP поиск «узких» мест в коде. Xdebug + WinCacheGrind

узкие места кода

Узкие места — это части кода, которые являются основными потребителями времени и ресурсов, во время своего выполнения.
Если с ресурсами все более или менее нормально, то со временем выполнения, на одном из моих ресурсов, определенно проблема. Главная страница формировалась порядка 1500ms, что не приемлемо.

Для заинтересованных, время отработки снизилось до 400ms, что допустимо для такого рода проектов.

(далее…)

Delphi + Git


Пора перебираться с Svn на Git, даже FAQ по необходимому мне функционалу, в частности по выдергиванию всяких полезностей для мой delphi 7  нашел…

http://delphi.frantic.im/delphi-and-git/ (надо записать пока не потерял….)

Вот она сила привычки…

Экранирование амперсанта («&») в XML

Спецсимволы XML

#x9 [HT] Горизонтальная табуляция (horizontal tabulation)
#xA [LF] Перевод строки (line feed)
#xD [CR] Возврат каретки (carriage return)
#x20 [SP] Пробел (space)
#x21 ! Восклицательный знак (exclamation sign)
#x22 « Двойные кавычки (quotation mark)
#x26 & Амперсант (ampersand)
#x27 Апостроф или одинарные кавычки (apostrophe)
#x3C < «Знак «»меньше»» или левая угловая скобка (less-than sign)»
#x3F ? Вопросительный знак (question mark)
#xA0 [NBSP] Неразрываемый пробел (no-break space)

 

Специальную роль в разметке XML играет символ &.

Употребление разметочных символов в символьных данных затрудняет распознавание конструкций разметки и может создать проблему неоднозначности структуры.

В XML эта проблема решается заменой «&» -> «&amp;».

Через PHP это делается не сложной регуляркой:

$s = preg_replace('/&[^; ]{0,6}.?/e', "((substr('\\0',-1) == ';') ? '\\0' : '&'.substr('\\0',1))", $s);

UPD: Итоговый код получился таким:

		$tpl_output = preg_replace('/&[^; ]{0,6}.?/e', "((substr('\\0',-1) == ';') ? '\\0' : '&'.substr('\\0',1))", $tpl_output);
		$tpl_output = preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/","&" ,html_entity_decode($tpl_output, ENT_COMPAT, 'UTF-8'));