• Meta tag = viewport

    Вече се знае, че новия Iphone, ще е със странната резолюция 960×640 вместо 480×320 и проблемът с пикселите започва да се задълбочава, когато се използват CSS дефиниции.

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

    <meta name=“viewport“ content=“width=device-width, initial-scale=1, maximum-scale=1″/>

  • БГ Сайт 2010 – номинации

    Тази година отново бях поканен за специалното жури на БГ сайт 2010 и с удоволствие приех преди малко. Тук в този блог постинг ще пиша, моите предпочитания специалната награда на журито.

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

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

    Телевизия ПроБГ – номинирам ги за това, че публикуват всичките си видео-материали под Creative Common Лиценз, което е доста значимо за една телевизия.

    Клуб „Спри и помисли“ – за това, че се опитват да създават нови неща и да популяризират уеб стъпка по стъпка.


    Следват други …

  • Помогнете да спасим MySQL

    Пускам това писмо в оригинал.

    I, Michael „Monty“ Widenius, the creator of MySQL, am asking you urgently to help save MySQL from Oracle’s clutches. Without your immediate help Oracle might get to own MySQL unconditionally any day now. By writing to the European Commission (EC) you can support this cause and make things much harder for Oracle.

    For details, please read: http://monty-says.blogspot.com/2009/12/help-saving-mysql.html

    Please forward this email to everyone you know that you think may care about MySQL’s future!

    Regards and thanks!
    Michael Widenius
    Creator of MySQL

  • Бого под наем – консултации и обучения

    Ако искате да ме ангажирате като лектор или да ме наемете за консултант по някаква тема или проект, информация за това, можете да намерите тук.

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

    Това, разбира се не важи за всички случаи, но е един начин за справяне с проблема – „нямам много пари“, „но имам проблем за решаване, който ми спъва бизнеса“

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

    Ако искате да присъствам на събитие, организирано от вас, можете да видите за какво мога да говоря с лекота, пак от същата препратка.

    Имам лекции в сферата на технологията, имам и лекции в сферата на разбирането на технологиите от други сфери, като например участието ми конференцията по Национална сигурност и тази за правото в Интернет.

  • 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:// протокола, където браузера, ще бъде основен софтуер за управление на цяла компания и/или на моето пространство в Интернет.

  • Ползваемостта на бизнес процесите

    Освен ползваемостта в уеб или на уеб-приложение, което позволява на потребителя лесно да изполва даден уеб-сайт и да намира това, което желае бързо, има и един друг вид ползваемост, която се отанся до другия канал или канали по-които работи приложението и до начина на работа на самото приложение – тоест самите процеси, заложени в него.

    Ето и общото положение
    1. Влизам в сайт, на който няма да се върна повече (искам да свърша нещо и да продължа напред)

    Регистрация
    Уф, трябва да се регистрирам, за попълня 5 полета. След това трябва и да потвърдя е-адреса си. Вече ми отне много време. Потвърждавам адреса си и получавам отговор пак на него с името и паролата си.

    Ха, на бас
    Сигурно ви се е случвало това безброй пъти на много сайтове и не ви е направило впечатление. Къде за мен е проблема:

    1 – Губя си времето за услуга, която няма да използвам в бъдеще, или ще използвам много рядко
    2 – Трябва да потвърдя мейл адреса си – пак губя време
    3 – Получавам паролата си на е-пощата си в открит текст – което значи, че автоматично могат да я знаят n на брой човека, като n > 2. Мнгоо вероятно е и сайта, да я съхранява в такъв вид, което мене лично ме притеснява.


    А как можеше да е?

    – Все повече сайтове, трябва да позволяват логването с единна идентичност (технологии за това много, например OpenId или Шиболет)
    – Ако искам да ползам нещо и това стане бързи, аз пак ще го правя. Трябва да излезем от модела на това всеки да си гради база данни сам, а да преминем на разпределени бази данни на идентичности. Така клиента, може да ползва много услуги с единен идентификатор и да не се занимава с това да се регистрира на много места.
    – За Бога, не съхранявайте и не предавайте паролите МИ в открит вид, особвнно по SMTP протокола. Там всеки може да ги прочете и да се възползва от тях.

    Ползваемостта на бизнес процесите и тяхната оптимизация е важна част от уеб и не трябва да се забравя.