PHP memory and Zend Memory Manager

Хорошая статья про работу с памятью в среде разработки «для инвалидов», в PHP.
http://jpauli.github.io/2014/07/02/php-memory.html

Zend Memory Manager has nothing to share with ZendGC. ZendGC, appeared in PHP 5.3, is about clearing circular references in PHP variables and that’s absolutely all it does. It then acts on top of ZendMM, for PHP variables containing themselves (circular references).

Зарайский кремль

Зарайск — город крохотный. Зато со своим кремлем. Строение более молодое, чем Богословский монастырь из предыдущего рассказа. Построенный в 16 веке был отличной крепостью. Крымские татары тогда очень доставали эти земли.

Удивительно то, как некогда опорный пункт на границе Российского гос-ва, в какой-то момент из-за расширения границ этого самого гос-ва город перестал иметь оборонное значение. А после того, как все важные торговые пути (железные дороги, да и просто дороги) построили в обход него, Зарайск навсегда так и остался мелким уездным городком (немного истории).

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

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

GPS: 54.757627, 38.871281

ФОТОГРАФИИ

Богословский монастырь

Недалеко от есенинского музея-заповедника находится Богословский монастырь (история монастыря). Монастырь имеет удивительную, я бы даже сказал, уникальную колокольню 1901 года.

Опять же, многовековая интересная история у места. А сегодня это просто тихий, хорошо отреставрированый церковный комплекс, больше похожий на музей. Сколько подобного на обширной земле русской. А кто знает о существовании этого монастыря? Иногда мне кажется, что настолько огромные исторические ценности нужно включать в какую-то единую систему, программу. Создавать какие-то новые "инструменты" и возможности для того, чтобы каждый человек мог узнать о существовании какого-то места и легко получить о нем ценную историческую справку, о возможностях, которые ждут его при посещении (например, в Богословском монастыре можно посетить трапезную, если попадете в нужное время).

Да, не все мы одинаковы. Для кого-то это место святое. Для кого-то интересно историческое значение. Кто-то оценит архитектуру. А кто-то просто пришел в музей. Любой храм прежде всего место объединения людей. Центр. И очень бы хотелось, чтобы все это также было объединено для всех и каждого. Интерактивный государственный портал. Не любительские отчеты о поездках, а красивый и, главное, интересный материал обо всем.

GPS: 54.818043, 39.716007

ФОТОГРАФИИ

Про Есенина

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

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

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

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

Я покинул родимый дом,
Голубую оставил Русь.
В три звезды березняк над прудом
Теплит матери старой грусть.
Золотою лягушкой луна
Распласталась на тихой воде.
Словно яблонный цвет, седина
У отца пролилась в бороде.
Я не скоро, не скоро вернусь.
Долго петь и звенеть пурге.
Стережет голубую Русь
Старый клен на одной ноге,
И я знаю, есть радость в нем
Тем, кто листьев целует дождь,
Оттого что тот старый клен
Головой на меня похож.
1918

GPS: 54.861595, 39.604212

ФОТОГРАФИИ

Немного баловства с JS/HTML5

У js-библиотеки Prototype есть вспомогательная библиотечка Window, позволяющая создавать на странице сайта модальные окна (со всеми плюшками в виде сворачивания, закрывания, ресайза и перетаскивания).

Легким движением, а именно переопределением методов minimize и restore можно сделать, чтобы окошки не просто сворачивались, а убирались в какой-то угол страниц в виде небольших кнопок (панель задач в Windows помните?).

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

Для этого воспользуемся идеей: при сворачивании окон мы делаем еще одну дополнительную операцию, а именно считываем свойства окна и записываем их в локальное хранилище с помощью технологии Web Storage (localStorage). Для работы с этим хранилищем я воспользовался библиотекой http://www.jstorage.info

Кусочек из метода минимизации:

minimize: function(id, event) {
var win = this.getWindow(id);
...
var winProps = jQuery.jStorage.get('winProps');
var newWinProps = {
'id': id,
'className': win.options.className,
'title': win.options.title,
'minWidth': win.options.minWidth,
'width': win.options.width,
'height': win.options.height,
'url': win.options.url,
'recenterAuto': win.options.recenterAuto,
'destroyOnClose': win.options.destroyOnClose,
'showEffectOptions': win.options.showEffectOptions,
'top': jQueryElement.css('top'),
'left': jQueryElement.css('left')
};
winProps[id] = newWinProps;
jQuery.jStorage.set('winProps',winProps);
...

(есть возможность хранить несколько окон)

При открытии любой страницы запускаем код ниже, который считывает данные из хранилища (по сути это просто параметры окна, которые передаются в конструктор нового окна), инициализирует для каждого окна объект Window (который так же добавляет нужные элементы в DOM) и отображает соответствующую «свернутую» кнопочку в углу страницы.

var winProps = jQuery.jStorage.get('winProps');
if (!jQuery.isEmptyObject(winProps)) {
// get from localStorage
for (var winId in winProps) {
var win = new Window(winProps[winId]);

// Create a dock element
var element = document.createElement('span');
element.className = 'dock_icon';
element.style.display = 'none';
element.win = win;
$('dock').appendChild(element);
Event.observe(element, 'mouseup', Windows.restore);
$(element).update(win.getTitle());
new Effect.Appear(element)
}
}

Ну и в методе restore не забываем добавить кусочек, отвечающий за удаление данного окна из списка в localStorage, т.к. оно уже не требуется к «перетаскиванию» между страницами, когда открыто, а не свернуто.

restore: function(event) {
...
// remove from localStorage
var winProps = jQuery.jStorage.get('winProps');
delete winProps[element.win.getId()];
jQuery.jStorage.set('winProps',winProps);
...