Категория ‘Без рубрики’

Lazy Load - ленивая (отложенная) загрузка изображений с помощью javascript

Увеличение скорости загрузки сайта, а также снижение нагрузки на сервер, используя отложенную загрузку изображений при помощи javascript т.н. Lazy Load

Для сайтов, на которых присутствует довольно большое количество картинок (особенно, если в браузер они выводятся “скопом”), отложенная загрузка может дать значительный выигрыш, как в скорости работы “для клиента”, так и в уменьшении нагрузки (и трафика) на сервер.

Вся “фишка” lazy load загрузки картинок в том, что те картинки, которые не видны пользователю попросту не загружаются. То есть, загрузка “нижних” картинок, не попадающих на экран происходит при перемотке страницы.

Lazy Load реализован с использованием различных фреймворков:

Опубликовано Февраль 8, 2011 | автор: levik  |  Нет комментариев »

Debian 6.0 Squeeze

Freebsd / DebianВышел Debian 6.0 Squeeze, анонс на оф. сайте
Основные изменения:

  • Инфраструктура Debian:
    • backports.org теперь является частью основного проекта (backports.debian.org).
  • Структура ОС:
    • переработан установщик;
    • dash теперь устанавливается по умолчанию и является обязательным;
    • используется новый загрузчик GRUB 2, старый GRUB доступен в пакете grub-legacy;
    • загрузка ускорена с помощью insserv и параллельного запуска служб на основе их зависимостей;
    • в dpkg добавлена поддержка компрессии xz, проведены оптимизации по ускорению работы с базой данных, а также произведена отвязка от perl;
    • соответствие стандартам FHS 2.3 и LSB 3.2;
    • полностью свободное ядро Linux без закрытых и несвободных прошивок (перенесены в non-free);
    • более 10 000 новых пакетов — теперь общее число пакетов достигло 29 000 (собраны из 15 000 пакетов с исходными кодами), около 60% пакетов обновлены, некоторые пакеты были удалены;
    • в качестве технического обзора в дистрибутив включены два ядра FreeBSD, работающие с пакетами Debian: kfreebsd-i386 и kfreebsd-amd64.
  • ПО, включённое в выпуск:
    • ядро Linux 2.6.32 с поддержкой ext4 и KMS;
    • GNOME 2.30 с некоторыми частями GNOME 2.32;
    • KDE 4.4.5;
    • Xorg 7.5;
    • OpenOffice 3.2;
    • Python 2.6.6;
    • Samba 3.5.5;
    • Tomcat 6.0.28.

UPD PHP5.2 + debian squeeze
http://muzso.hu/2011/09/19/how-to-use-php-5.2-with-debian-squeeze

Опубликовано Февраль 6, 2011 | автор: levik  |  Нет комментариев »

php - прячем информацию от разработчиков

Задача:  написать непрозрачный объектно-ориентированный код на php.
Есть система, которая работает с некоторыми секретными данными. Данные хранятся в xml, и закрыты ассиметричным ключом. Закрытый ключ хранится в коде внутри финализированного метода внутри класса. Класс накрыт зендом и поднимается только через дизасм. Скрепя сердце начальство признало этот способ безопасным. Доступ к классу осуществляется через https соединение. Столкнулся с проблемой, которая разорвала мне мозги: вся эта система ходит по рукам, но всё время остается закрытой для сторонних разработчиков за исключением того, что у системы есть документированное API. А значит на эту систему вешаются сторонние модули.Несмотря на то, что сам класс, который парсит xml с секретными данными финализированный и всё, что можно находится в private, добрые люди намекнули, что эта система пробиваема на Ура. Способ обхода очень странный: самый верхний объект прогоняется через var_dump, результат вывода кэшируется, а затем кэш парсится. Получается, что если мой объект расшифровал секретный xml, то он хранит распарсированные конфиги у себя в private свойствах, потом его сканирует сторонний модуль через var_dump или print_r и грабит секретную статическую информацию производителя системы, которая одинакова на всех копиях системы. На сколько мне известно, var_dump и print_r могут получить доступ к всем свойствам (в том числе private и protected). Уязвимостью это язык не поворачивается, это дыра, в которую можно пешком пройти.

final class Center {

private static $domSecret = 'DOM';public function makeProfit($a){

return self::$domSecret.$a;

}

public function __construct(){

exit("error");

}

}

echo Center::makeProfit('::Profit');

//а тут - вылетает с ошибкой

$c = new Center();

Вариации на тему^
private function __construct(){}

http://www.php.ru/forum/viewtopic.php?t=29560

Опубликовано Февраль 2, 2011 | автор: levik  |  Нет комментариев »

Перенос сайта на MODx на другой сервер

Шпаргалка по переносу сайтов на MODx с одного хостинга на другой (или на/с локальный компьютер) по большому счету не особо отличается от шпаргалки по переносу блога на Wordpress

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

Файлы размещаем на новом месте в соответствующей (как правило, корневой, если это не подкаталог ) директории сайта. Дамп базы данных загружаем в соответствующую базу (реквизиты для доступа, как правило, предоставляет хостер, если это хостинг, либо администратор, каковым часто является сам “переносчик” сайта на локальном компьютере).

Сразу рекомендую установить разрешения на запись для каталога assets\cache\ и всех файлов в нём. Возможно, потребуются разрешения и на другие каталоги.. например, при загрузке изображений…

После изменений параметров,отвечающих за подключение к БД в файле /manager/includes/config.inc.php
[code]$database_server = ‘localhost’;
$database_user = ‘root’;
$database_password = ‘password’;

$dbase = ‘`modx_database`’;[/code]

можно войти в административный раздел  (/manager/) сайта на новом месте. Если всё сделано правильно, и конфигурация нового сервера соответствует требованиям modx, доступ в админку должен работать.

Заходим в админке в раздел “Конфигурация” и устанавливаем правильные пути для файл-менеджера и TinyMCE (Если изначально над ними никаких манипуляций не проводилось - можно их стереть \Clear\, тогда будут выбраны значения по умолчанию)

Теперь можно смело “Очистить кэш” (Сайт->Очистить кэш) нового сайта и зайти по новому адресу - сайт должен работать.

Удачи!

ps. При пользовании шпаргалкой, мозг рекомендуется не выключать. Использовать в случае возникновения ситуаций, не предусмотренных в данном “руководстве”

pps. Полезной может быть шпаргалка по установке MODx

ppps. http://ru.wikibooks.org/wiki/MODx/administrator_guide/moving_site_to_new_server

Опубликовано Февраль 1, 2011 | автор: levik  |  Нет комментариев »

Debian на VPS

Vps сервер на Debian в общем имеет много общего с любым из Linux-дистрибутивов. Одно из основных отличий Debian - наличие пакетов (пакетный дистрибутив).

apt-get update - обновляем репозитории
apt-get upgrade - обновляем установленные пакеты
или:# aptitude update && aptitude upgrade

Администрирование дебиан (на серверах, не требующих глубокого погружения) можно свести к “жонглированию” пакетами и настройке конфигов (за второе, собственно и получают зарплату администраторы :) а вот с пакетами всё довольно удобно )

apt-get search php5 - поиск нужного пакета
apt-get install php5-cli phpmyadmin - установка пакетов

Кроме того, имеется удобный интерфейс aptitude

Некоторые ошибки возникают именно из-за использования старых версий, например, во время установки mysql-server на debian, может появиться такое сообщение об ошибке:
invoke-rc.d: initscript mysql, action "start" failed.

apt-get remove mysql-server mysql-server-5.0 && apt-get install mysql-server mysql-server-5.0- сначала удаляем пакет(ы), затем повторно устанавливаем

Добавляем нового пользователя (чтобы в дальнейшем отключить root-доступ по SSH):
adduser
 levik

в файле /etc/apt/sources.list для обновления “сырцов” потребуются строки, начинающиеся с deb-src

     # See sources.list(5) for more information, especialy     # Remember that you can only use http, ftp or file URIs     # CDROMs are managed through the apt-cdrom tool.     deb http://http.us.debian.org/debian stable main contrib non-free     deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free     deb http://security.debian.org stable/updates main contrib non-free     # Uncomment if you want the apt-get source function to work     #deb-src http://http.us.debian.org/debian stable main contrib non-free     #deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free

“Быстрая” установка LAMP в DEBIAN (linux+apache+php+mysql).
# aptitude update && aptitude upgrade && aptitude install apache2 php5 libapache2-mod-php5 mysql-server mysql-client php5-mysql phpmyadmin

Установка PHP 5.3, Nginx и PHP-fpm на Ubuntu/Debian
http://stopxaker.ru/showthread.php?t=1472
http://adw0rd.ru/2010/ubuntu-php53/

Опубликовано Январь 31, 2011 | автор: levik  |  Нет комментариев »

Расположение конфигурационных файлов в популярных CMS

Иногда, имея ftp-доступ требуется найти доступ к БД.

Места хранения паролей для доступа к базам данных для различных CMS собраны в таблице:

CMS Конфигурационный файл с паролем к базе MySQL
bitrix /bitrix/php_interface/dbconn.php
Joomla /configuration.php
MODx /manager/includes/config.inc.php
Wordpress /wp-config.php
OsCommerce /includes/configuration.php /admin_area/includes/configuration.php

Наверняка, список далеко не полный - дополняйте в комментариях

Опубликовано Январь 27, 2011 | автор: levik  |  Нет комментариев »

SoftException in Application.cpp:601: Directory “/path/dir” is writeable by group

При запуске php-скрипта сервер выдал ошибку 500 (500 error). При этом в лог сервера “упало” следующее сообщение об ошибке:

SoftException in Application.cpp:601: Directory “/path/dir” is writeable by group

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

Для обхода этой ошибки следует изменить права всех вышележащих каталогов (требуемых для выполнения скрипта) на 755 (chmod 755 …). На файлы желательно устанавливать разрешения 644.

Опубликовано Январь 25, 2011 | автор: levik  |  Нет комментариев »

IE 8 bug display:table-cell и изображение с max-width внутри

Столкнулся с непонятным багом IE 8 при помещении внутрь элемента с display:table-cell изображения с ограниченной шириной max-width, которое по ширине больше ширины элемента. Блочный элемент растягивается, как будто изображение нормальной ширины.

upd

Задумка была следующая - в блоке заранее заданных размеров размещать изображение с вертикальным и горизонтальным центрированием.

  1. Для выравнивания по горизонтали используем css-свойство text-align:center;
  2. Для выравнивания по вертикали используется  vertical-align:middle;display:table-cell;
  3. Для уменьшения больших изображений (вписываем в блок) max-width и max-height
  4. Пункты 3 и 4 дублируем в отдельный css с использованием expression для ie 6 и подключаем условным комментарием (if lte IE 6)

Изображение с max-width внутри элемента display:table-cell

Такой “трюк” работает во многих (распространенных) браузерах - Firefox, Opera, Safari

Все бы ничего, но IE8 в случае, если изображение больше заданной ширины “растягивает” блочный элемент, как будто ширина изображения не изменяется, но при этом само изображение показывается уменьшенным (с учетом max-width).

В поисках решения, как оказалось, я не первый (мягко говоря - запоздал на пару лет), кто столкнулся с аномальным поведением блоков table-cell, в которых находятся изображения

The cause of this is a bug in IE8’s awesome new standards-supporting rendering engine (sarcasm intended) which, until fixed (if ever), will cause table-cell elements to scale out of proportion like that

Если я правильно понимаю, в IE 8 “новый движок”, который изобилует некоторыми “характерными особенностями” (когда-то искренне наделся, что с выходом IE7 глючность /float 3px, pngfix … / “ослика” будет в прошлом), ан нет:

The following regressions are present in IE 8:

* Min-width on new block formatting context beside a float is sometimes treated as width.
* Percentage width floats cause justified text to move.
* Max-width fails on floats with auto overflow.
* Scrollbar height is added onto max-height instead of subtracted from it.
* Max-height acts as height on elements with scrollbars.
* Combining max-height, float and overflow:scroll will cause the entire page to disappear.

http://bytes.com/topic/html-css/answers/870359-ie8-display-table-cell-max-width-bug

Там же были найдены варианты “обхода” этого бага:

  1.  добавить внешний элемент-обертку (таблица) с фиксированной шириной (display:table;table-layout:fixed;width:XXXpx) равной ширине ячейки (блока display:table-cell)
  2. добавить внутренний элемент-обертку изображения с фиксированной шириной, равной максимальной ширине изображения

Обходим расползание элемента display:table-cell

upd для IE6 ограничение max-width + max-height обходим с expression:

	width: expression(this.width>89&&(89/this.width)< (103/this.height)? 89: true);
	height: expression(this.height>103&&(89/this.width)>=(103/this.height)? 103: true);

А вертикальное выравнивание - с помощью inline-позиционирования

Опубликовано Январь 24, 2011 | автор: levik  |  Нет комментариев »

Codeigniter - заметки на полях

Мелкие заметки по работе с CodeIgniter:

Точки в строке адреса Codeigniter (переменные, передаваемые в функцию-action) заменяются на нижнее подчеркивание ( было codeigniter.site/controller/action/var.var - стало var_var)

“Стандартный” .htaccess для RewriteRule:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [L]

т.е. в систему поступает всего один пустой $_GET параметр с ключом, равным URI. Поскольку в php название переменной с точкой не является допустимым (видимо, осталось после Register Globals On), Все точки в названиях ключей преобразует в нижние подчеркивания - именно этим и объясняется преобразование var_var

Опубликовано Январь 21, 2011 | автор: levik  |  Нет комментариев »

Bitrix - заметки на полях про Битрикс

Заметки по системе Bitrix

Для добавления файла стилей в шаблон Битрикса служит метод SetAdditionalCSS:
$GLOBALS[’APPLICATION’]->SetAdditionalCSS(’/bitrix/sample.css’);

Изменить meta keywords (ключевые слова) в битриксе
$APPLICATION->SetPageProperty(”keywords”, “установить ключевые слова”);

Изменить заголовок в Bitrix
$APPLICATION->SetTitle(”новый заголовок”);

Восстановление пароля в Битрикс
< ?php // set-new-password.php
require($_SERVER['DOCUMENT_ROOT']."/bitrix/header.php");
echo $USER->Update(1,array("PASSWORD"=>'Bitrix-new-password'));
echo $USER->LAST_ERROR;
require($_SERVER['DOCUMENT_ROOT']."/bitrix/footer.php");
?>

Опубликовано Январь 21, 2011 | автор: levik  |  Нет комментариев »