PHP: метрика времени выполнения функции

Как нам узнать, сколько времени работает функция? Pinba, xhprof, xdebug?
Да, но их нужно ставить на сервер и последние два модуля вносят немалый оверхед. Поэтому использовать их в продакшне нежелательно.
Пинба классная, но нам нужно «вчера» и пока админ раскатывает модуль php нужно как-то извернуться.

Вспомним, что в php все неиспользуемые переменные будут удалены при выходе из функции. Ага!

class Timer {
  private $time = 0;
  function __construct() {
    $this->time = microtime(true);
  }

  function __destruct() {
    $executionTime = microtime(true) - $this->time;
    // делаем все, что нам надо: логгируем или еще чего
  }
}

Интегрируем в проект.

function foo() {
  $timer = new Timer();
  // что-то делаем
  sleep(5);
  // на выходе будет вызван Time::__destructor(). 
  // Так как все объекты уничтожаются
}

foo();

AngularJS: Динамический диапазон для select

С сервера приходит максимальное и минимальное значение в выпадающем списке. Нам нужно построить по этим значениям сам список.

Делаем фильтр

angular.module('app').filter('range', function() {
    return function(input, min, max) {
        min = parseInt(min, 10);
        max = parseInt(max, 10);
        for (var i = min; i < max; i++)
            input.push(i);
        return input;
    };
});

И делаем динамический селект.

<select ng-model="value" ng-options="item for item in [] | range:min:max"></select>

JSFiddle

Центрировать абсолютный div

Горизонтально:

margin-left:-<half width>px;
left:50%;

Вертикально и горизонтально (только если задана ширина и высота)

.Absolute-Center {
  margin: auto;
  position: absolute;
  top: 0; left: 0; bottom: 0; right: 0;
}

Числа с произвольным законом распределения

Иногда бывает ну очень нужно сгенерировать какое-то число с вероятностью его появления, к примеру, 0.1. Или любым другим законом распределения.

Читать далее

Python: Backreferences в re

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

>>> import re
>>> re.sub('(\d)\\1*', '\\1', '111112222233333')
'123'

Либо писать в raw-строках

>>> import re
>>> re.sub(r'(\d)\1*', r'\1', '111112222233333')
'123'

Linux: wine64, opengl, nvidia

Некоторые получают ошибку в 64х битном окружении

WineGL_InitOpenglInfo Direct rendering is disabled, most likely your OpenGL drivers haven't been installed correctly

Лечится это установкой 32х битных версий библиотек от вендора.

yum install xorg-x11-drv-catalyst-libs.i686

или

yum install xorg-x11-drv-nvidia-libs.i686

Источник