PHP 2012: язык растет подобно кораллу::Журнал СА 9.2012
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Архив номеров
Контакты
   

  Опросы
  Статьи

Электронный документооборот  

5 способов повысить безопасность электронной подписи

Область применения технологий электронной подписи с каждым годом расширяется. Все больше задач

 Читать далее...

Рынок труда  

Системные администраторы по-прежнему востребованы и незаменимы

Системные администраторы, практически, есть везде. Порой их не видно и не слышно,

 Читать далее...

Учебные центры  

Карьерные мечты нужно воплощать! А мы поможем

Школа Bell Integrator открывает свои двери для всех, кто хочет освоить перспективную

 Читать далее...

Гость номера  

Дмитрий Галов: «Нельзя сказать, что люди становятся доверчивее, скорее эволюционирует ландшафт киберугроз»

Использование мобильных устройств растет. А вместе с ними быстро растет количество мобильных

 Читать далее...

Прошу слова  

Твердая рука в бархатной перчатке: принципы soft skills

Лауреат Нобелевской премии, специалист по рынку труда, профессор Лондонской школы экономики Кристофер

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 9959
Комментарии: 0
Потоковая обработка данных

 Читать далее...

19.03.2018г.
Просмотров: 8165
Комментарии: 0
Релевантный поиск с использованием Elasticsearch и Solr

 Читать далее...

19.03.2018г.
Просмотров: 8265
Комментарии: 0
Конкурентное программирование на SCALA

 Читать далее...

19.03.2018г.
Просмотров: 5233
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 5921
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

Друзья сайта  

 PHP 2012: язык растет подобно кораллу

Архив номеров / 2012 / Выпуск №9 (118) / PHP 2012: язык растет подобно кораллу

Рубрика: От первого лица

PHP 2012: язык растет подобно кораллу

На вопросы «Системного администратора» отвечают легендарные участники PHP Core Team, ведущие разработчики PHP Андрей Змиевский, Стас Малышев, Илья Альшанетский

Стас Малышев
Стас Малышев, участник PHP Project с 2000 года, релиз-менеджер версии PHP 5.4, участник многих Open Source-проектов. В свободное время увлекается интеллектуальными играми (спортивная версия «Что? Где? Когда?», «Брейн-ринг») и айкидо
 
Андрей Змиевский
Андрей Змиевский, один из кураторов PHP Project, разработчик Zend Engine, создатель проектов PHP-GTK и Smarty, соавтор популярного учебника PHP Developer’s Cookbook, автор реализаций Unicode и OOP в PHP. В свободное время увлекается спортом, пивоварением на дому, готовкой. Очень любит читать и путешествовать
 
Илья Альшанетский
Илья Альшанетский, эксперт в области безопасности и один из старейших разработчиков PHP, глава PHP Quality Assurance Team, релиз-менеджер версий PHP 4.3, 5.1, 5.2, создатель форумного движка FUDforum, активный участник множества Open Source-проектов. Популярный лектор и автор многочисленных статей на тему безопасности веб-программирования

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

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

– Прежде всего расскажите, пожалуйста, чем сейчас вы занимаетесь и где работаете? Как вы пришли в мир программирования?

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

Если же говорить об истории моего прихода в программирование, то она началась еще в школе, с калькуляторов Б3-34 и с программ, опубликованных в журнале «Техника – Молодежи».

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

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

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

Самое большое влияние на меня оказали книги, в частности, работы Эдсгера Дейкстры, Фредерика Брукса («Мифический человекомесяц») и Алана Купера (The Inmates Are Running the Asylum – в русском переводе «Психбольница в руках пациентов»).

Андрей Змиевский: Уже пять лет я живу в Сан-Франциско и считаю его самым красивым городом в Америке. Работаю в компании AppDynamics. Хоть это относительно молодая компания, у нас уже порядка 110-120 сотрудников. Самые разные фирмы по всему миру используют наш продукт для мониторинга своих бизнес-систем и для быстрого обнаружения проблем.

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

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

Однажды, придя туда рано утром, я с головой погрузился в интересную мне программу, забыв обо всем. Очнулся, только когда центр уже закрывался, в 10 часов вечера. К тому времени родители уже обзвонили всех моих друзей, учителей – искали везде, пока не наткнулись на меня, возвращающегося из центра, мне за это тогда сильно попало.

Вообще сколько себя помню, всегда писал программы и жил в этом отчасти виртуальном мире, потому моя нынешняя профессия – просто продолжение увлекательного путешествия, начатого еще в детстве.

Илья Альшанетский: Я живу и работаю в Торонто, Канада.

Что же касается моего прихода в программирование, то это до сих пор для меня удивительно.

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

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

Отсюда начинается мой путь в Интернет и моя специализация на веб-программировании.

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

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

Я настолько активно стал пользоваться PHP 3, что постепенно появились собственные наработки, расширявшие его возможности, которые регулярно предлагал в IRC-канале его создателю Расмусу. Патчей и исправлений от меня было так много, что ему это быстро надоело, и он дал мне прямой CVS-доступ к репозиторию проекта.

С тех пор было очень много чего написано и сделано, мне даже довелось быть релиз-менеджером (PHP release master) для его популярных версий 4.3, 5.1 и 5.2.

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

Во время одной из таких консультаций я так глубоко погрузился в проект, что в итоге стал партнером этой компании (Centah Inc.) и получил в ней должность CIO, где и работаю сейчас.

– Как вы попали в PHP Core Team, какой путь для этого прошли?

Андрей Змиевский: Я начал работать с PHP где-то в 1998 году, тогда это был PHP 3, одна из ранних версий языка.

Мы переписывали большой проект с одного языка на PHP, и мне нужно было найти поддержку теперь уже почти забытого формата WDDX. Я не нашел такой библиотеки, но мне очень понравилось, что у PHP была отличная документация и API, поэтому решил написать свое расширение.

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

Впоследствии мне дали доступ к CVS, и я стал чинить баги, писать больше разных функций.

К концу 1999 года я был одним из самых активных членов группы. Тогда Расмус Лердорф предложил организовать первый съезд разработчиков PHP в Израиле, чтобы обсудить будущее языка, и включил меня тоже. Так получилось, что я сразу попал в PHP Core Team. Такое доверие и открытость мотивировали меня работать больше и больше над кодом PHP.

После WDDX я работал над session-модулем, потом написал кучу функций для работы с массивами, затем решил, что PHP надо иметь регулярные выражения, подобные Perl, поэтому создал PCRE-модуль.

К тому времени PHP 4 уже давно вышел, но меня очень раздражали некоторые проблемы с тем, как работали (или вернее не работали) объекты и классы. По этому поводу у меня была долгая переписка с Andi и Zeev, которые создали Zend Engine, эти обсуждения привели к принципиально новой поддержке Object-Oriented Programming в PHP 5.

После этого работал в основном над кодом для extension API и самим Zend Engine, также сделал новый tokenizer-модуль.

С 2003 года я работал в Yahoo! вместе с Расмусом и там запустил проект по поддерже Unicode в PHP.

PHP (материал из Wikipedia)
PHP (англ. PHP: Hypertext Preprocessor – «PHP: препроцессор гипертекста»; первоначально Personal Home Page Tools – «Инструменты для создания персональных веб-страниц») – скриптовый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов.

Язык и его интерпретатор разрабатываются группой энтузиастов в рамках проекта с открытым кодом. Проект распространяется под собственной лицензией, несовместимой с GNU GPL.

Область применения. В области программирования для сети Интернет PHP – один из популярных скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности, кроссплатформенности и распространению исходных кодов на основе лицензии PHP.

Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств для разработки веб-приложений. Основные из них:
  • автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;
  • взаимодействие с большим количеством различных систем управления базами данных (MySQL, MySQLi, SQLite, PostgreSQL, Oracle (OCI8), Oracle, Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape и Apache Derby, Informix, Ovrimos SQL, Lotus Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, Firebird / InterBase, Paradox File Access, MaxDB, Интерфейс PDO);
  • автоматизированная отправка HTTP-заголовков;
  • работа с HTTP-авторизацией;
  • работа с cookies и сессиями;
  • работа с локальными и удалёнными файлами, сокетами;
  • обработка файлов, загружаемых на сервер;
  • работа с XForms.
В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу корпорации TIOBE, базирующемся на данных поисковых систем, в апреле 2011 года PHP находился на 5 месте среди языков программирования. К крупнейшим сайтам, использующим PHP, относятся Facebook, ВКонтакте, Wikipedia и др.

Входит в LAMP – распространённый набор программного обеспечения для создания и хостинга веб-сайтов (Linux, Apache, MySQL, PHP).

– Что есть такого в PHP, что сделало его столь популярным?

Андрей Змиевский: Сейчас я пишу проект на C++ и Python, так что отвечу на ваш вопрос исходя из этого сравнительного опыта, глядя как бы с другой колокольни.

Для меня главное, что PHP обладает богатым и обширным API, с помощью которого можно расширить язык во многих, даже подчас неожиданных, направлениях.

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

Вот вам и суть PHP: он одновременно сложный и простой, старомодный и современный, оригинальный и заимствующий идеи извне – он просто очень универсален.

– Ошибки, связанные с безопасностью, – головная боль для веб-программистов и пользователей их продуктов. Какие самые главные и типичные проблемы с безопасностью у PHP и его разработчиков? Можете дать какие-то советы в назидание молодым PHP-программиcтам?

Стас Малышев: Один из главных уроков, мне кажется, состоит в том, что безопасность кода – это не качество, которое можно привить внешне, независимо от остального кода.

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

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

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

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

Когда впоследствии происходит атака, то код ведет себя не так, как это задумал сам разработчик.

Поэтому развивайте привычку спрашивать себя всегда: «Что если этот параметр изменить неожиданным образом? Что если этот аргумент применить не так, как предполагалось?» И тестируйте свой код соответственно.

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

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

Например, если вы делаете динамический запрос к базе данных, всегда самостоятельно убеждайтесь, что параметры и запрос генерируются и фильтруются таким образом, что sql injection невозможна – даже если вы уверены, что данные где-то еще фильтруются (например, на уровне фреймворка).

Тогда, если внешний код изменят таким образом, что в вашу процедуру вдруг попадут нефильтрованные данные, уязвимости все равно не возникнет.

И, наконец, пользуйтесь принципом «минимальных привилегий» – никогда не позволяйте внешнему пользователю делать больше, чем необходимо для выполнения задачи.

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

Илья Альшанетский: Если речь заходит о безопасности, три основных вызова для веб-приложений уже с десяток лет остаются по-прежнему актуальными и опасными.

Несмотря на свою известность, стоит еще раз напомнить их, потому что жизнь показывает, что этот материал не усвоен как следует многими разработчиками. Это:

  • cross-site scripting (XSS);
  • cross-site request forgery (CSRF);
  • SQL injection (SQLi).

Они виновны в абсолютном большинстве успешных атак против PHP-приложений и не только.

Что касается большей специфики PHP, я бы также выделил весьма распространенные разновидности внедрения кода (code injection), например, из-за неправильно используемых операторов include/require, вызовов eval() и использования 'e' флага для регулярных выражений.

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

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

Очень важна аккуратная работа с сессиями: по-настоящему случайная генерация id для сессий, все необходимые проверки и ограничения доступа и так далее.

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

Андрей Змиевский: Логику развития PHP и его изначальную специфику можно понять, если принять во внимание два простых факта.

  • У него никогда не было и не будет «главного дизайнера» или так называемого благожелательного диктатора, как, например, у Python с Guido van Rossum или у Perl с Larry Wall.
  • PHP очень сильно ориентирован на поддержку обратной совместимости.

В силу важности и злободневности этой темы рассмотрим эти пункты немного поподробнее.

PHP всегда был коллективным проектом общины. Да, есть так называемая PHP Group, но из всех ее членов только один или два до сих пор активно участвуют в разработке языка, то есть в процессе развития языка сменились уже целые поколения разработчиков.

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

Еще раз – не только написать что-то свое, но и суметь довести все до конца, внедрив эти функции в следующий релиз, оперативно чинить чужие баги и тому подобное...

Уверяю вас, что из всего перечисленного, программирование – самое легкое дело. Огромные усилия уходят на согласование всех деталей в рамках достаточно разнородного и большого коллектива.

Так что выбор того, что появится в новой версии PHP, осуществляется самими участниками проекта, это делается в рамках складывающейся в коллективе ситуации, расстановки сил и предпочтений, а не «директивно сверху» от какого-то верховного дизайнера или планировщика системы/языка.

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

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

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

Один из главных принципов философии PHP – не ломать код, который у пользователей уже давно и успешно работает, а если ломать, то по очень веским причинам.

Если посмотреть на количество PHP-кода в мире, половина его до сих пор состоит из PHP 4 или 3. Это широко применяемый код, который долгие годы используется во многих сайтах без особых проблем, особенно он востребован у небольших клиентов, типичных для провайдеров виртуального хостинга.

Да, многие горят желанием как-то починить или «подчистить» язык, чтобы он был более изящным, последовательным, без заметных бородавок или уродств. Как, например, эта вечная проблема порядка параметров в таких функциях, как strpos() и in_array().

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

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

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

Так что PHP растет подобно кораллу: разные колонии сосуществуют друг с другом, наращивая новые части на старые в каких-то направлениях, при этом происходят некоторые мутации, где старые части отмирают и отпадают время от времени, и никогда нельзя предсказать, на что этот коралл будет похож через несколько лет.

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

И последнее: если вы хотите повлиять на развитие, наберитесь сил и терпения и просто начните участвовать в проекте.

– Можете привести примеры ваших проектов на PHP, которые иллюстрируют особенности разработки на этом языке?

Илья Альшанетский: У меня было много интересных задач, над которыми довелось поработать на PHP. Для примера приведу лишь два показательных проекта.

Один из заказов предполагал изготовление робота-клиента для аукционной системы торговли доменами. В рамках этой системы регистратор выставлял на аукцион освободившиеся (просроченные по оплате) домены, срок регистрации которых закончился.

Огромное количество хостинговых компаний охотилось за выставляемыми на продажу доменами, включая компанию, которая сделала мне заказ. Некоторые наиболее удачные домены хотело купить огромное количество желающих, поэтому регистратор (TLD) чаще всего продавал их по схеме «кто первый предложит цену выше заданной».

Моя задача формулировалась очень просто: я должен был создать максимально быстрое приложение, которое анализировало ситуацию и за доли секунды первым выставляло бы заявку на покупку с требуемой ценой.

Я использовал для написания такого приложения именно PHP главным образом в силу простоты реализации на нем работы с XML и прямой работы с сокетами. Интересно, что в этом «состязании» участвовало несколько роботов от разных компаний, в том числе написанных на новомодных ныне языках. С удовлетворением могу отметить, что мой робот работал все-таки быстрее.

Также уместно показать на этом примере, как иногда происходит развитие самого PHP. Для реализации этого коммерческого заказа мне не хватало нескольких внутренних функций в языке, таких как time_nanosleep() и time_sleep_until(), поэтому я написал их самостоятельно именно для этой задачи, впоследствии они были добавлены в PHP Project для всеобщего пользования.

Другой интересный опыт заключался в переписывании уже работающего промышленного интернет-приложения с Java (JSP) на PHP. Для меня это был очень серьезный вызов, гораздо более интересный, нежели создание аналогичного приложения с нуля.

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

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

Оглядываясь назад на изначально сложные для восприятия исходники и концепции исходного Java-приложения, осознаю, что этот опыт заставил меня понять главное: PHP не зажат жестко в рамках какой-то одной парадигмы программирования, это скорее удобный инструмент для быстрого прикладного программирования.

– Каково будущее веб, куда движется эта среда, какие технологии будут наиболее востребованы завтра? Может, для вас как опытных веб-разработчиков более очевидны эти тренды?

Стас Малышев: Я не чувствую себя настолько информированным, чтобы делать далеко идущие прогнозы, но несколько направлений, кажущихся мне интересными, могу указать.

В первую очередь это HTML5 и его новые возможности – canvas, сервисы хранения информации на стороне клиента, микроданные, редактирование на стороне клиента, геолокация – все это существенно обогатит возможности будущих веб-приложений.

С другой стороны, мне кажется, это также поддержит уже существующую тенденцию выносить презентацию данных на клиентскую сторону, в Javascript, и оставлять на стороне веб-сервера лишь логику.

Программисты на серверной стороне будут уделять меньше внимания HTML и прочим презентационным технологиям и больше технологиям передачи данных – таким, как сервисы в архитектуре REST.

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

В общем, браузер окончательно станет полноправной частью веб-инфраструктуры, поэтому некоторые обязанности, исполняемые сейчас сервером, перейдут на сторону клиента. Я бы посоветовал людям, работающим сейчас с PHP, заодно следить за новейшими достижениями в области Javascript, HTML5, CSS3.

От редакции: «СА» благодарит членов PHP Core Team, которые любезно согласились и нашли время ответить на вопросы наших читателей.

Беседовал Игорь Савчук


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru