Блог о программировании

Совершенный код

Категория: Книги
 15 февраля 2016 г. 20:54

Автор: Стив Макконнелл

Обложка книги 'Совершенный код'

Философская книга. Бесспорно, она не будет смотреться лишней в коллекции книг программиста любого уровня.

Независимо от того, какой опыт в программировании у читателя, он всегда сможет подчерпнуть из книги что-то полезное для себя. Новичкам книга обрисует хороший стиль оформления кода, заставит задуматься над вопросами его читабельности и понимания. Более бывалые программисты найдут для себя полезными некоторые техники программирования или подходы к проектированию систем. Ну а гуру вдруг если и будет читать эту книгу, все равно сможет найти ее занимательной, поскольку в ней речь идет не только о программировании.

Много внимания уделено техники проектирования проектов. Освещены вопросы, связанные с качеством ПО. Освещены больные темы тестирования, отладки, рефакторинга и оптимизации. Полно дельных советов.

Книга читается без привязки к какому-либо языку программирования.

Удаление начальных и конечных пробелов(и других символов) из строки в PHP

Категория: PHP
 11 февраля 2016 г. 19:21

В любом языке при работе со строками является типичной задача удаления пробелов как в начале, так и в конце строки. В PHP для этих целей существует три функции: ltrim(), rtrim(), trim(). Функция ltrim() удаляет пропуски в начале строки, rtrim() - в конце строки, trim() - как в начале, так и в конце. Что интересно: эти функции, помимо пробелов, удаляют также управляющие последовательности перехода на новую строку, возврата каретки, табуляции и ноль-символа.

Пример:

$example = " \tHi everybody\n";
var_dump(trim($example));
var_dump(rtrim($example));
var_dump(ltrim($example));

В результате мы получим:

string 'Hi everybody' (length=12)
string ' 	Hi everybody' (length=14)
string 'Hi everybody
' (length=13)

Что самое интересное, вышеописанные функции также могут удалять символы, заданные пользователем. Для этого вышеописанным функциям нужно передать вторым аргументом строку, содержащую удаляемые символы. Например:

$example = " yHi everybody\n";
var_dump(trim($example, " y"));
var_dump(rtrim($example, " y\n"));
var_dump(ltrim($example, " yH"));

В результате:

string 'Hi everybody
' (length=13)
string ' yHi everybod' (length=13)
string 'i everybody
' (length=12)
Теги:  php  php7 

Управление регистром символов строк в PHP

 22 января 2016 г. 20:38

В PHP существует несколько функций для управления регистром символов:

ucfirst() -  преобразует к верхнему регистру первую букву строки;

ucword() -  преобразует к верхнему регистру первые буквы каждого слова в строке;

strtoupper() -  преобразует к верхнему регистру все буквы в строке;

strtolower() -  преобразует к нижнему регистру все буквы в строке;

Пример:

$str = "who is your daddy?";
print ucfirst($str).'<br/$gt;';
print ucwords($str).'<br/$gt;';
print strtoupper($str).'<br/$gt;';
print strtolower($str).'<br/$gt;';

Код выведет:

Who is your daddy?
Who Is Your Daddy?
WHO IS YOUR DADDY?
who is your daddy?
Теги:  php  php7 

Наглядные примеры использования SELECT в MySQL

Категория: SQL
 15 января 2016 г. 21:01

Введение

Достаточно сложно встретить в интернете годную информацию по использованию оператора SELECT в SQL-запросах. Обычно дело ограничивается только описанием.

В данной статье будет разобрано, как и зачем использовать те или иные ключевые слова оператора. Понимание будет подкреплено наглядными примерами.

Теперь немного информации из Wikipedia:

Оператор SELECT имеет следующую структуру:
    SELECT 
       [DISTINCT | DISTINCTROW | ALL]
       select_expression,...
   [FROM table_references]
     [WHERE where_definition]
     [GROUP BY {unsigned_integer | col_name | formula}]
     [HAVING where_definition]
     [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]


Основные ключевые слова, относящиеся к запросу SELECT:
WHERE — используется для определения, какие строки должны быть выбраны или включены в GROUP BY.
GROUP BY — используется для объединения строк с общими значениями в элементы меньшего набора строк.
HAVING — используется для определения, какие строки после GROUP BY должны быть выбраны.
ORDER BY — используется для определения, какие столбцы используются для сортировки результирующего набора данных.

Этой теории нам достаточно для написания запросов.

Примеры

Для начала, понадобится тестовая таблица(назовем её `test_table`) со всеми данными, по которой мы будем делать выборку.

Читать далее  

Теги:  mysql  select 

Дебаг PHP на NetBeans+Denwer

 1 января 2016 г. 12:17

Сколько копьев было сломано при попытке заставить завестись нормальный дебаг PHP кода на платформе NetBeans с использованием Denwer’а. Сколько руководств было прочитано. И везде, как под копирку написано примерно одно и тоже:

Скачайте подходящий xDebug с официального сайта, если такого нет в Denwer’e;

Установите следующие параметры в файле php.ini:

zend_extension="\usr\local\php5\ext\php_xdebug-2.2.3-5.3-vc9.dll"
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_handler="dbgp"
xdebug.remote_mode="req"
xdebug.remote_host="127.0.0.1"
xdebug.remote_port=9000
xdebug.idekey="netbeans-xdebug"

Перезапустите apache, выведите phpinfo() и убедитесь, что теперь доступен xDebug;

Дальше следует настройка NetBeans по такому алгоритму:

Заходим в Сервис → Параметры. Переходим в меню PHP, далее вкладка «Общего назначения» и указываем путь к интерпретатору PHP (у меня такой: Z:\usr\local\php5\php.exe). Дальше переходим на вкладку «Отладка (Debugging)» и указываем:

Порт отладчика: 9000
Идентификатор сеанса: netbeans-xdebug

И типа готово...

Читать далее  

Теги:  php  netbeans  xdebug  отладка  php7 

PHP. Объекты, шаблоны и методики программирования

Категория: Книги
 17 декабря 2015 г. 21:02

Автор: Мэтт Зандстра

Отличная книга по php! Обязательна к прочтению, однозначно.

Книга написана доступным языком, материал подробно расписан так, что у читателя не должно возникнуть трудностей с его пониманием. На протяжении всей книги мелькают сноски о различиях в версиях PHP, что полезно для понимания, какой путь прошёл язык.

В начальных главах читателю дается понимание концепции ООП (в том числе раскрываются особенности реализации концепции в языке). На примерах разобраны такие важные понятия как инкапсуляция, наследование и полиморфизм, модификаторы доступа и статические методы и свойства. Книга просто пропитана лучшими практиками в разработке систем и правильными способами использования описанных возможностей. Описано множество типовых шаблонов проектирования и случаи их применения.

Читать далее  

Теги:  php  книга  php7 

Горячие клавиши Netbeans

 11 декабря 2015 г. 20:34

По роду своей деятельности программист просто обязан знать те инструменты, с которыми он работает. Это банально увеличивает производительность и уменьшает издержки. Применительно к среде разработки, можно сказать, что это еще и занимательно, поскольку иногда можно открыть для себя поистине феерические комбинации клавиш. А про впечатление зеленых коллег, которые видят, что можно творить с помощью клавиатуры, я и вовсе молчу.

Итак, рассмотрим горячие клавиши среды разработки Netbeans, которые могут существенно упростить разработчику жизнь и сохранить нервы.

Читать далее  

Теги:  netbeans 

Рай программиста

Категория: Рабочие моменты
 25 ноября 2015 г. 20:52

Довелось некоторое время работать в международной компании, занимающейся разработкой софта для интернет-казино(кстати, лидер в своей области). Проработал я там около двух лет.
В компании несколько отделов: html5(мобильные разработчики), flash(desktop-разработчики), java-team(backend) и, конечно, тестеры. Я работал в команде html5-разработчиков. Самым организованным отделом был наш. Тимлид html5 разработчиков организовал для нас практически рай.

Так вот, код. Самое главное, с чем имеет дело программист в посведневной работе. В тиме был введен унифицированный стиль написания кода(т.н. codestyle). Это здорово, поскольку так куда проще разбираться в чужом коде. Имелся собственный фреймворк, написанный на чистом js и заточенный для написания игр под мобильные устройства. Фреймворк был кроссплатформенным(поддерживались WinPhone, Android > 4.1, iOS > 5.0). Те, кто писал кроссплатформенные вещи на js, знает, какой зоопарк устройств приходилось поддерживать. Ах да, мы писали на js в ООП стиле. Причем, без ограничений от канонического ООП. На js! И все это до TypeScript'a! Фантастика! Поскольку фреймворк был шикарно структурирован - он позволял писать невероятно гибкие системы. Там было все, что нужно: и собственные структуры данных(дерево, очередь, матрица, конечный автомат и т.д.), и собственная система инициализации событий(как в jQuery, только лучше), и грамотное разделение фреймворка на модули. И все это добро приправлено просто горой различных шаблонов проектирования. Было здорово копаться в нем и смотреть, что да как устроено.

Документация. Она была! В ней было дано описание основных систем фреймворка, как с ним работать и были описаны его ограничения.
Процесс разработки. Строился так: тебе падает задача, ты сам оцениваешь время, которое тебе понадобится для ее решения. Все эти оценки ты отражаешь в документе - плане. План ты строишь скурпулезно, описывая работу по часам. В нем ты можешь учесть и время на тестирование и время на непредвиденные трудности. Было одно условие: соблюдение временных рамок плана. Ну, или если есть отклонения по времени, сообщать заранее, а не тянуть до последнего. Но такое случалось редко, поскольку скурпулезное построение плана позволяет распределить время очень точно. В общем - это удобно. И разработчику - детально знает фронт работ, знает крайний срок, распоряжается им. И тем более начальству - иметь точные сроки реализации мечта любого начальства. Во время кодинга, конечно, ты можешь советоваться с более опытными разработчиками - тебе всегда окажут помощь. Благодать.

Используемые технологии: фреймворк использовал последние стабильные достижения в области js-кода(например: canvas, web audio API и т.д.). Конечно же, мы использовали систему контроля версий. Трекером задач служил redmine.

Такое ощущение, что тимлид начитался книги "Совершенный код" и, вдохновленный идеями из этой книги, решил многие из них воплотить в жизнь. Какой гик о таком не мечтает?
Теги:  работа 

Singleton на PHP

 22 ноября 2015 г. 22:24

Синглтон – это, наверное, самый простой из шаблонов проектирования, и в то же время, самый распространенный. Его часто используют для создания подключения к БД, логирования событий, использования конфигурационного файла и по многим-многим другим причинам. Цель этого шаблона - гарантировать существование единственного экземпляра класса (такие экземпляры и называются синглтонами). Причина, по которой обычно он создается: обеспечить доступ к синглтону всему приложению.

Дело в том, что при разработке кода в ООП стиле следует избегать глобальных переменных. И чтобы не использовать их в проекте и был придуман этот шаблон.

Теперь разберемся, как реализовывать типичных синглтон.

Читать далее  

Javascript-клиент для звонков через voximplant

Категория: Javascript
 12 ноября 2015 г. 19:09

Некоторое время назад появилась необходимость интегрировать программный продукт с сервисом voximplant. Поскольку еще ни разу не приходилось с ним работать, наверное, как и многие, начал искать готовые рабочие примеры интеграции. И каково же было мое удивление, когда оказалось, что информации не так уж и много. А примеров качественного кода и вовсе не было найдено.

После оценки стартовых позиций, было принято волевое решение писать код интеграции с воксимплантом самому. За основу был взят код из хабрапоста.
Нагромождать текст процессом написания кода считаю нецелесообразным, поэтому перейду сразу к описанию результата.

Читать далее  

Теги:  javascript  voximplant