• PHP програмист за Русе

    Ако сте в Русе или в региона и сте много добър/а/ с PHP, Бази данни и последните уеб-технологии, може би ще решите да се включите в този екип, който аз горещо препоръчвам.

  • Синхронизация между сървър и мобилни телефони

    През последните седмици се занимавам главно с дооправяне на бакенда на Kolab към z-Push.

    Тази технология дава възможност да си синхронизирате мобилния телефон – Symbian, Android, BlackBerry, Windows Mobile, iPhone с вашия сървър, така, че да можете винаги да имате актуални срещите в календара си, задачите си, както и електронната поща на мобилната джвъчка, която ползвате в момента.

    z-push

    Оказа се, че самият z-Push е доста далеч от utf-8 поддръжка, затова трябваше да я приложа в бакенд файла и се получи доста добре, сега поддържаме почти всички езици, a синхронизацията тече доста бързо. Последния тест беше с 10 000 събития, които успяха да стигнат от сървъра до телефона за около 4 минути, използвайки cache драйвер за MongoDB.

  • OpenWebAnalytics – както трябва да бъде

    Тъй като съм почнал да пиша за статистика в Уеб, защото ми е писнало да използвам услуги на трети страни, които често правят „четки“ на големи клиенти, а за малките … или пък бавят данните, които показват с дни, като tyxo.bg или Google Analytics.

    Решението, дойде от самосебе си, докато се опитвах да реша случая, описан в предната ми публикация, тогава открих OWA, и даже го споделих в Twitter :)

    Какво му е положтелното на това чудо:

    1. Xоства се при вас, вие притежавате и управялвате данните. Ако се компания за разработка, можете да предлагате тази услуга на всичките си клиенти и да печелите пари.
    2. С отворен код е и се разработва сравнително бързо – добавят се нови възможности, които за Google, например и невъзможно да бъдат приложени в следващите N месеца, поради тежката процедура.
    3. Има доста възможности, най-много ми харесва ето тази:
      Clickmap
    4. Говорейки за конкретна статистика за моя проект, ето това е безценно
      ОВА- цлицкстреам
      Това показва, каво точно е интересно за потребителя и върху какво клика на сайта ви,

    PHP API
    Като програмист винаги ми се е искало да мога да си комуникирам с услугите, които използвам, за да мога да вземам и да подавам данни за различни пресечки на информацията. Е, това е възможно, даже повече от възможно – лесно :)

    Oще плюсове
    Чудесно е, че има и проследяване на действията, което за кликове на определени места или за кампании за афилией маркетинг са доста полезни.

    JS
    Разбира се, че има и част за JS, което е и основния механизъм за събиране на данните. Има и досбра документация, но не би трябвало да имате проблеми с намирането на подходящия начин за използване.

    Дай още, Бого
    Вижте още от тук, за това как точно може да работите с данните, каква интеграция има с WordPress и още полезни възможности в най-новата версия или посетете сайта на проекта от тук.

  • Малко мониторинг на всички регистрирани сайтове в BGSite 2010

    Ако ви е интересно моето проучване върху сайтовете, искащи да получат наградата на BGSite.

    Ето и малко статистика, получена чрез писани от мен скриптове на PHP.

    • Колко от сайтовете са валидни, базирано на W3 валидатора (Abort, означава, че сайтът е бил недостъпен за услугата)
    • Колко връзки имат тези сайтове в Google (site:url);
    • Колко други сайтове сочат към този сайт (link: url);
    • За колко време се зарежда сайта от моя дейта център (в Суперхостинг.бг) (в секунди)
    • Ново: На кое място са домейните в класацията за България на Alexa. (колкото по-малко е числото – толкова по-посещаван е домейнът)
    • Ново: За колко време се зарежда сайта от cloud хостинг сървър на Rackspace

    Тестовете можете да видите тук.

    Бъдещи тестове:

    • Време за зареждане от независим дейта център – където е малко вероятно някой от сайтовете да бъде хостван. (готов)
    • Ще пусна пак теста за валидация, защото доста от сайтовете не можаха да бъдат достъпени от W3 API.
    • Лиценз на информацията
    • – … и още няколко интересни.
    • Графична визуализация на тези данни

    Запишете си препратката и се върнете скоро, ако искате още данни. Ще се радвам на мнение и идеи.

  • Интеграция между vTiger и WordPress

    През последните дни се занимавах с интеграция между WordPress и не толкова попълярната в нашите ширини система за работа с клиенти – vTiger.

    В началото потърсих готово решение или акъл на готово, но не се получи и се хванах да го направя от съвсем в началото.

    Задачата беше проста, от сайта на клиента да има форма, специфична за дадения вид бизнес, която след като се попълни от клиента да бъде вкарана директно като „Lead“ в сметката на екипа по продажби и те да могат да започнат обработката на заявката.

    Така или иначе vTiger поддържа доста начини за интеграция (SOAP, WebForms, REST, ), но все още не на небходимото ниво и само за стандартната функционаност. Затова написах собствена услуга за този специфичен клиент и сега всичко работи.

    Полезно?

    vTiger е доста лека и много добра система за работа с клиенти и лично бих я препоръчал на всеки собственик на малък или среден бизнес – безплатна и е доста „лека“ в сравнение с другата подобна SugarCRM.

    Вместо клиентите да ви пращат заявки по пощата или чрез някаква друга система, може те директно да влязат във вашата система, чрез която да управлявате продажбите си и така да ги направите евентуални клиенти и на нови услуги, да им се обаждате, да имате под ръка цялата ин история с вас и всичко което можете да правите с една такава система.

  • Twitter, Oauth и Фортумо (как да променяме twitter чрез SMS)

    Вчера в свободното си време направих едно интересно приложение, комбиниращо SMS канала на Fortumo, оAuth API на twitter и малък сайт за управление, което в крайна сметка дава възможност да променяте състоянието си в Twitter през SMS съобщения.

    Имах в началото малко проблеми с кодирането и с недочитането на изискванията на Oauth, но вече всичко работи както трябва и поне аз ще си го ползвам, когато не съм онлайн и нямам достъп до Интернет :)

    Как работи всичко това, можете да видите тук. Разбира се, че цялата част е написана на PHP, макар, че се изкуших да я надраскам на нещо друго, но за съжаление не ми остана време.

    Услугата е отворена за всеки, който има twitter и телефон :)

  • Прост бот за Twitter

    Aко искате да започнете да програмирате за twitter под PHP, ето ви и добро начало. Да създадем един прост бот, който при получаване на директно съобщение със съдържание ‘късмет’ да връща на подателя късметче.

    Tова колкото и да е просто, като логика, може да ви запознае с начина на работа на API на Twitter, за което и аз ще се погрижа по-нататък, но е добре, ако започнете сами :)

    Лесно и полезно!

    Дефинираме класа и задаваме променливите:

    Class bTwitter{
    var $username = ""; //тук се слага потребителското име на twiter акаунта, който ще слушаме
    var $password = ""; //тук се слага паролата

    Стъпка 2: Да напишем функция, която да взема директното съобщение от входящата ви кутия в Twitter:


    function getmessages()
    {
    $username = $this->username;
    $password = $this->password;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($curl, CURLOPT_URL, "http://twitter.com/direct_messages.json");
    return $result = curl_exec($curl);
    curl_close($curl);
    }

    Стъпка 3: Да напишем функция, която да изтрива съобщението, след като сме изпратили късметчето:


    function deletemessage($id)
    {
    $username = $this->username;
    $password = $this->password;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($curl, CURLOPT_URL, "http://twitter.com/direct_messages/destroy/".$id.".json");
    curl_setopt($curl, CURLOPT_POST, true);
    return $result = curl_exec($curl);
    curl_close($curl);
    }

    Стъпка 4: Да направим функция, която да връща случаен късмет:

    function getKasmet()
    {
    $k[] = "Държавна лотария, тото, на твоя страна е числото! ";
    $k[] = "Стягай багажа за воаяжа! ";
    $k[] = "Кариера ще ти е приоритет –я министър, депутат – напред! ";
    $k[] = "Тук няма искаш и не щеш – в службата ще порастеш! ";
    $k[] = "Не се шегувам, ти печелиш – късмета скоро ще намериш. ";
    $k[] = "На съседа бричката си подари,че нова кола ще караш ти!";
    $k[] = "От Бил Гейтс ще се отървеш, с компютър с Линукс ще се обзаведеш";
    $k[] = "Паричките ти в портмонето ще са като звездичките в небето. ";
    $k[] = "Яки запивки, чаровни забивки и много усмивки! Успехи в бранша и чупки в ханша, здраве в изобилие и радост до безсилие ";
    $k[] = "По-добре е да не започваш, отколкото да спреш на половината път.";
    $k[] = "За плахия и колебаещия се, всичко е невъзможно, защото му изглежда така.";
    $k[] = "Не е познал сладкото този, който не е изпитал горчивото. Силата е търпение и време.";
    $k[] = "Можете да постигнете всичко, което пожелаете, но не може да имате всичко на този свят...";
    return $k[rand(0, 12)];
    }

    Стъпка 5: Да направим функция, която да изпраща съобщението до подателя:


    function sendmessage($to)
    {
    $kasmet = $this->getKasmet();
    $postData = array("user"=>"$to", "text"=>$kasmet);
    print_r($postData);
    $username = $this->username;
    $password = $this->password;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:'));
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
    curl_setopt($curl, CURLOPT_URL, "http://twitter.com/direct_messages/new.xml");
    return $result = curl_exec($curl);
    curl_close($curl);
    }
    }

    Да изпробваме какво сме направили:

    $bt= new bTwitter; // инициираме класа
    $result = $bt->getmessages(); //вземаме съобщенията от входящата кутия
    $r=json_decode($result,true); //декодираме формата им от json към масив
    $size = count($r);
    for ($i = 0; $i<$size; $i++) //започваме да ги обхождаме { // ако съдържат ключовата дума 'късмет' if (ereg('късмет',$r[$i]['text'])) { $bt->sendmessage($r[$i]['sender_screen_name']); // изпращаме съобщението
    $bt->deletemessage($r[$i]['id']); //изтриваме директното съобщение
    }
    }

    Оптимизации върху кода може да има много, което много добре разбирам :)

  • Идентичност директно в браузера

    Мозила отново ме изненадаха, като предприеха тази стъпка, да предложат идентичност директно в браузера, базирана на openID.

    Mоята идея върху, която работя е още по-изчанчена от тяхната имплементация, но това е повече от чудесно.

    Какво предлагат те:
    1. За сайтовете, които използват OpenID, всеки потребител, ще бъде логван автоматично (ако пожелае), само като посети страницата на сайта/услугата, която използва.
    2. Въвеждането на OpenID идентификатора, ще става само веднъж и ще се пази в софтуерното приложение за контрол на идентичностите, а според мен, ще може да се съхранява и във други устройства (smart карта)

    Това е една стъпка напред към създаването на me:// протокола, където браузера, ще бъде основен софтуер за управление на цяла компания и/или на моето пространство в Интернет.