6 сентября 2013 г.

2 сентября 2013 г.

Acer Liquid Galant Duo

Аппаратный WIPE

> Выключите телефон, затем нажмите и удерживайте кнопку питания, пока не почувствуете вибрацию смартфона и/или пока не откроется экран с логотипом Acer. Нажмите и удерживайте кнопки увеличения и уменьшения громкости. Нажимая кнопку увеличения громкости, выберите "Чистая загрузка: Да. Для подтверждения нажмите кнопку камеры."

acer-club.ru/topic/12492-%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC-%D0%B5%D1%81%D0%BB%D0%B8-%D0%BA%D0%BE%D0%BC%D0%BC%D1%83%D0%BD%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80-%D0%BD%D0%B5-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D0%B5/page__st__30

1 сентября 2013 г.

Замена хостинга на digitalocean.com

Пришло время и мне понадобились различные плюшки в виде доступа по ssh к серверу и git.
Необходимо было выбрать что-то недорогое и удобное.
Лучше чем Digital Ocean я ничего не нашел. Сервер настраивается быстро. Установка четкая и продуманная. Цены приемлемые.
У Digital Ocean обширное комьюнити. Есть много полезных статей и туториалов. В принципе, если английский вам не чужд, решение любой проблемы можно найти в статьях.

Кратко по установке:

Настройка имени хоста (добавление домена)

Лично у меня при установке по всем рекомендациям никаких проблем не возникло. Все завелось с первого раза. Надеюсь что и у вас все получится без проблем.

И напоследок совет. Если у вас нет необходимости в постоянно включенном сервере, то можно сэкономить немного денег. Для этого (все действия выполняются в панели управления DigitalOcean):
1. Выключаем сервер - для этого заходим в свой дроплет и выключаем его (Power Off).
2. Переходим в раздел Images и создаем Snapshot своего дроплета.
3. Удаляем дроплет.
За хранение Snapshot Digital Ocean берет 2 цента в месяц за гигабайт. И больше никакая плата не берется. Восстановить дроплет из снимка дело 1 минуты. 

Внимание!!!
Ссылки на Digital Ocean в статье реферальные. Если Вам помогла эта заметка переходите по этим ссылкам. 
Если вам эта заметка не помогла, можете смело идти по прямой ссылке.


28 августа 2013 г.

mongodb aggregate doctrine

        //db.PageSerp.aggregate({$match: {page_id: "521cbb536803fade44000016"}}, {$group: {_id: "$keyword_id"}}, {$skip: 4}, {$limit: 2});
        /** @var Connection $conn */
        $conn = $this->get('doctrine_mongodb')->getConnection();
        /** @var \MongoClient $mongo */
        $mongo = $conn->getMongo();
        if(!$mongo){
            $conn->connect();
            $mongo = $conn->getMongo();
        }
        /** @var \MongoCollection $coll */
        $coll = $mongo->selectDB('nt-us')->selectCollection('PageSerp');
        $ops = array(
            array(
                '$match' => array('page_id' => '521cbb536803fade44000016'),
            ),
            array(
                '$group' => array('_id' => '$keyword_id'),
            ),
            array('$skip' => 2),
            array('$limit' => 2),
        );
        $res = $coll->aggregate($ops);


19 августа 2013 г.

Установка дополнений для гостевой ОС в VirtualBox

Установка дополнений для гостевой ОС в VirtualBox

Итак, для установки дополнений просто установите несколько пакетов с помощью данной команды:
sudo apt-get install virtualbox-guest-additions virtualbox-guest-dkms virtualbox-guest-x11 virtualbox-guest-utils
После установки пакетов перезагрузите виртуальную машину.

25 июля 2013 г.

Doctrine MongoDB

Проблема
Есть у меня документ такого типа

{
    "id": "51e939fa6803fa4a05000001",
    "user_id": 1,
    "site_id": 16,
    "url": "www.example.com/en/",
    "keywords": [
        "keyword and 4"
    ],
    "se": [
        "Google",
        "Bing Russia",
        "Google Canada",
        "Yahoo Australia"
    ]
}

я делаю удаление парочки se из документа

$SiteManager->removeSearchEngines($Site, $externalSe);

И сразу же вывод оставшихся se

$Site->getSe()

в итоге получаю

[
        "Google",
        "Bing Russia",
        "Google Canada",
        "Yahoo Australia"
    ]

Хотя в базе данные изменились (удалились), получаю я данные без изменений. Долго ковырялся, пока не воспользовался

$SiteManager->docManager->refresh($Site);

Это помогло.

Сервис отправки СМС/SMS для программистов

Недавно наткнулся на интересный сервис отправки sms-сообщений. Сервис предоставляет API, которое позволяет интегрировать отправку сообщений в свой сайт.

Тарифы у сервиса довольно вкусные. Решил воспользоваться данным сервисом. Сейчас как раз пишу один проект, думаю интегрировать отправку sms -сообщений в него.

Сервис называется SMS.RU. При регистрации в сервисе по этой ссылке http://micro.sms.ru получите скидку 10%.

Сервис достаточно удобный. Техподдержка отзывчивая. Цены приемлемые (дешевле я не нашел) .

Пользуйтесь, рекомендую.

23 июля 2013 г.

Doctrine Mongodb Запросы(find, insert, update,remove)

find() Запрос по id
$users = $dm->find(‘User’, $id);
$user = $dm->getRepository(‘User’)->find($id);

findBy – Находит множество документов по запросу
$users = $dm->getRepository(‘User’)->findBy(array(‘type’ => ‘employee’));
findOneBy – Находит Один документ по запросу
$user = $dm->getRepository(‘User’)->findOneBy(array(‘username’ => ‘jwage’));
createQueryBuilder() создать новый запрос.
$qb = $dm->createQueryBuilder(‘User’);
getQuery() исполнить запрос на получение 
$qb = $dm->createQueryBuilder(‘User’);$query = $qb->getQuery();
execute() исполнить запрос, возвращает курсор для итерации
$users = $query->execute();
getSingleResult() возвращает единственный результат по запросу
$user = $dm->createQueryBuilder(‘User’)
    ->field(‘username’)->equals(‘jwage’)
    ->getQuery()
    ->getSingleResult();
select() выбрать определенные поля
$qb = $dm->createQueryBuilder(‘User’)
    ->select(‘username’, ‘password’);
$query = $qb->getQuery();
$users = $query->execute();
distinct() получить не повторяющие значения
$ages = $dm->createQueryBuilder(‘User’)
    ->distinct(‘age’)
    ->getQuery()
    ->execute();
hydrate() возвращает масив вместо объектов
$users = $dm->createQueryBuilder(‘User’)
    ->hydrate(false)
    ->getQuery()
    ->execute();
limit() количество возвращаемых заспросов skip() смещение
$blogPosts = $dm->createQueryBuilder(‘BlogPost’)
    ->limit(20)
    ->skip(40)
    ->getQuery()
    ->execute();
sort() сортировка вывод
$qb = $dm->createQueryBuilder(‘Article’)
    ->sort(‘createdAt’, ‘desc’);
если необходима дополнительная сортировка
$query->sort(‘featured’, ‘desc’);
map() reduce()
$qb = $this->dm->createQueryBuilder(‘Event’)
    ->field(‘type’)->equals(‘sale’)
    ->map(‘function() { emit(this.userId, 1); }’)
    ->reduce(«function(k, vals) {
        var sum = 0;
        for (var i in vals) {
            sum += vals[i];
        }
        return sum;
    }»);
$query = $qb->getQuery();
$results = $query->execute();
where()
$qb = $dm->createQueryBuilder(‘User’)
    ->where(«function() { return this.type == ‘admin’; }»);
field() поле 
equals() равно
$qb = $dm->createQueryBuilder(‘User’)
    ->field(‘type’)->equals(‘admin’)
    ->field(‘active’)->equals(true);
in(array()) равно одному из значений
$qb = $dm->createQueryBuilder(‘Article’)
    ->field(‘tags.name’)->in(array(‘tag1′, ‘tag2′));
notIn(array()) не равно множеству
$qb = $dm->createQueryBuilder(‘Article’)
    ->field(‘tags.name’)->notIn(array(‘tag3′));
notEqual() не равно
$qb = $dm->createQueryBuilder(‘User’)
    ->field(‘type’)->notEqual(‘admin’);
gt() больше
$qb = $dm->createQueryBuilder(‘Account’)
    ->field(‘amount_due’)->gt(30);
gte() больше или равно
$qb = $dm->createQueryBuilder(‘Account’)
    ->field(‘amount_due’)->gte(30);
lt() меньше
$qb = $dm->createQueryBuilder(‘Account’)
    ->field(‘amount_due’)->lt(30);
lte() меньше или равно
$qb = $dm->createQueryBuilder(‘Account’)
    ->field(‘amount_due’)->lte(30);
range(10, 20) более 10 и меньше 20
$qb = $dm->createQueryBuilder(‘Account’)
    ->field(‘amount_due’)->range(10, 20);
size(0) размер массива
$qb = $dm->createQueryBuilder(‘Article’)
    ->field(‘comments’)->size(0);
exists(true) проверяет поле на наличие
$qb = $dm->createQueryBuilder(‘User’)
    ->field(‘login’)->exists(true);
type(‘integer’) проверяет тип поля возможные значения Double String, Object, Array, Binary data, Object id, Boolean, Date, Null, Regular expression, JavaScript code, Symbol, JavaScript code with scope, 32-bit integer, Timestamp, 64-bit integer, Min key, Max key
$qb = $dm->createQueryBuilder(‘User’)
    ->field(‘type’)->type(‘integer’);
all(array()) Должны возвращать все значения равны условиям
$qb = $dm->createQueryBuilder(‘User’)
    ->field(‘groups’)->all(array(‘Group 1′, ‘Group 2′));
mod(‘field’, array()) определяет остаток от деления
$qb = $dm->createQueryBuilder(‘Transaction’)
    ->field(‘field’)->mod(‘field’, array(10, 1));
set($name, $value, $atomic = true) обновляет значение
$dm->createQueryBuilder(‘User’)
    ->field(‘password’)->set(‘newpassword’)
    ->field(‘username’)->equals(‘jwage’)
    ->getQuery()
    ->execute();
setNewObj($newObj)
$dm->createQueryBuilder(‘User’)
    ->setNewObj(array(
        ‘username’ => ‘jwage’,
        ‘password’ => ‘password’,
        // … other fields
    ))
    ->field(‘username’)->equals(‘jwage’)
    ->getQuery()
    ->execute();
inc($name, $value) увеличивает значение поля
$dm->createQueryBuilder(‘Package’)
    ->field(‘id’)->equals(‘theid’)
    ->field(‘downloads’)->inc(1)
    ->getQuery()
    ->execute();
unsetField($`field) удаляет поле
$dm->createQueryBuilder(‘User’)
    ->field(‘login’)->unsetField()->exists(true)
    ->getQuery()
    ->execute();
push($field, $value) добавляет новое значение в массив
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->push(‘tag5′)
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
pushAll($field, array $valueArray) Добавляет несколько значений
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->pushAll(array(‘tag6′, ‘tag7′))
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
addToSet($field, $value) добавляет в массив значение если его нет в массиве
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->addToSet(‘tag1′)
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
addManyToSet($field, array $values) Добавляет несколько значений в массив если их нет в массиве
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->addManyToSet(array(‘tag6′, ‘tag7′))
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
popFirst($field) удаляет первый элемент в массиве
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->popFirst()
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
popLast($field) удаляет последний элемент в массиве
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->popLast()
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
pull($field, $value) удаляет все элементы массива с данным значением
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->pull(‘tag1′)
    ->getQuery()
    ->execute();
pullAll($field, array $valueArray) удаляет все значения в массиве
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->pullAll(array(‘tag1′, ‘tag2′))
    ->getQuery()
    ->execute();
remove() Удаляет документ из коллекции
$dm->createQueryBuilder(‘User’)
    ->remove()
    ->field(‘num_logins’)->equals(0)
    ->getQuery()
    ->execute();
group(array(), array(‘count’ => 0)) выполняет операцию аналогичной SQL’s GROUP BY
$result = $this->dm->createQueryBuilder(‘DocumentsUser’)
    ->group(array(), array(‘count’ => 0))
    ->reduce(‘function (obj, prev) { prev.count++; }’)
    ->field(‘a’)->gt(1)
    ->getQuery()
    ->execute();


10 января 2013 г.

RegExp

Удалить лишние пробелы из текста
$name= preg_replace("/\s{2,}/"," ",$name);

-------------------------------------------------

* Clean url as site URL
* Remove schema part and "www" part from the url
* Remove all path information. Keep only domain information.
* Exaple:
* input url: http://www.example.com/path?param#hash
* result: exaple.com
$trimedUrl = trim($url);
$cleaned = preg_replace('|^(?:\w+?://)?(?:www\.)?([^/]+)/?|i', '$1', $trimedUrl);

-------------------------------------------------