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);

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

3 апреля 2012 г.

Ликвидация ЧП - Фонды

Для того, чтобы пройти проверку в Пенсионном фонде - необходимо получить справки из следующих фондов:
1. Фонд социального страхования по временной утрате трудоспособности.
2. Фонд страхования от несчастных случаев.
3. Цент занятости.

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


Фонд соц. страхования по временной утрате трудоспособности

метро "Дарница", 02094, ул. Попудренко 34.
тел.: 566-67-92, 566-22-08, 566-49-79.

Необходимо написать заявление в свободной форме (я писал его непосредственно в фонде, мне подсказали, как его писать). Заявление в кабинет № 210.
Через неделю сказали прийти за справкой в кабинет № 204.

Общие впечатления очень положительные. Старались помочь, все подсказывали, все сделали быстро.
С данным фондом проблем не было вообще. Люди работают, это радует.

Центр занятости

ул. Симферопольская 3/2 (возле Дарницкого вокзала).
тел.: 567-60-71

Необходимые документы: справка о закрытии счета; справка о том, что не было движений на счете; копии приказов о назначении директора; печать. Заявление писал тоже на месте.

Через неделю сказали прийти за справкой.

Общие впечатления опять, очень положительные. Добрые люди, хорошие работники. Проблем не возникло вообще.

Фонд страхования от несчастных случаев

Это самый интересный случай. Мало того, что найти адрес этого фонда практически нереально, так он еще и неправильный. Ощущение такое, что они специально шифруются, будто бы секретный объект особой важности. Ну да ладно, это прелюдия, дальше больше.

ул. Магнитогорская 1 (наиболее близкая станция метро - "Черниговская").
На самом деле это оказалась не улица Магнитогорская, а переулок Магнитогорский.

Пришлось побегать, пока удалось найти этот переулок.

тел.: 362-88-32, 362-88-34, 362-88-35, 362-88-94.

Необходимые документы: заявление (пример есть в фонде), справка из Центра занятости (см. выше), копия "Опису" (который дают в администрации).

Сначала мне сказали, что необходимо только заявление. Я написал заявление и понес его в начальнице фонда. На месте ее не оказалось, мне сказали, что она болеет, когда будет не известно, поэтому ждите и все.
Меня это очень поразило, т.к. я совсем не понимаю, нахер нужны заместители, если мне блин все равно нужно ждать начальницу. Это бред.

Потом, все таки, одна из женщин взяла мое заявление и дальше я вообще ничего не понял.
Мне сказали, что нужна справка из Центра занятости, что-то там еще, и вообще, какого хера я к ним приперся и "пошел вон отсюда".

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

Но т.к. справки из ЦЗ у меня не было, я решил временно по тихому удалиться.


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

На днях собираюсь ехать в ЦЗ, заберу справку и опять в этот фонд. Посмотрим, что будет дальше.


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