test

Простая проверка на заполненность полей перед отправкой формы

Валидация
Просто еще небольшая заметка на память, чтобы не копаться по всему интернету. HTML5+CSS3 сейчас сильно упрощает жизнь. Раньше столько сложностей было в том чтобы сделать резиновые формы, а сейчас достаточно использовать условные единицы измеряемые в %% от ширины(vw) или высоты(vh) viewport-а. Как многие знают, размер шрифта используемый единицы em, %% или другие, казалось бы динамические единицы измерения на самом деле берут всего-лишь значение базового шрифта, но сейчас можно использовать все те же vw и vh для задания пропорционального всем другим элементам размера шрифта. Замечу что в хроме и хромиуме, как возможно и во всем остальном на основе webkit, есть баг, при изменении размера окна, размер шрифтов автоматически не пересчитывается. Но этот баг вроде должны поправить к новым версиям.

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

Сама форма, к примеру

test

Скрипт удаления сессий PHP от хостера

Стала задачка выяснить почему сессии хранятся на сервере не более чем пол часа. После этого естественно происходит сброс сессий и пользователь оказывается разлогиненым. Полез в куки посмотреть, там время жизни куки составляло более года. Файл php.ini тоже выглядел вполне нормально, время жизни тоже около года. Немного поискав в кроне обнаружил такой вот скрипт от хостера. Позабавило. Видать для того чтобы не накапливалось большое количество файлов сессий. Вот только зачем удалять так часто?
Сам файл находился по пути /etc/cron.hourly/fornexrmphpsess
С таким вот интересным содержимым.

#!/bin/bash

#внимание!! скрипт рассчитан на выполнение оболочкой BASH!!!!

#засыпаем на случайное время - от 0 до 20 минут
T=$(($RANDOM/27))
sleep $T

#и удаляем все старые сессии PHP
find /tmp/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +30 -delete

find /var/www/*/data/*tmp/ -nowarn -type f -name "sess_*" -amin +30 -delete

find /var/tmp/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +30 -delete

find /var/lib/php*/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +30 -delete

test

CKEditor 4.3 и загрузка картинок в Kohana 3 Framework

Кратко и по сути о том как включить загрузку картинок для CKEditor и прикрутить все это к контроллеру Kohana 3. Ничего сложного, руководствовался статьей

В ckeditor/config.js добавляем строчку:

CKEDITOR.editorConfig = function( config ) {
// Define changes to default configuration here. For example:
// config.language = 'fr';
// config.uiColor = '#AADC6E';
    config.filebrowserUploadUrl = '/upload/image';
};

Добавляем контроллер вида:

class Controller_Images extends Controller_Template
{

    public function action_upload(){
        $callback = $_GET['CKEditorFuncNum'];
        $error = '';
        if (!empty($_FILES['upload']['tmp_name'])) {
            $fileload = $_FILES['upload'];
//папку для картинок создаем заранее и даем права на запись
            $directory = $_SERVER["DOCUMENT_ROOT"]."/public/images/upload/";
            if ($file = Upload::save($fileload, NULL, $directory)) {
                $filename = md5(date("YmdHis").rand(5,50));
                $img = Image::factory($file);
                $img->render("jpg"); //фотки ведь желательно сохранять именно в jpg

                $img->save($directory . $filename . '.jpg');
                unlink($file);
                $http_path = '/public/images/upload/'.$filename.".jpg";
            }else {
                $error = 'Some error occured please try again later';
                $http_path = '';
            }
            echo "<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction(".$callback.",  "".$http_path."", "".$error."" );</script>";
        }
    }
}

Не забываем дать доступ к роуту в bootstrap.php

Route::set('images', 'upload/image')
    ->defaults(array(
        'controller' => 'images',
        'action'     => 'upload',
    ));

Все. В "Вставить картинку" в CKEditor-е появиться вкладка Загрузить.

test

CSS: Масштабируем страницы в зависимости от разрешения экрана

CSS scale
Нужно было сохранять внешний вид страницы на разных разрешениях экрана, то есть на разных устройствах. Если для блоков можно выставить позиционирование относительно родительского блока, то с размерами шрифта все хуже, они средствами css не масштабируютья. Можно как вариант использовать JS для этих целей, но можно и css обойтись. Нынче это не так уж сложно, достаточно использовать медиа-потоки и приближение. Например:

@media screen and (min-width: 400px) and (max-width: 600px) {
  body {
    zoom: .35 !important; /* Old IE only */
    -moz-transform: scale(0.35);
    -webkit-transform: scale(0.35);
    transform: scale(0.35);
  }

}
@media screen and (min-width: 600px) and (max-width: 800px) {
  body {
    zoom: 0.45 !important; /* Old IE only */
    -moz-transform: scale(0.45);
    -webkit-transform: scale(0.45);
    transform: scale(0.45);
  }
}

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

test

Небольшой сниплет таймера обратного отсчета в секундах на JavaScript

Таймер обратного отсчета
Утянул со stackoverflow

var count=30;
var counter=setInterval(timer, 1000); //1000 равно 1 секунде

function timer()
{
  count=count-1;
  if (count <= 0)
  {
     clearInterval(counter);
     //Здесь делаем что-то после того как таймер достиг нуля
     return;
  }

  //здесь добавляем код, к примеру меняющий количество секунд в диве
//document.getElementById("timer").innerHTML=count + " секунд";
}

Все просто и красиво

test

Broadcom драйвер для Linux 3.12

Вот добрался до новой версии ядра, 3.12. Долгое время просто руки не доходили. Я уже несколько раз ранее собирал эти драйвера, но на более старые версии, к пример 3.10

Так вот собираем почти так же как и обычно. Качаем драйвера под свою архитектуру с сайта:

test

Выступление на конференции Олега Бунина, 2012 год. iForum. Высоконагруженные сервисы

Выступление на конференции Олега Бунина, 2012 год. iForum. Высоконагруженные сервисы. Интересно.

Для тех кто еще не видел, стоит посмотреть запись выступления Олега Бунина с конференции 2013 года. iForum.

test

Олег Бунин, Построение высоко-нагруженных систем(запись с конференции IForum 2013)

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

test

MongoDB вместо MySQL/MariaDB как основная СуБД. Небольшие впечатления.

MongoDB
Если вы используете для своего проекта VPS/VDS сервер, вы вполне можете заменить реляционную базу данных на MongoDB. Познакомившись поближе вы увидите все те же знакомые понятия что и в реляционных базах, такие как: база данных, коллекция(собственно набор документов, а-ля таблица без жесткой структуры по полям), документы(те же кортежи из реляционных баз). Инструменты бекапа/восстановления присутствуют. Выборка данных тоже. Врапперы к PHP и другим языкам тоже.

Хороший мануал
Официальная дока по врапперу к PHP

Прикрутить MongoDB к проекту вместо MySQL\MariaDB не составит практически никаких усилий, а при грамотном подходе даст не мало преимуществ. Ставиться все очень просто из дистрибутива. Впечатления от монго хорошие. Может немного позже напишу более подробно о нем.

Еще немного ссылок внутри материала.

test

Русская операционная система. ОС Фантом

Phantom OS
Не знаю смеяться ли, или воспринимать это серьезно. Сложно воспринимать однозначно на сколько уверены авторы своего детища. Склоняюсь что у ReactOS больше шансов выйти на рынок чем у Фантома. Но может кому тоже будет любопытно почитать. Сам я отношусь к этой информации достаточно скептически. История имеет свойство повторяться и тут я скорее склонюсь в сторону что будущее за облачными ОС, как когда-то раньше за основу использовались терминалы подключаемые к мейнфрейму.


Q: Что такое ОС Фантом? Это клон Windows или ещё раз переупакованный в новую коробку Linux?

A: Ни в коем случае. Наша задача — не дополнить существующие ОС, которые и без того изрядно тяжеловесны и перегружены, а построить новую платформу.

Q: В чем же интерес или польза от несовместимой ни с чем системы?

A: Вовсе не обязательно быть несовместимым, имея технологическое преимущество. Мы реализовали POSIX-подсистему в рамках Фантом. Конечно, не все возможности ОС Фантом доступны из POSIX-подсистемы, но мы работаем над этим.

Q: Вы собираетесь конкурировать с Windows? Это несерьёзно и нереально!

A: Существует несколько примеров более-менее удачной конкуренции с Windows. Наиболее известные ОС широкого профиля — MacOS и Linux. Менее известные и нишевые — PalmOS и Symbian. Отметим, что все эти системы (за исключением, пожалуй, MacOS) были созданы при достаточно умеренных вложениях.

Q: Но MacOS-то обошлась в огромные деньги?

A: Отчасти. Если смотреть на весь путь её развития — то да. Но, фактически, десятая версия MacOS (та, которая используется сейчас) написана заново в течение довольно короткого времени. Эта система, как и Linux, эффективно использовала потенциал Open Source сообщества и обошлась в довольно обозримые деньги. Во всяком случае

test

Подключение платежной системы 2checkout к вам на сайт

2checkout direct checkout

Содержимое

  • Предисловие
  • Регистрация и одобрение.
  • Direct и не Direct
  • Прикручиваем саму платежку
  • Обработка платежа вашим сайтом после оплаты

Предисловие

Все что кажется сложным, зачастую только кажется таким. Вот тоже самое можно сказать и про платежную систему 2checkout. Те сайты что работают с буржуйными платежами очень часто подключены к данной платежной системе. Я расскажу в кратце как работать с этой платежной системой. Особенно с учетом англоязычного саппорта, нашим разработчикам это должно немного помочь.

Итак, 2checkout, имеет достаточно обширную документацию по своему API и даже несколько подготовленных заранее библиотек для разных языков программирования. Но реально не хватает кратеньких примеров. Так вот, все что вам нужно для того чтобы прикрутить эту систему:

Регистрация и одобрение.

Тут я даже останавливаться на этом шаге не буду, не технический и по этому моменту информации хватает. После регистрации вам нужно чтобы ваш аккаунт подтвердили.

Direct и не Direct

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

Прикручиваем саму платежку

Вам нужно разместить саму форму платежной системы у себя на сайте. Используем вариант не Direct платежа:

test

Если DPKG/APT/APTITUDE медленно работает

Когда DPKG, APT, APTITUDE начинают медленно работать стоит попробовать выполнить следующие команды:

1) dpkg --clear-avail
2) dpkg --forget-old-unavail
3) Если используете grep-available или другую утилиту для проверки доступных файлов, обновите файл используя sync-available (в пакете dctrl-tools).

Оригинал на английском

test

PrestaShop 1.5+ Получаем содержимое корзины

cart

Чтобы получить содержимое корзины достаточно столь короткого кода:

$cart = new Cart($this->context->cookie->id_cart);
$cartProducts = $cart->getProducts();

Так же, чтобы увидеть больше можно взглянуть на файл контроллера корзины, который находиться в /classes/Cart.php

test

Правила для Ассоциаций Содержит-Один(HasOne) и Принадлежит(BelongsTo) в ExtJS

Правила для Ассоциаций Содержит-Один(HasOne) и Принадлежит(BelongsTo) в ExtJS

  1. Помещайте прокси в модель, пока у вас не будет веской причины как в случае [1]
  2. Всегда используйте полное имя модели
  3. Всегда устанавливайте getterName
  4. Всегда устанавливайте setterName
  5. Всегда устанавливайте associationKey, если подключаемый обьект возвращает тот же ответ что и текущий
  6. Всегда устанавливайте foreignKey, если хотите загружать связанный обьект только по надобности
  7. Делайте как можно короче instanceName
  8. Геттер ведет себя по разному в зависимости от того, иностранные объект загружается или нет. Если он загружен, внешний объект возвращается. В противном случае, вам нужно передать в функцию обратного вызова, чтобы получить его.
  9. Нужно установить название свойства, если планируете перегрузить ассоциацию.
  10. Вам не нужно отношение belongsTo для работы с hasMany
  11. Установите primaryKey если ID поле родителя не "id"
  12. Иногда вам нужно использовать uses или require для ассоциации belongsTo.
  13. Вызов сеттера setter() не создает экземпляр. Установите object.belongsToInstance = obj если вызываете setter().

...

Страницы

Subscribe to Nelex.in.ua RSS