найзатребуваніші мови програмування 2016

Під кінець цього непростого року наша служба досліджень зібрала двадцятку самих затребуваних мов програмування hh.ru. За кожною мовою окремо порахували динаміку за рік. А по першій п'ятірці заодно подивилися зміни за 5 років.

Що сталося: PHP в цьому році став найбільш затребуваним серед роботодавців, відібравши пальму першості у Java. За рік зросли обидва, але PHP виріс сильніше. Go і Swift «вистрілили» на 161% і 100% відповідно, хоча до лідерів за кількістю вакансій їм ще далеко. А ось Python помітно здав позиції, відразу на 32%.

Якщо порівняти з індексом TIOBE, то відразу помітно, що PHP у нас помітно вище, а Visual Basic, наприклад, помітно нижче. Go рвонув і там і тут, а от Objective-C у TIOBE у лідерах зростання, а у нас він впав на 9%. З них, до речі, впав сильніше за всіх, а в нас, навпаки, виріс на 46%.


А де ж 1С, запитаєте ви? В табличку не включили, але якщо цікаво, то все непогано: 2015 — 9 473, 2016 — 13 735. Приріст: 45%. В абсолютних цифрах — найпопулярніший мова.

Читати далі →

Гренландський програміст (творець PHP): «Ненавиджу програмування. Але я люблю вирішувати проблеми»

Сьогодні день народження творця PHP, Расмуса Лердорфа (дат. Rasmus Lerdorf). Хочу представити вашій увазі кілька фактів з його біографії і парочку цитат, щоб зрозуміти хід думки і світогляд цього «програміста».

У 1994 році Расмус запив набір скриптів на Perl/CGI, оброблювальних шаблони HTML-документів, пізніше втілився в інтерпретатор мови програмування PHP, з допомогою якого можна було вирішувати різні завдання веб-додатків.

image

«Той PHP який ми знаємо зараз — зовсім не те, що я зробив на самому початку. Десятки, якщо не сотні людей брали участь в розробці. Я був просто першим розробником.»

«PHP як зубна щітка. Ви користуєтеся їй кожен день, вона виконує свою роботу, простий інструмент. Що ви хочете знати про зубні щітки?»
Читати далі →

Гренландський програміст (творець PHP): «Ненавиджу програмування. Але я люблю вирішувати проблеми»

Сьогодні день народження творця PHP, Расмуса Лердорфа (дат. Rasmus Lerdorf). Хочу представити вашій увазі кілька фактів з його біографії і парочку цитат, щоб зрозуміти хід думки і світогляд цього «програміста».

У 1994 році Расмус запив набір скриптів на Perl/CGI, оброблювальних шаблони HTML-документів, пізніше втілився в інтерпретатор мови програмування PHP, з допомогою якого можна було вирішувати різні завдання веб-додатків.

image

«Той PHP який ми знаємо зараз — зовсім не те, що я зробив на самому початку. Десятки, якщо не сотні людей брали участь в розробці. Я був просто першим розробником.»

«PHP як зубна щітка. Ви користуєтеся їй кожен день, вона виконує свою роботу, простий інструмент. Що ви хочете знати про зубні щітки?»
Читати далі →

Простий API gateway на базі PHP і Lumen

Термін «микросервисы» сьогодні у всіх на слуху – це раптово стало дуже модно, і багато компанії оголошують перехід на цей архітектурний патерн навіть толком не розібравшись в ньому. Втім, обговорення корисності микросервисов залишимо за межами цієї статті.

Традиційно перед колекцією микросервисов пропонується додатковий шар – так званий API gateway, який вирішує відразу кілька проблем (вони будуть перераховані пізніше). На момент написання цієї статті open source реалізацій таких gateway майже немає, тому я вирішив написати свій на PHP з використанням микрофреймворка Lumen (частина Laravel).

У цій статті я покажу наскільки це проста задача для сучасного PHP!

Читати далі →

Генеруємо красиві картинки для соціальних мереж



Код для генерування саме цього зображення
$generator = new imgGenerator();
$textGenerator=new imgTextGenerator();
$textGeneratorTop=new imgTextGenerator();

$label=$textGeneratorTop
->seTextShadow("#000000", 75, 1, 2, 2)
->setText("Test Site","#ffffff",imgGenerator::position_center_top,"1/12",0 )
->setBackground("#000000",'3%')
->setFont(DR."/upload/fonts/fonts2_7/hinted-PTF55F.ttf");

$text=$textGenerator
->seTextShadow("#000000", 75, 1, 2, 2)
->setText("Морква як двигун прогресу человечества","#ffffff",imgGenerator::position_center_center,"1/7",array(0,'5%',0,'5%'))
->setFont(DR."/upload/fonts/fonts2_7/hinted-PTF55F.ttf");

$generator
->addText($text)
->addText($label)
->fromImg($_SERVER["DOCUMENT_ROOT"] . "/upload/dynamic/2016-08/15/carrot-big.jpg")
->resizeFor("autodetect")
->addOverlay(0.5,"#000000")
->show();

Дивлячись на красиві картинки для соц. мереж, які останнім генерують багато новинні (і не тільки) сайти — захотілося написати свій генератор.

Приклади картинок
Скрипт працює на PHP з використанням модуля Imagick. Писати це на GD2 щось я не наважився.

Алгоритм роботи передбачався такий:

  • Беремо за основу картинку або колір
  • Зменшуємо до потрібного розміру
  • Накладаємо зверху напівпрозорий фон
  • Встановлюємо логотип
  • Додаємо напис
  • Кешируем результат

Читати далі →

Функції вищих порядків і монади для PHP'шників

Серед PHP програм переважає процедурний або в останніх версіях частково об'єктно-орієнтований стиль програмування. Але можна писати інакше, у зв'язку з чим хочеться розповісти про функціональному стилі, благо дещо-які інструменти для цього є і в PHP.
Тому ми розглянемо реалізацію програми JSON у вигляді найпростіших функцій і функцій їх комбінують в більш складні, поступово дійшовши до повноцінного парсера формату JSON. Ось приклад коду, який ми отримаємо:
$jNumber = _do(function() {
$number = yield literal('-')->orElse( literal('+') )->orElse( just(") );
$number .= yield takeOf('[0-9]')->onlyIf( notEmpty() );
if ( yield literal('.')->orElse( just(false) ) ) {
$number .= '.'. yield takeOf('[0-9]');
}
return +$number;
});

Крім власне функціонального підходу можна звернути увагу на використання класів для створення DSL-подібного синтаксису та використання генераторів для спрощення синтаксису комбінаторів.
Читати далі →

Сигнали і слоти в PHP. Такі ж як в Qt. Ну майже

Сигнали і слоти — підхід, який використовується в деяких мовах програмування і бібліотеках (наприклад, Boost і Qt) який дозволяє реалізувати шаблон «спостерігач», мінімізуючи написання повторюваного коду. Концепція полягає в тому, що компонент (часто віджет) може посилати сигнали, які містять інформацію про подію (наприклад: був виділений текст «слово», була відкрита друга вкладка). У свою чергу інші компоненти можуть приймати ці сигнали за допомогою спеціальних функцій — слотів. Система сигналів і слотів добре підходить для опису Графічного інтерфейсу користувача. Також механізм сигналів/слотів може бути застосований для асинхронного введення-виведення (включаючи сокети, pipe, пристрої з послідовним інтерфейсом, ін) або повідомлення про події. В бібліотеці Qt завдяки Метаобъектному компілятору (англ.)рос. відпадає необхідність писати код реєстрації/дерегистрации/виклику, так як ці шаблонні ділянки коду генеруються автоматично.
Говорить нам Вікіпедія.
Читати далі →

Snipper — маленький помічник програміста

Snipper   просте, консольний додаток, написаний на PHP, для зручного імпорту фрагментів коду з популярного сервісу GitHub Gist.

Передісторія

В один прекрасний день я зрозумів, що порядком задолбался переписувати дрібні файли конфігурацій з проекту в проект і став шукати відповідь на питання — як позбавити себе від страждань і не додати?

Розглянувши, як мені здалося, достатня кількість рішень я взявся писати власне консольне «додаток» для завантаження часто використовуваних файлів з кодом (мова йде саме про файли, а не про роботу з буфером обміну). Для зберігання вибрав сервіс від GitHub, так як в роботі, без нього ніяк (готових бібліотек для роботи з API безліч), а для сипатичного зовнішнього вигляду — знайомий всім компонент Console арсеналу Symfony.

Читати далі →

Все ще торт, частина 3.0.0

Нарешті вийшов реліз CakePHP 3.0.0.

Наша компанія використовує в розробці в тому числі cakephp, як основний фреймворк для бекенда розробки. Протягом чотирьох років ми досконально розібралися в його переваги та недоліки. І, звичайно, багато проблем, які зникнуть з переходом на 3.0 нами вже були вирішені, але розвиток використовуваного інструменту не може не радувати. Після цього оновлення ми розраховуємо, що cakephp знову поверне собі заслужену популярність.



Читати далі →

Створення плагіна для PHP Composer'а

При розгортанні Magento-додатків з використанням Magento Composer зіткнулися з проблемою, що різні примірники одного і того ж додатка (девелоперський, тестовий тощо) повинні використовувати різні локальні налаштування (наприклад, параметри підключення до БД). До цього, в іншому проекті, використовувався підхід, коли в додатку (під контролем версій) знаходяться шаблони конфігураційних файлів з placeholder'ами і скрипт, текст placeholder'и локальними значеннями і копіює результат в потрібне місце. Локальні значення зберігалися окремо для кожного екземпляра за місцем розгортання. Хотілося звичний підхід зберегти і для нового методу розгортання. Пошук влаштовує плагіна на packagist.org/ завершився незнаходженням, в силу чого і народилася ідея зробити подібний плагін самостійно. При створенні плагіна довелося насмикати інформацію з різних джерел — інформації з сайту Composer'а по плагинам виявилося недостатньо. Що й привело до написання цієї статті.

Читати далі →