MentorMate и MobCon 2015

0

MobCon_MasterBrand_Marks_PNG
За втора поредна година Ментормейт организира конференция насочена към мобилно разработване и технологии. Всички участници ще имат възможност да се докоснат до последните тенденции в разработване на приложения за iOS, Android, хибридни приложения, мобилно тестване, сигурност и много други.

Ако желаете да участвате в събитието, което ще се проведе на 5-ти април в Inter Expo Center в София, можете да се възползвате от 25% отстъпка от цената на билета, като въведете промо код FriendOfNeli при регистрация. За повече информация, можете да посетите страницата на събитието тук.

Ще се видим там 🙂

Share

Transport Layer Security (TLS) Бързодействие (видео)

0

Наскро попаднах на едно страхотно видео на тема “Is TLS Fast Yet?“.
В него засягат темата за това, че единствената причина TLS да е бавен, е заради факта, че все още не достатъчно уеб сайтове го използват.
За тези, които не знаят, Transport Layer Security (TLS) е наследникът на Secure Sockets Layer (SSL) протокола.
В лекцията се обяснява как точно работи протокола и какви проблеми с бързодействието решава.

На един от слайдовете има посочен линк към много интересна статия за Session Identifiers и Session Tickets. Силно ви препоръчвам да я прочетете.

Share

Phing – PHP инструмент за организация на build процес

0

logo
След като имах възможността да използвам Phing инструмента за създаване на PHP приложения, реших да напиша една статия, чрез която да представя някои от основните му възможности. Тук можете да я прочетете цялата. Надявам се да ви е интересна и полезна 😉

Share

Филмов конкурс 2014 Ментормейт

0

И тази година, Ментормейт обяви вътрешен конкурс за създаване на филм. И ние, заедно с колегите от варненския офис решихме да се пробваме в тази надпревара, както и да си подарим няколко весели дни, изпълнени с много смях и положителни емоции.

Благодарение на Калоян, който пое ролята на сценарист, режисьор, оператор и доста други роли, успяхме да заснемем това произведение на изкуството:

Наградата, която спечелихме е за най-добър Script. Догодина се надяваме на още повече награди 🙂
Тук можете да видите и останалите претенденти в конкурса, които също се представиха достойно. Enjoy!

Share

Bulgaria Web Summit 2015

0

tixeo-video-web-conference
За всички любители на уеб технологиите, организаторите на таз годишното издание на Web Summit, обявиха официално датата на провеждане на събитието и пуснаха билетите в разпродажба.
Може да следите всички новини, както и бъдещата програма на лекциите/сесиите, които ще се провеждат.
Хайде до скоро и ще се видим там 😉

Share

Безплатни онлайн курсове от MongoDB University

4

mongodb
Наскоро, благодарение на един колега, научих за организация, наречена MongoDB University.

Университетът предоставя възможност на любителите на МонгоДБ да се възползват от безплатни онлайн курсове. При успешно завършване, всеки курсист получава сертификат.

Курсовете са подходящи, както за разработчици, така и за администратори на бази от данни. За повече информация, кликнете тук. Успех!

Share

MongoDB и нерелационните бази от данни

0

mongodb-iconbox-mongodbpng-32xpgexqПрез последните няколко години все повече популярност придобиха нерелационните бази от данни. Възникнаха и много противоречиви мнения по въпроса дали NoSLQ (Not only SQL) базите от данни ще изместят, така популярните от десетки години насам, релационни бази от данни (SQL).

Така или иначе и двете технологии имат своите предимства и недостатъци. Както обичам да казвам – няма лоша или добра технология. Всичко зависи от ситуацията и обстоятелствата, при които е прилагана и начинa на нейното имплементиране.

Ще се опитам накратко да разкажа, според мен, кога е добре да се използват нерелационни бази от данни или по-конкретно MongoDB и какви са неговите предимства спрямо стандартния SQL.

Предимства
Едно от основните предимства на този вид бази от данни е тяхното бързодействие на обработка на информацията. Самата тя се съхранява в колекции, които се състоят от отделни документи, като всеки един от тях представлява валиден JSON обект. Тъй като няма връзки между отделните колекции, не е необходимо да се извършват сложни операции по сглобяване на изискваната информация, което от своя страна води и до повишаване на ефективността и бързодействието. При SQL многобройните JOIN операции изискват допълнителни ресурси за обработка и сглобяване на крайната информация.

exampleNoSQL базите от данни са изключително гъвкави и лесно скалируеми. Тяхно предимство е, че могат лесно да бъдат разширявани хоризонтално, докато гъвкавостта на стандартните SQL бази от данни, е лесно манипулираната им вертикална структура.
Например, в една и съща колекция могат да бъдат съхранени обекти, които нямат нищо общо със съседните им. Решавате, че новият JSON обект, който искате да добавите трябва да има допълнителна двойка ключ-стойност и го добавяте без проблем. Не е необходимо да слагате новите стойности и на останалите документи в колекцията. Обратно на това, при SQL добавянето на нова колона в релацията своевременно води и до добавянето и за всички останали записи в нея, било то с празни или стойности по подразбиране.

Репликация
Репликацията на базата от данни при MongoDB се реализира сравнително лесно – едно от следващите предимства. Поддържат се няколко модела на репликация – Master – Slave, Replica Set и Primary Election.

При Master – Slave модела, който е основен, базата от данни е репликирана и на двата сървъра, като Read операциите се изпълняват от Slave-a, а останалите – Write заявки се изпълняват от Master-a. Необходимо е и двата сървъра да бъдат синхронизирани във всеки един момент. Този модел е изключително гъвкав и е подходящ при backup, failover, read scaling и други.

Replica Set е всъщност Master – Slave модел с автоматичен failover. Най-значителната разлика е, че Replica Set-a не се състои от един единствен Master. Когато той не може да бъде достъпен поради някаква причина, клъстерът избира нов Master, който иззема функциите на предишния. Така или иначе, Replica Set винаги се състои от един Master (наричан Primary) и един или няколко Slave-a (наричани Secondaries).

При Primary Election модела е важно да се отбележи, че ако Primary сървърът в клъстера не може да бъде достъпен в някакъв момент, тогава всички останали правят “избори” и решават кой ще бъде новият Master. Този процес може да бъде иницииран от всеки един от Secondary сървърите, които не могат да достъпят основния модул. Победителят бива избран от множеството гласове. Реализирането се осъществява с помощта на арбитър. Взема се под внимание и кой от останалите Secondary модули е бил актуализиран най-скоро. Новият Primary node получава най-високия приоритет.

election

Приложение
Нерелационните бази от данни са подходящи за съхраняване на статистичека информация, анализи и др. При наличие на голям обем от данни, които реално нямат връзка с останалите колекции. Силата на този тип бази от данни е в това да бъдат прилагани без наличие на сложни взаимовръзки. Неправилно би било, ако се симулират по някакъв начин външни връзки или препратки с други колекции, както е при стандартните релационни бази от данни.
NoSQL базите от данни не са подходящи за сложни банкови операции, тъй като не поддържат транзакции.

Надявам се инфромацията да ви е била полезна. До скоро!

Share

AjaXplorer – уеб базиран инструмент за управление на файлове

0

ajaxplorer Наскоро открих един много полезен уеб базиран инструмент с отворен код – AjaXplorer. Както подсказва името му, базиран е изцяло на AJAX.

AjaXplorer е инструмент, с чиято помощ могат да се добавят, изтриват и модифицират файлове съхранени на сървър чрез уеб браузър.

Дава възможност на потребители или администратори на уеб приложение да работят с файлове директно на сървъра чрез комплексен и удобен GUI. Подходящ е когато, например, ежедневно трябва да се добавят нови изображения в галерия от потребители, които нямат директен достъп до сървъра, където се хоства проектът. Ползвала съм го заедно със Zend Framework за администриране на изображения, които се добавят на страници с различни видове продукти.

Използвнето на AjaXplorer по нищо не се различава от стандартен файлов браузър. Освен това, потребителите могат да променят файлове без дори да им се налага да ги копират на локалната си машина.

С инструмента могат да се правят също и следните операции:

– инсталиране на приложението на сървър или облачна платформа;

– лесен достъп чрез мобилни устройства;

– синхронизиране на файлове на сървъра с техни копия на локално устройство – компютър, таблет и др.;

– администриране чрез създаване на потребители, предоставяне на права и използване на Plugin-и;

– споделяне на документи с други участници в общ проект.

AjaXplorer може да бъде инсталиран сравнително лесно и бързо на Linux, Windows и Mac машини.

 

Share

Web Crawlers

0

web-crawlerНалагало ли ви си е да търсите дадена ключова дума в някой оргомен уеб сайт с много страници и съдържание?

Едно радио преди време беше обявило игра, при която трябваше да се търси страница, на която има написанa опрелена ключова дума. Задачата беше лесна за обикновен потребител, който трябваше да отдели 15-20 минути, за да обходи основните страници на сайта, докато намери търсения текст. Но аз реших да си го направя по малко по-интересен начин като си напиша мой си скрипт, който играе ролята на web crawler.

Реших да използвам PHP и CURL за целта. Първо изкарах всички страници на уебсайта под формата на XML Sitemap. Реших да сложа и малък timeout, все пак да не товаря сайта прекалено. В случая се взема под внимание, че XML файлът е в същата директория, където е и самията скрипт. Ето го и решението:

$xml = simplexml_load_file('web-urls.xml');

$timeout = 5;
$stringToSearch = 'String to search';

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

foreach ($xml->url as $obj) {
    curl_setopt($ch, CURLOPT_URL, $obj->loc);
    $fileContents = curl_exec($ch);

    $find = strpos($fileContents, trim($stringToSearch));
    if ($find !== false) {
        echo 'Found in: ' . $obj->loc . '<br />';
    }
}

curl_close($ch);

Естествено, има и по-добри решения, това е само един от многото варианти.

Другият, “паяк”, който искам да ви покажа е Crawler, който е написан на Node.js и работи доста бързо. За да го ползвате трябва да имате инсталиран Node.js, както и самият Crawler. Ето и един примерен код, с който можете да обхождате всички линкове на даден уебсайт:

var Crawler = require("crawler").Crawler;

var c = new Crawler({
    "maxConnections": 10,
    "callback": function(error, result, $) {
        if (result) {
            var page = result.body;
            var res = page.match(/bechtel/i);
            if (res && res.length > 0) {
                console.log(result.body);
            }
        }

        $("a").each(function(index, a) {
            console.log(a.href);
            c.queue(a.href);
        });
    }
});

c.queue("http://example.com");

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

Полезен инструмент също е PHP Simple HTML DOM Parser, с който сравнително лесно може да се обхожда DOM с помощта на PHP.

 

Share

PHP FamousQuoteQuiz проект

0

quizПреди няколко месеца ми се наложи да направя примерен проект в рамките на 2-3 дни. Задачата изглеждаше предизвикателно интересна. Ето защо, реших да споделя накратко начина, по който я реших и предизвикателствата, пред които се изправих.

Най-общо заданието на задачата беше да се направи quiz с велики мисли на известни хора, като има възможност данните да бъдат придобити посредством уеб услуга.

Играта представлява набор от въпроси, които се задават като има възможност да се работи в два режима – отговаряне само с Да/Не или да се избере правилният отговор от общо три представени възможности. Потребителят трябва да има възможност сам да сменя режимите на работа.

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

Първо, реших, че няма да иползвам нито един популярен PHP фреймуърк, а ще си напиша мой MVC проект, като използвам наготово само някои компоненти, койтп ще ми бъде от полза при реализиране на други проекти. Относно базите от данни, избрах PostgreSQL. За смяна на режимите на quiz-а използвах AJAX с JQuery.

И така, реших да потърся подходящ Web Service, който да ми налива записи за известни личности и техните мисли. След няколко часово търсене попаднах на http://api.theysaidso.com/, където всеки ден се пуска по една нова мисъл във всяка една от наличните категории – “funny”, “management “, “sports”, “life”, “inspire” и “love”. Полученият отговор от REST услугата поддържа XML и JSON формат. Аз се спрях на JSON, като може да бъде променен лесно чрез конфигурация. Скриптът, който се грижи за това го отделих в отделна папка “jobs”. Тъй като има ограничние броя на заявките за всеки ден, е добре скриптът да се пуска само веднъж дневно посредством Cron job. В отделна папка “logs” се записва резултатът за това колко нови записа са получени, а самите данни за всеки автор и съответно категория, записвам в таблица “quotes”. В отделна таблица “quotes_categories” се съхраняват описанията на категориите.

След като вече имам налични данни в базата, мога да започна работа по самото приложение. Няма да навлизам в прекалено много детайли, тъй като на края на статията може да намерите пълния код на проекта.

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

Ето и някои от наличните компоненти:
– основните действия са реализирани в класа QuizActions.php – задаване и промяна на конфигурация за режим на работа на приложението;
– прихващане на грешки и записване на log чрез метода exceptionHandler() в класа App.php;
– вземане на стойности от глобалните масиви GET и POST, чрез централизиран метод getRequestParams() в класа App.php;
autoloader за динамично включване на библиотеки от папката “lib”;
– информация за всяка една от станиците съхранена в таблица “pages” в отделна схема “content” *;
– реализиране на меню от линкове, записани отново в базата, съответно в таблици “menu_groups” и “menu_links” *;
– PDO за операции с базата от данни, отделени в клас DataBase.php;
– Session.php клас за работа със сесии;
– Template.php клас за работа с темплейт файлове за принтиране на изгледи с разширение .tpl;
– Cleaner.php клас за изпозлване на различни видове валидизации. В случая има наличен метод за стрипване на HTML тагове за предпазване от XSS атаки. Естествено, могат да бъдат добавени още много такива методи;
– конфигурационни масиви изнесени в папка “config”;

Пълният код на проекта може да бъде намерен в GitHub профила ми тук. Надявам се предоставената информация ви бъде полезна!

 

* Backup на всички таблици може да намерите в папка “data” на проекта.

Share
Go to Top