Как да инсталираме Xdebug на Aptana Studio 3

aptana-xdebug

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

Има много PHP едитори – платени и безплатни, и няколко от тях са водещи – PhpStorm, Sublime Text, Aptana Studio, Brackets и други. В този пост ще се опитам да ви обясня как с помощта на няколко стъпки да инсталирате подходящ дебъгер (в случая Xdebug) за Aptana Studio 3 (version 3.6.0), както и за какво да внимавате при този процес.

Преди всичко може да си изтеглите необходимия софтуер от тук:

1) След като сте си инсталирали всичко, което ви липсва, намерете и отворете php.ini файла в директорията, където сте си инсталирали XAMPP. Например:

D:\xampp\php\php.ini

.dll файлът, който изтеглихте от сайта на Xdebug, трябва да е в папката на XAMMP, в php\ext, или:

D:\xampp\php\ext\

2) В php.ini файла намерете секцията [XDebug] (обикновено се намира най-отдолу в него). Както виждате, всички настройки в нея са закоментирани. Единственото, което ще ви трябва, е следното (трябва да замените името на .dll файла с това на вашия):

zend_extension = "D:\xampp\php\ext\php_xdebug-2.2.5-5.5-vc11.dll"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.remote_port = 9000

Важно е след като запаметите промените да рестартирате Apache сървъра.

3) Отворете Aptana и отидете на Window -> Preferences.

4) В новоотворилия се прозорец отидете в:
Aptana Studio -> Editors -> PHP -> PHP Interpreters
и кликнете Add…

AptanaSettings

5) Ще добавите PHP преводач. Единственото, което трябва да направите, е да зададете името му, да посочите пътищата към php.exe и php.ini файловете, както и да изберете дебъгер Xdebug от падащото меню.

AddPhpInterpreter

6) Без да затваряте прозореца Preferences, отидете в
Aptana Studio -> Web Servers
и от бутона New създайте нов Simple Web Server. В тези полета трябва да попълните информация за вашия localhost. Ако използвате XAMPP на различен от стандартния порт 80 (например 8080), съобразете се с това. Например:

LocalhostSettings Localhost8080

7) Затворете прозореца Preferences и отидете на Run -> Debug Configurations… Кликнете на PHP Web Page и добавете нова конфигурация като попълните съответните за машината настройки. Затворете прозореца.

PhpConfig

8 – optional) По желание можете да настроите Aptana да работи с любимия ви браузър. Това става от:
Run -> Debug Configurations -> Web browser
Ако използвате порт, различен от 8080, трябва да го имате предвид, когато избирате сървъра.

BrowserSelection

9 – optional) Препоръчвам ви да си инсталирате помощната програмка Xdebug Helper, налична като разширение за Chrome и Firefox, защото ви позволява да контролирате кога да се и кога да не се включва дебъгера.

XdebugHelper

Можете да проверите дали сте се справили с инсталирането на Xdebug от официалния им сайт [линк]. Всичко, което трябва да се направи, е да се копира цялото съдържание, което се показва в браузъра, когато се извика функцията phpinfo().

Поздравления! Вече може да дебъгвате на воля 🙂 Правете качествени програми и се наслаждавайте на програмирането!

Четене на данни от Excel чрез Eclipse и Java

Image

Дните се редят, домашните минават, изпитът наближава.. А ние от СофтУни задобряваме на Java, както и би трябвало да бъде 🙂

В този ред на мисли реших да направя нещо като упътване за решаване на една от най-интересните досега задачи – поне за мен. В предишната статия ви разказах за първото домашно без много подробности, като наблегнах на последната задача. Сега ще направя нещо подобно – свързано с третото домашно, детайлно обяснение на последната задача. Използвам среда за разработка Eclipse.

Условието й е следното:

You are given an Excel file Incomes-Report.xlsx holding an incomes report in the following format:

Image

Each office puts in this Excel file all their incomes (office, date, description, income, 20% VAT, total income). Your task is to read the report and to calculate the incomes sub-totals for each office (with VAT). Order the offices alphabetically. Print the result at the console in format town Total -> incomes. Finally calculate and print the grand total (the sum of all incomes in all offices). Sample output (for the above report):

Image

You are free to use a Java library of choice to open and read Excel spreadsheets (.xlsx files).

И тъй като последното изречение ни дава голяма свобода в избора на библиотеки, реших да използвам препоръчаната на лекцията такава, а именно Apache POI. Можете да си я изтеглите от <тук>. Библиотеката е свободна за използване и има различни дистрибуции в зависимост от операционната система, върху която ще се ползва. Също ще ни е нужен екселски файл, за да има от къде да чете данни програмата. Ако искате може да си свалите файла, който ползвам от <тук>, а може и да си направите собствен.

След като имаме нужните файлове можем да започнем работа. Програмата се състои от два метода – единият е main() методът, от който започва изпълнението й, а вторият е методът, който съдържа съществената част. Разбира се може да си направите програма и само с main() метод, стига да ви е удобно да работите така.

Единственото, което съдържда мейн методът, е следното:

Image

Задаваме подходящо и описателно име на метода – аз избирам readXLSXFile(), като още при създаването му „хващаме“ грешките, които е възможно да възникнат – IOException и FileNotFoundException. За да няма проблеми при принтирането на данни, задаваме Locale.ROOT, което ни гарантира, че изкараният резултат няма да се влияе от настройките на машината, върху която се изпълнява програмата.

Image

В следващите няколко реда ще инициализираме няколко от променливите, които ще използваме, като се стремим да вървим по пътя на логиката. Първото ни нужно нещо е променлива от тип FileInputStream, в която ще зададем името на работния файл. След като сме отворили файла, започваме четенето от него от най-големия елемент, съответно екселският workbook. Apache POI ни предоставя тази възможност директно чрез един от класовете си, а именно XSSFWorkbook. Следващата стъпка е четенето на sheet-а, а после – задаване на максимална дължина на ред и колона. Ще се нуждаем и от два списъка, в които ще пазим имената на офисите и съответните им приходи. Тъй като единствените колони, които ни трябват за аутпута, са първата и последната, няма нужда от други променливи за останалите данни. Декларираме си и TreeMap, който ще съхранява стрингове (офисите) и списък от double-и (приходите трябва да са в списък, за да можем в последствие да ги сумираме за grand total-а).

Какво трябва да имаме дотук:

Image

Започваме обхождането на таблицата с два фор цикъла, като първият ще е от ред 1 до ред n, където n е последният ред, а вторият цикъл ще е от 0 до последната колона (това е така, защото при четене на редове, броят им започва от 1, а при четене на колони – от 0).

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

ПП: Ако разработвате независима програмата и не знаете от какъв тип ще са изходните ви данни, би било добре да разгледате всички възможни случаи – клетки с данни от следните типове: boolean, формула, стринг, число и т.н.

Image

Вън от двата фор цикъла правим трети – той ще служи за обхождане на информацията, която имаме досега, и проверка на това дали даден офис съществува в списъка offices. Създаваме две променливи, които ще служат за запазване на уникалните стойности, както и нов temporary списък от числа. С два if-а проверяваме дали TreeMap-ът съдържа дадено име на офис като ключ и в зависимост от получения резултат, го запазва.

Image

След като сме запазили всички офиси като ключове в нашия TreeMap, трябва да вземем съответните им приходи. Ще направим това с foreach цикъл, обхождащ както ключовете, така и стойностите на TreeMap-а. Разбира се, това не е единственият начин, не казвам също, че е и най-интуитивен, просто според мен е най-логичен и удобен. Повече за TreeMaps можете да прочетете в документация на Java за този клас <тук>.

Извън цикъла ще създадем две променливи, които ще се наложи да използваме по-късно. Тук може да се поспори как е по-правилно да се принтира число – дали чрез форматиращи низове или с помощта на клас DecimalFormat – колкото програмисти, толкова и мнения. За мен DecimalFormat изглежда по-прегледно.

Image

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

Задачата завършва с принтиране на резултатите:

Image

Целия код на програмата както и всички използвани файлове можете да видите <тук>.

Надявам се да съм била от полза! Успех!

Първо домашно в курса Java Basics на СофтУни

banner_java

Вълнение

Едва преди няколко дни мина първата лекция от курса Java Basics на Софтуерния Университет и първото домашно е вече налице. Няма как, явно ще е доста интензивно – за един месец ще трябва да се научим на най-важните неща в езика Java – и какво по-хубаво от това? Както основателят Светлин Наков често казва: „Практика, практика и пак практика – най-добрият начин да учиш“. Тук съм напълно съгласна, и ще добавя и нещо от мен – когато трябва да научиш нещо за кратко време – е… Учиш го! И то много по-ефективно, отколкото ако имаш много време на разположение.


Какви задачи включва домашното?

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

Ето едно примерно условие, което ме впечатли: да се създаде .exe от .jar файл. Звучи страшно, а? Всъщност решението е много просто. След като си направим runnable jar файл от Eclipse, всичко, което трябва да направим, е да изтеглим нужния софтуер – аз използвах launch4j (линк).

Друга примерна задача изисква да се изпълни създаденият jar файл от конзолата на Windows. Може би това също изглежда сложно, но след кратко проучване става ясно, че решението е на един – единствен ред, и то е:

java -jar NameOfFile.jar


Задача или предизвикателство?

Най-заплетената задача от първото домашно, според мен, е вече прочулата се във форума на СофтУни задача за създаване на PDF документ и принтиране на пълно тесте карти в него. Необичайното в тази задача е, че трябва да се използва външна библиотека за работа с PDF файлове, като библиотеката е по наш избор. Аз се спрях на най-коментираната такава: iTextPdf. Много е полезна и добре работеща с такъв тип файлове!

Решението ми за съответната задача може да видите <ТУК>