Bulgaria Web Summit 2018

Тази година за първи път реших да посетя Bulgaria Web Summit – конференция за Front-end, Back-end, UX, Design и не само. За нея чух от колеги. Посетих сайта на събитието и се запознах  с програмата. Звучеше многообещаващо – 4 зали, много лектори, интересни теми от различни сфери.
Лекциите във всяка зала започваха по едно и също време и се препокриваха, така че предварително си бях набелязала, кои бих искала да посетя. Бях си подготвила и печатна версия на програмата(за съжаление такава не беше публикувана на сайта на събитието), за да мога на място бързо да сменя някоя лекция.
За целият ден посетих общо 8 лекции. Тук ще спомена само някои от тях.

How to hack a node app?
Asim Hussain
Минути преди първата лекция бях на място, готова да чуя как се ‘хаква’ node приложение. Лекторът ни запозна, с някои от известните хакерски атаки от последните години, как точно са извършени, какви слаби места на софтуера са използвани и по какъв начин.
Изводите накрая бяха:
– Не се доверявай на никого – филтрирай клиентските данни;
– Не подценявай и дребните, на пръв поглед, места за пробив. Когато ги откриеш – просто ги поправи.
– Ако не си сигурен в името на пакета, който искаш да инсталираш – не налучквай, а провери в официалните източници. Иначе сам можеш да поканиш ‘врага’ на гости.
Въпреки, че очаквах по-практическа насочена лекция с повече примери и техники за писане на сигурен код, като цяло  ми хареса.

Sharing Code Between Web and Native Apps
Sebastian Witalec
С много примери и в реално време лекторът ни запозна с начините за споделяне на код между приложения за различни устройства/операционни системи, използвайки общо хранилище за съхранение на кода; MVC (Model, View, Component) модела за разделяне на приложението на пластове и споделяне на общите части;  namespace за дефиниране и обработка на разликите. Показа ни и инструменти за преобразуване/прекомпилиране на съществуващи решения в такива със споделен код.

Simplicity is not Simple
Dave Hogue
Една от най-интересните лекции, които посетих. Стана дума за това, че в повечето случаи, започвайки един проект, човек е с едни очаквания за сложност и функционалност, а в процеса на разработка, постепенно се откриват нови изисквания и възникват нови идеи, които усложняват крайния продукт. И въпреки, че той е завършен и доставен, това не винаги означава, че е постигната първоначалната цел, ако реално е трудно да се работи с този продукт и крайният потребител не е доволен.
Много често след разработката на последните изисквания, работата по проекта не е завършена, а се налага връщане назад и преоценка на системата с цел подобряването и опростяването на потребителския интерфейс.

По интересен и увлекателен начин ни бяха представени видовете системи: прости(simple), сложни(complicated), много съставни(complex), хаотични(chaotic).

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

Признаци за възможност за опростяване:
– неинтуитивни и объркани последователности в действията;
– ‘индиректни’ действия – т.е за да постигнеш нещо на текущата страница трябва да извършиш действие на друга страница;
– опит за доставяне на всичко на всеки – добавяне на функционалности без да са реално необходими, само за случай, че потрябват;
– добавяне на функционалности, само защото някой  е казал, че е ‘хубаво’ да ги има;
– копиране на чужди идеи – да направим нещо, само защото и другите го правят. Това, че го правят не означава, че е непременно правилно :);
– следване на съвременни методи и технологии, без да са реално необходими.

След като ни запозна с начините на идентифициране на необходимостта от опростяване, Dave Hogue ни запозна и с методите за опростяване:
– премахване на ненужни функционалности;
– комбиниране на два по-малки модула в един общ;
– приоритизиране – поставяне на фокус върху една основна функционалност за дадена страница;
– разделяне на сложна функционалност на две по-прости.
Като цяло беше наблегнато на това, че целта на даден проект трябва да бъде не само успешното му завършване, но и постигането на добър потребителски интерфейс, което е итеративен процес, който се постига на няколко цикъла и е важна част от разработката на даден продукт/система.

Code Review
Ilko Kacharov
Лекцията беше изградена на базата на аналогия на даден проект, по който работим,  с къщата, в която живеем. И както всеки иска къщата му да бъде подредена и чиста, така трябва да се стремим и кода, който пишем да бъде чист и подреден.

Както във всяка къща има установени правила от домакина и трябва да се спазват от всички в къщата, така и всеки, който се присъедини към даден проект, трябва да бъде запознат с правилата на работа и да ги спазва. Човекът или хората, които правят ревю на кода са всъщност домакините. Те проверяват дали са спазени правилата и ако не са  – сигнализират за това съответния разработчик. По този начин се постига прозрачност.

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

Основните неща, споменати за важни при код ревю:
– проверка за повтарящ се код;
– проверка за повтаряща се функционалност;
– бъгове и неконсистентност;
– проверка на зависимости между библиотеки;
– бързодействие;
– лесна поддръжка.

Беше наблегнато на това, че ревюто на код е социален процес. Дава възможност за бърза обратна връзка. Ако тя е положителна – това води до стимулиране на съответния разработчик.
Важно е да не се губи фокус – оценката трябва да е насочена към написаният код, а не към разработчика.
Коментарите трябва да бъдат издържани в стила на добрия тон:
– да се използват предложения вместо заповедни изречения;
– да се задават въпроси;
– да се използват учтиви форми – моля;
– да се използват похвали;
– предложенията трябва да са на последно място.

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

PMI-PBA Certification

Преди два месеца започнах подготовка за изпит за сертификат за бизнес анализатор – PMI-PBA и в настоящата статия ще споделя мнението си за книгите и материалите, които използвах.

В мрежата има много информация относно процеса за кандидатстване (попълване на формуляра, изисквания за допускане до изпит, проверка на кандидатите), препоръки за курсове и учебни материали, трикове за по-лесно запомняне и успешно попълване на теста. Обемът информация, върху който е изграден изпита е доста голям. Самият PMI има изготвен списък от 12 книги за прочит. Препоръчват се различни курсове, семинари и книги по темата.

За своята подготовка аз избрах:

1. Онлайн курс – iZenBridge – PMI-PBA Exam Prep Course.

За този курс разбрах от един форум. Оказа се доста добър и полезен. Изготвен е специално за успешното вземане на PMI-PBA сертификата.

Съдържа повече от 60 часа лекции, групирани в няколко раздела. Има както въвеждащи, така и подробни лекции по различните теми. На по-важните теми има отделни лекции.

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

На края на всеки раздел има примерен тест от 10 въпроса за проверка на придобитите знания. Отделно има достъп до примерни тестове с по 50 въпроса от всяка област, както и 2 примерни теста от по 200 въпроса. Хубавото на тестовете е, че след попълване може да прегледаш отговорите и към всеки въпрос има допълнителна информация за отделните опции и анализ на верния отговор.

Включени са и видея с разяснителни семинари.

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

В курса е препоръчана следната книга:

2. Business Analysis for Practitioners: A Practice Guide

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

3. PMI-PBA Certification Study Guide.

Книгата е една от най-препоръчваните във форумите, свързани с PMI-PBA Certification процеса, но спорен мен не е достатъчна за придобиване на практически знания. По скоро може да бъде използвана като наръчник или план за вземане на изпита.

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

Започва със съкратен преглед на съдържанието на изпита, последван от по-подробно описание на всяка една от 5-те области от знания, които ще бъдат тествани. Информацията е кратка, без подробности. Едно и също съдържание се повтаря в различна форма – текст, таблица, диаграма. Важната информация е маркирана, за бърз преглед в последствие и по-лесно запомняне. Има много препратки към PMBOK като източник на информацията.

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

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

4. PMI-PBA® 200-Question Sample Exam.

Тази книга също е една от най-препоръчваните за придобиване на представа какво представлява самият изпит. В сравнение с онлайн тестовете, включени е курса обаче, не е особено добра. Половината книга е тест от 200 въпроса, с другата половина – същият тест с отговори. Това, което не ми харесва е, че няма никакви обяснения на понятията, в сравнение с онлайн тестовете от курса, на пример. Има препратки за информация към външни източници – тези от списъка на PMI.

 

Bringing multiple Virtual Hosts within the same URL space with Apache

Our team has been working on a rather large and complex web application project for the past couple of years. Now, nearing its completion, we are challenged with the necessity to host, deploy and support the ready product. On one hand side, we want to retain control over the code base for each customer separately, i.e. be able to introduce individual installations which coexist but have different source code versions. On the other side, we want to offer the platform to everyone under a common URL namespace and be sure, that every user is routed to their own virtual host.

Main Challenges

  • Host a large number of virtual hosts (e.g. more than 1000), each with its own code base, source code revision, database and settings;
  • Introduce individual customer identification and authorization;
  • Secure the virtual hosts serving the actual application and isolate them from the outside World through a firewall;
  • Use the above information to route each customer to the correct virtual host, representing their individual installation;
  • Bring everything transparently under the same URL namespace, advertising a single URL to everyone for product access.

The Approach

The basic idea was to authenticate each web user for the purposes of giving them access to the application. Then use this information to route the user’s requests to the correct virtual host, that contains their individual code base and settings. To achieve this, we decided to introduce a gateway server to handle the authentication and routing.

Continue reading “Bringing multiple Virtual Hosts within the same URL space with Apache”

SVN + SSH Access Log to GrayLog

Log SVN Access to a Central Location

Today I was searching the web for ways to log access to our Subversion repositories. It turns out, that there is no built-in straightforward way to do that. Most of the posts on the Web suggest using the Apache’s access log. This could work only if you have set-up WebDAV on your Apache server. We prefer to use SSH tunnels to access our repositories for many reasons, overhead being one of them.

So I took another run and ended up reading Kintoandar’s blog. He explains a rather simple way of making SVN log every access to the repository. It is based on svnserve, which is called every time a connection to the repository is made. The command itself supports logging, but the optional parameter for using log files is rarely used. Continue reading “SVN + SSH Access Log to GrayLog”

Курс по английски в Лингуа Мунди

Преди по-малко от месец завърших успешно ниво Upper Intermediate (B2) в школата “Лингуа Мунди” гр. Пловдив. Впечатленията ми от курса са положителни, но да разкажа и малко по-подробно за плюсовете и минусите:

Нещата, които ми харесаха:

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

Нещата, които можеше и да са по-добре:

  • тестовете са прекалено лесни с цел да няма пречки да запишеш следващото ниво.
  • неудобни са часовете на курсовете за сертификати (Cambridge, TOEFL, IELTS, etc).

Като цяло препоръчвам школата заради учителския състав, методите на обучение и отношението им!

Continue reading “Курс по английски в Лингуа Мунди”

Modernizing Legacy Applications In PHP

Modernizing Legacy Applications In PHP

Тази книга описва необходимите стъпки за модернизирането на остаряло приложение. Дава добро описание на понятието “legacy”, както и защо трябва да бъде модернизирано. Самите стъпки са добре подбрани, макар че ми се искаше примерното приложение в книгата да придобие още по-завършен вид. В крайна сметка крайният резултат доста наподобява това, което представляват повечето модерни MVC frameworks, но в по-опростен вариант. Истинската полза от изброените стъпки е това, че се разбира защо е необходимо да се предприемат, обяснени са подробно, както и след всяка глава има въпроси и ситуации, които могат да възникнат. Това, което ми липсва, обаче са неща, които са споменати в книгата като възможно развитие, но изрично е посочено, че няма да бъдат описвани и са дадени препратки към други материали по темата. Това са неща като testing frameworks, data mapper / active record database patterns, domain driven design. Липсва ми и отделна глава относно конфигурация на приложението за различни среди (само се споменава), както и error handling. Има и неща, които са излишни и идват в малко повече (споменават се почти във всяка глава): как и какво точно да търсим в кода на целия проект когато се заменят разни структури; кога да направим commit и да известим QA отдела; кога да искаме помощ или какво да кажем на operations отдела за промени по конфигурацията на сървъра и др. Като най-полезни мога да определя четири от стъпките, които виждам доста често, че се пренебрегват при разработката на приложения или просто не са усвоени: 6. dependency injection, 7. tests, 16. dependency injection container.

Continue reading “Modernizing Legacy Applications In PHP”

Pro PHP Security

CoverКнигата се опитва да опише всички основни концепции, които е нужно да разбираме до поне някаква степен, за да се подсигурим, до колкото е възможно (тъй като се твърди, че абсолютната безопасност е близка до невъзможното), че личните данни ще останат лични, че ще избегнем излишно изразходване на ресурси и че не злоупотребяваме с хората/машините които ползват нашите услуги. Oбхващат се много важни и интересни теми като валидиране на потребителски данни, SQL инжекции, Cross-Site скриптинг, Remote execution, кражба на сесия и обезопасяване на мрежови връзки (SSL, SSH), които смятам, че са задължителни знания за всеки програмист, който работи с уеб приложения.

Continue reading “Pro PHP Security”

Modern PHP

catКнигата е по-скоро нещо като ревю на новостите в PHP. В началото разказва повече за новите характеристики на PHP >= 5 като (Namespaces, Traits, Generators, Closures). Минава през PSR стандартите, използването на компоненти и удобството да използваш Composer, добрите практики при създаването на PHP приложения, проследява целия процес по създаване на PHP приложение (Hosting, Provisioning, Tuning, Deployment, Testing, Profiling) и накрая завършва с може би най-интересната за мен част – HHVM и Hack и влиянието им върху PHP. Повечето от нещата в книгата са известни за хората, занимаващи се с програмиране, но се дава една базисна насока при създаването на нови приложения.

Continue reading “Modern PHP”