-
10 АВГ 20150
-
09 АВГ 20150
stretchy - js скрипт для автоподгонки элементов форм

1.5кб в сжатом виде, поддерживает input, select, textarea, не требует jQuery, поддерживает min/max-width/height константы, не требует знаний js, работает во всех современных браузерах.
http://leaverou.github.io/stretchy/ -
06 АВГ 20150
Установка программ на CentOS 6.6 ( nginx 1.8.0 + php-fpm 5.6 + mysql 5.6 + mongo 3.0 + sendmail )
Ранее писал как стартануть virtaulbox для разработки на локалке c ubuntu и таким же набором программ. А теперь, предположим мы арендовали VPS. Нам вручили ssh: ip, логин и пароль от голой машины CentOS.
Приступим!
Тип ОС:cat /proc/version
Версию ОС:cat /etc/issue
Обновляемсяyum update -y
Ставим wget и nano если их нетyum install wget nano -y
Установка nginx 1.8.0wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm rpm -i nginx-release-centos-6-0.el6.ngx.noarch.rpm yum install nginx -y chkconfig nginx on && service nginx start
Установка php-fpm 5.6 и его компонтентовrpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm cd /etc/yum.repos.d curl -O http://rpms.famillecollet.com/enterprise/remi.repo yum install php php-fpm php-opcache php-gd php-mysql php-mongo -y --enablerepo=remi-php56 chkconfig php-fpm on && service php-fpm start
Установка mysql 5.6cd ~ wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm rpm -i mysql-community-release-el6-5.noarch.rpm yum install mysql-community-server -y chkconfig mysqld on && service mysqld start /usr/bin/mysql_secure_installation
Установка mongo 3.0nano -w /etc/yum.repos.d/mongodb-org-3.0.repo[mongodb-org-3.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1yum install mongodb-org -y chkconfig mongod on && service mongod start
Установка sendmailyum install sendmail -y chkconfig sendmail on && service sendmail start
Проверяем что все запущеноnetstat -tulpn service sendmail status
На этом установка закончена.
Дальше надо настроить каждый компонент.
nginx/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf
php/etc/php5/fpm/php.ini
/etc/php5/fpm/pool.d/www.conf
mysql/etc/mysql/my.cnf
mongodb/usr/local/etc/mongodb.conf
/etc/mongod.conf
sendmail/etc/mail/Что бы письма отправленные с вашего сервера не попадали в спам нужно настроить SPF, DKIM и DMARC
/etc/mail/sendmail.mc -
05 АВГ 20150
Транзакции MySQL
Задача транзакций создать строгую целостность информации. Транзакции обеспечивают гарантию того, что незаконченные обновления или искаженные действия не будут фиксироваться в базе данных; серверу предоставляется возможность выполнить автоматический откат, и база данных будет сохранена.
Создадим таблицу balanceCREATE TABLE `balance` ( `id` int(11) NOT NULL AUTO_INCREMENT, `action` varchar(255) NOT NULL, `val` int(11) NOT NULL, `total` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Проверяем вставку без транзакции<h1>Тест транзакций MySQL 5.6</h1> <?php $db = mysqli_connect('localhost', 'root', '', 'transactions'); if (mysqli_connect_errno()) { printf("Ошибка соединения: ", mysqli_connect_error()); die(); } $action[] = array( 'act' => '+', 'val' => 10 ); $action[] = array( 'act' => '+', 'val' => 20 ); $action[] = array( 'act' => '-', 'val' => 5 ); $action[] = array( 'act' => '+', 'val' => 10 ); $i = 0; // БЕЗ ТРАНЗАКЦИЙ foreach ( $action as $key => $value ) { $i ++; // имитируем долгое выполнение на 2-ой вставке ( при этом сервер выключаю ) if ( $i == 2 ) sleep(20); // получить последний total $row = mysqli_fetch_assoc($db->query("SELECT total FROM balance ORDER BY id DESC LIMIT 1")); $total = $row['total']; $db->query(" INSERT INTO balance SET action = '{$value['act']}', val = {$value['val']}, total = $total {$value['act']} {$value['val']} "); print_r($value); } echo '<br/>- запросы выполнены'; $db->close();
// Резльтат: выключив на паузе mysql, вставилось в таблицу balance одна запись - целостность нарушена ( в реальной жизни это могло бы например значить, что у кого-то деньги с баланса сняли, а кому-то зачислить не успели из за сбоя)
Проверяем вставку с транзакцией<h1>Тест транзакций MySQL 5.6</h1> <?php $db = mysqli_connect('localhost', 'root', '', 'transactions'); if (mysqli_connect_errno()) { printf("Ошибка соединения: ", mysqli_connect_error()); die(); } $action[] = array( 'act' => '+', 'val' => 10 ); $action[] = array( 'act' => '+', 'val' => 20 ); $action[] = array( 'act' => '-', 'val' => 5 ); $action[] = array( 'act' => '+', 'val' => 10 ); $i = 0; // С ТРАНЗАКЦИЕЙ $db->autocommit(FALSE); foreach ( $action as $key => $value ) { $i ++; // имитируем долгое выполнение на 2-ой вставке (выключаем mysql принудительно) if ( $i == 2 ) sleep(20); // получить последний total $row = mysqli_fetch_assoc($db->query("SELECT total FROM balance ORDER BY id DESC LIMIT 1")); $total = $row['total']; $db->query(" INSERT INTO balance SET action = '{$value['act']}', val = {$value['val']}, total = $total {$value['act']} {$value['val']} "); print_r($value); } if ( ! $db->commit() ) { $db->rollback(); echo '<br/>- возникла ошибка откат запросов'; die(); } echo '<br/>- запросы выполнены'; $db->close();
// Результат: выключив mysql коммит не срабатывает и ни один запрос из транзакции не добавляется в бд. Целостность не нарушена ( в реальной жизни это могло бы например значить, что у кого-то деньги с баланса сняли, произошел сбой, но так как commit не выполнился, то rollback откатывает до начального состояния).
COMMIT - для записи изменений на диск.
ROLLBACK - игнорирует изменения, произведенные с начала транзакции. -
04 АВГ 20150
Respect\Validation - система валидации данных на PHP
Простые правила для валидацииv::numeric()->positive()->between(1, 256)->validate($myNumber)
Контроль детализации для продвинутой отчетности.
Почти 100 проверок.
Работает на PHP 5.3+ или HHVM 3.3+
Пример простой валидации$number = 123; v::numeric()->validate($number); //true
http://respect.li/Validation/ -
31 ИЮЛЬ 20150
-
30 ИЮЛЬ 20150
Talkie.js - HTML/CSS/JavaScript библиотека для создания презентации

Поддерживает Markdown, подсветку кода, Css перемещение, клавиатурное управление, режим во весь экран и другое
https://github.com/ahomu/Talkie -
29 ИЮЛЬ 20150
Sprint.js - крошечная, молниеносно быстрая jQeury-like библиотека для современных браузеров
Sprint - высокопроизводительная 5кб (gzip) библиотека для DOM. Особенно хорошо это видно на слабых устройствах типа телефон или планшет.
Синтаксис аля jQuery$("div").addClass("new").append("<p>Hi Sprint</p>");
Нужно отметить что Sprint это не замена jQuery это всего лишь библиотека для манипулирования DOM с акцентом на производительность.
API методов достаточно объемное:
add, addClass, after, append, appendTo, attr, before, children, clone, closest, css, detach, each, empty, eq, filter, find, first, get, has, hasClass, height, html, index, insertAfter, insertBefore, is, last, map, next, nextAll, nextUntil, not, off - no support for selector, offset, offsetParent, on - no support for selector and data, parent, parents, position, prop, prepend, prependTo, prev, prevAll, prevUntil, ready, remove, removeAttr, removeClass, removeProp, replaceAll, replaceWith, scrollLeft, scrollTop, siblings, size, slice, text, toggleClass - no support for .toggleClass([switch]), trigger - no support for Event object and extraParameters, unwrap, val, width, wrap, wrapAll, wrapInner
https://github.com/bendc/sprint
Категории:
Оставить на заметку в:


