В прошлом году PHP-FIG приняла стандарт PSR-7, описывающий работу с сообщениями HTTP. Хорошая статья об этом стандарте и его применении была на Хабре. И хотя PSR-7 — большой шаг вперёд, ему не хватает логичного продолжения — общего интерфейса клиентов HTTP. Созданием недостающего компонента занялась группа PHP-HTTP.
Михаил Красильников @Mekras
Веб-разработчик
Замена PEAR на Composer
2 min
11KДумаю, большинство разработчиков, использующих PHP, уже в знают, что популярные проекты начинают отказываться от распространения через PEAR в пользу Composer (например PHPUnit и Symfony). Некоторые расстраиваются по этому поводу, дескать, теперь вместо однократной общесистемной установки того же PHPUnit, придётся включать его зависимостью в каждый проект. Совсем необязательно! Composer прекрасно умеет устанавливать пакеты для общего использования.
+12
Российский «автопилот» для автомобилей
1 min
20K![РобоСиВи](https://habrastorage.org/getpro/geektimes/post_images/c7e/0d6/e27/c7e0d6e274cbc2b92b25469bcd095b10.jpg)
+3
Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор
3 min
28KТри года назад на Хабре была опубликована статья «Form Spam Bot Blocker: Защищаем Web-формы без CAPTCHA!», рассказывающая о принципиально отличном от CAPTCHA решении для PHP по защите форм от спам-ботов. Это решение основано на идеях, изложенных в своих статьях Филом Хааком (Phil Haack) — Honeypot Captcha и Недом Батчелдером (Ned Batchelder) — Stopping spambots with hashes and honeypots. К сожалению, предложенный в статье класс, написан для PHP4 и не развивается с 2007-го года. Хочу предложить вашему вниманию его аналог на PHP5.
+27
Пространства имён + PHPUnit = 100% покрытие тестами
2 min
3.5KДавно хотел поделиться с общественностью способом тестировать код, использующий функции для работы с внешней средой: с сокетами, БД, файлами и чем угодно ещё. Сегодня, увидев статью Runkit + PHPUnit = 100% покрытие тестами, решил, что сейчас самое время.
Решение с Runkit красивое, но есть одна проблема — Runkit не распространяется вместе PHP, его надо ставить отдельно. Я же хочу предложить подход, работающий в обычной поставке PHP 5.3+, при одном условии — проект должен использовать пространства имён.
Решение с Runkit красивое, но есть одна проблема — Runkit не распространяется вместе PHP, его надо ставить отдельно. Я же хочу предложить подход, работающий в обычной поставке PHP 5.3+, при одном условии — проект должен использовать пространства имён.
+31
Почему разметка должна быть не только валидной, но и логичной. Пример из жизни
2 min
1.5KЯ работаю в веб-студии, постоянно пользующейся услугами верстальщиков-фрилансеров. И если несколько лет назад верстальщики частенько присылали код, пестревший ошибками разметки, то сейчас это уже большая редкость. К сожалению совсем другая картина с логикой разметки, автоматического валидатора которой, насколько мне известно, пока нет. В надежде, привлечь внимание верстальщиков к этой стороне их работы, хочу рассказать о недавнем случае, показывающем, что логичность разметки не менее важна чем её валидность.
+4
Mylyn Generic Web Templates Connector и баг-трекер PEAR
4 min
1.2KПоследнее время я не мыслю свою работу в Eclipse без Mylyn. С помощью Mylyn я свёл в единый список задачи из Jira, используемой по работе, Mantis, используемой в собственном проекте, Redmine, используемой ещё на одном проекте… Благо для всех этих систем есть готовые коннекторы. Но вот сегодня мне понадобилось подключить ещё и баг-трекер PEAR, для которого коннектора нет. К счастью, добрые люди предусмотрели в Mylyn такую штуку, как Generic Web Templates Connector, позволяющую, в теории, подключиться к любому баг-трекеру. Под катом я поделюсь опытом настройки этого коннектора для PEAR.
+15
Загрузка файлов и open_basedir: почему надо пользоваться стандартными функциями
2 min
38KКазалось бы вопрос загрузки файлов на сервер обсосан до косточек, но одно недавнее событие заставило меня в этом усомниться.
Некоторое время назад в целях повышения безопасности на наших серверах была включена настройка PHP open_basedir. После этого многие PHP-приложения перестали загружать файлы на сервер.
Некоторое время назад в целях повышения безопасности на наших серверах была включена настройка PHP open_basedir. После этого многие PHP-приложения перестали загружать файлы на сервер.
+56
ejabberd: общие списки
2 min
16K![image](http://dvaslona.ru/data/outside/habr/ejabberd/mdc.shared.roster.png)
Предыдущие заметки про настройку ejabberd 1, 2 и 3.
ejabberd позволяет создать заранее подготовленные списки контактов, доступные определённым группам пользователей. Так как наш сервер настраивается под корпоративные нужды, это было бы кстати. Приходит новый человек, подключается к серверу, а у него в списке контактов уже есть все, кто ему может понадобиться, да ещё и по отделам сгруппированные.
+29
ejabberd: Поиск по визитным карточкам
2 min
6.3KВ заметке ejabberd с авторизацией через LDAP я описал основные моменты по настройке сервера ejabberd. В заметке внешние программы аутентификации показал как можно использовать внешнюю программу, если не хватает функционала встроенных модулей. Теперь добавим поиск по визитным карточкам пользователей.
+12
ejabberd: внешние программы аутентификации
2 min
4.9KВ заметке ejabberd с авторизацией через LDAP я описал основные моменты по настройке сервера ejabberd и подключения его к LDAP. К сожалению возможностей стандартного модуля LDAP-аутентификации нам не хватило. Однако ejabberd позволяет использовать внешние, в том числе собственные, программы для этой цели.
+15
ejabberd с авторизацией через LDAP
6 min
29KЯ достаточно давно и без сожалений расстался с ICQ. Воспользовавшись возможностью, поднял свой собственный Jabber-сервер, которым с успехом и пользуюсь по сей день. Однако не у всех моих сотрудников есть Jabber-аккаунт (не все даже знают, что это такое :-), что несколько затрудняет общение по работе. Для общения с остальными, для организации безопасной и независимой системы обмена сообщениями, я решил поднять корпоративный jabber-сервер. А так как у нас активно используется LDAP, то логичным показалось задействовать его для аутентификации пользователей и управления учётными записями.
+21
ТЗ: макеты или текст?
3 min
11KВ заметке ТЗ для web-разработчика автор пишет:
Никак не комментируя заметку в целом, хотелось бы сделать несколько замечаний по поводу разных способов представления информации в ТЗ и не только в нём.
считаю что одно из самых правильных способов подачи информации есть графический, т.е. лучше один раз увидеть, чем сто раз услышать.
Никак не комментируя заметку в целом, хотелось бы сделать несколько замечаний по поводу разных способов представления информации в ТЗ и не только в нём.
-2
Разница между разметкой и представлением
4 min
1.3KПрочитав комментарии к заметке Firefox 3: * {display: block } bug, понял что заметная часть читателей Хабра, в том числе серьёзно занимающиеся веб-разработкой, не совсем верно представляют себе что-то же такое HTML, и почему теги отображаются так, а не иначе.
+135
Вредные советы: как писать в техподдержку
1 min
2.1KСообщая об ошибке
Помните, что в техподдержке
Все сотрудники владеют
Телепатией на «пять»
Им подробности ошибки
Знать не надо совершенно
Пусть там сами угадают
Что у вас произошло
Помните, что в техподдержке
Все сотрудники владеют
Телепатией на «пять»
Им подробности ошибки
Знать не надо совершенно
Пусть там сами угадают
Что у вас произошло
+100
Как хостинги отбивают клиентов
1 min
730Сегодня знакомому пришло письмо, якобы от компании AGAVA, такого содержания:
Уважаемый пользователь платного хостинга компании AGAVA, сообщаем вам о том,
что в связи с реорганизацией, подразделение виртуального хостинга прекращает работу с 15 апреля 2008 года.
Компания AGAVA заключила договор с хостинг провайдером SlavHost.ru о передаче своих клиентов на обслуживание.
Сотрудники компании AGAVA совместно с SlavHost.ru приложат все возможные усилия,
чтобы перенос ваших данных прошел успешно.
Для получения подробных инструкций о переносе ваших сайтов
необходимо связаться с технической поддержкой компании SlavHost.ru,
контакты которой вы можете найти на сайте www.slavhost.ru/contact.php
Пожалуйста, во избежание отключения, осуществите перенос ваших сайтов до 15 апреля 2008 года.
Благодарим за сотрудничество.
+55
Различия в поведении window.open в разных браузерах
5 min
17KПри разработке одного сайта столкнулся с необходимостью проверить работу функции window.open в разных браузерах. Результаты решил оформить и выложить, глядишь кому понадобится, а кто и дополнит, что ещё лучше…
Для тестирования использовались: FireFox 3 beta 3, Netscape Navigator 9, Internet Explorer 6, Opera 9 и Konqueror 3.5 (тест Safari отдельно, в конце топика). При этом FireFox 3 тестировался в двух конфигурациях: по умолчанию и c TabMixPlus (с разрешением открывать popup-ы в новых окнах). Рабочая среда: KDE 3.5 на Debian.
Для тестирования использовались: FireFox 3 beta 3, Netscape Navigator 9, Internet Explorer 6, Opera 9 и Konqueror 3.5 (тест Safari отдельно, в конце топика). При этом FireFox 3 тестировался в двух конфигурациях: по умолчанию и c TabMixPlus (с разрешением открывать popup-ы в новых окнах). Рабочая среда: KDE 3.5 на Debian.
+41
+26
Опенсорс, стандарты и… утюг
2 min
696Сегодня утром мне предоставился шанс взглянуть на такие знакомые, как разработчику, вещи как опенсорс и стандарты в другом ракурсе. И причиной этого стал обыкновенный утюг.
Предыстория такова. Был у меня утюг (приложение), от известной фирмы Tefal. Работал он достаточно стабильно, был прост в использовании и несильно требователен к ресурсам. Как и у любого другого приложения изредка случались глюки — при определённом наклоне из испарителя капала вода. Но в целом он меня устраивал.
И вот случилась неприятность — утюг упал с гладильной доски. Ничего страшного, но один уголок откололся. Часть отвалилсь наружу, другая внутрь. Мелкая бытовая поломка, немного клея и десять минут работы. Если бы не одно «но»…
Достав клей, набор инструментов, разложив на столе тряпку и водрузив сверху утюг, я обнаружил что корпус закручивается один единственным болтом, который откручивается отверткой в виде шестиугольной звезды, не путать с шестигранником, с отверстием по середине (приложение разработано без соблюдения общепринятых стандартов). Таких болтов (в широком смысле) мне видеть ещё не доводилось. Думаю нужная отвертка найдётся далеко не в каждом магазине, если найдётся вообще. Таким образом использование нестандартных технологий, делает утюг (код приложения) закрытым и недоступным для изменения (не опенсорсным). В результате я вынужден или пользоваться поломанным утюгом или ехать в сервисный центр Tefal чтобы они, своей специальной отвёрткой починили утюг (обращаться к разработчику за платной поддержкой).
Из-за такой простой вещи как один единственный болт, я должен терять время (полдня на дорогу, и ещё ждать пока сделают), тратить деньги (дорога + ремонт) и нервы (какого хрена я должен куда-то ехать и что-то платить?!)
А ведь я мог бы решить проблему просто и быстро если бы болт был стандартным, а сам утюг, вследствие этого открытым и доступным для изменения…
Предыстория такова. Был у меня утюг (приложение), от известной фирмы Tefal. Работал он достаточно стабильно, был прост в использовании и несильно требователен к ресурсам. Как и у любого другого приложения изредка случались глюки — при определённом наклоне из испарителя капала вода. Но в целом он меня устраивал.
И вот случилась неприятность — утюг упал с гладильной доски. Ничего страшного, но один уголок откололся. Часть отвалилсь наружу, другая внутрь. Мелкая бытовая поломка, немного клея и десять минут работы. Если бы не одно «но»…
Достав клей, набор инструментов, разложив на столе тряпку и водрузив сверху утюг, я обнаружил что корпус закручивается один единственным болтом, который откручивается отверткой в виде шестиугольной звезды, не путать с шестигранником, с отверстием по середине (приложение разработано без соблюдения общепринятых стандартов). Таких болтов (в широком смысле) мне видеть ещё не доводилось. Думаю нужная отвертка найдётся далеко не в каждом магазине, если найдётся вообще. Таким образом использование нестандартных технологий, делает утюг (код приложения) закрытым и недоступным для изменения (не опенсорсным). В результате я вынужден или пользоваться поломанным утюгом или ехать в сервисный центр Tefal чтобы они, своей специальной отвёрткой починили утюг (обращаться к разработчику за платной поддержкой).
Из-за такой простой вещи как один единственный болт, я должен терять время (полдня на дорогу, и ещё ждать пока сделают), тратить деньги (дорога + ремонт) и нервы (какого хрена я должен куда-то ехать и что-то платить?!)
А ведь я мог бы решить проблему просто и быстро если бы болт был стандартным, а сам утюг, вследствие этого открытым и доступным для изменения…
+9
Что знает шестиклассник о компьютерах? Результаты.
2 min
731По просьбам тех, кто помогал составить опрос, привожу результаты.
Первым делом меня удивило количество детей в классе — всего 12 (отвечали только 10). Нас в классе, помню, было 25… Ну это даже лучше, что немного :-)
Итак. Самостоятельно с компьютером умеют работать все. Писать и рисовать умеют, по их заявлениям, так же все, но ниже расскажу подробнее.
Первым делом меня удивило количество детей в классе — всего 12 (отвечали только 10). Нас в классе, помню, было 25… Ну это даже лучше, что немного :-)
Итак. Самостоятельно с компьютером умеют работать все. Писать и рисовать умеют, по их заявлениям, так же все, но ниже расскажу подробнее.
+46
Information
- Rating
- Does not participate
- Location
- Долгопрудный, Москва и Московская обл., Россия
- Date of birth
- Registered
- Activity
Specialization
Software Architect, Web Developer
Lead
PHP
Docker
OOP
Linux
Designing application architecture
System analysis
Symfony