Pull to refresh
31
0
Дмитрий @DmitryLi

Руководитель разработки

Send message

Готовимся к собеседованию по PHP: ключевое слово «static»

Reading time5 min
Views189K
Не секрет, что на собеседованиях любят задавать каверзные вопросы. Не всегда адекватные, не всегда имеющие отношение к реальности, но факт остается фактом — задают. Конечно, вопрос вопросу рознь, и иногда вопрос, на первый взгляд кажущийся вам дурацким, на самом деле направлен на проверку того, насколько хорошо вы знаете язык, на котором пишете.

image

Попробуем разобрать «по косточкам» один из таких вопросов — что значит слово «static» в PHP и зачем оно применяется?
Подробности, цитаты из мануала, стандартов и личного опыта - под катом

Безумный PHP. Фьюри код

Reading time7 min
Views64K

Сборник PHP ненормальностей или что надо знать чтобы не сойти с ума и не прострелить себе что-нибудь


Прочитал статью mnv: "Приведение типов в PHP == табурет о двух ножках?" и захотелось в комментариях добавить немного дополнений, но… Но потом увидел комментарий и понял, что лучше дополню статью тем, про что мало кто пишет и мало где это имеется в централизованном виде. Вроде бы всем известная тема, а все же кому-то в новинку. Это не совсем про приведение типов, но они тоже есть. Это про особенности, зная которые можно делать меньше ошибок. Если интересно, го под кат, я создал!
Читать дальше →

Как Валера взял в команду стажера и начал учить его проектированию

Reading time7 min
Views70K

Начало


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

На следующее утро в зале для совещаний собрались ключевые сотрудники направления. Технический директор (для тех, кто с ним еще не знаком, — его зовут Иван) сразу перешел к сути вопроса: «Приветствую всех! Как вы знаете, некоторое время назад мы поставили перед собой цель расширить присутствие на рынке и для этого открыли новый офис продаж. Так вот, эта стратегия сработала. Через месяц мы подписываем договор на разработку и внедрение платформы дистанционного образования. Проект очень интересный, но пока не об этом. Чтобы его потянуть, нам нужно срочно формировать новую команду в направлении образовательных систем.»
Читать дальше →

Как я однажды взломал онлайн-казино

Reading time7 min
Views135K
Вдохновившись рассказом Chikey о том, как он вновь «сломал интернет» Егор прекрати уже ломать все подряд, займись делом каким-нибудь, решил поведать об одной истории с довольно известным за рекой онлайн-казино. Имя этой «организации» не называю, т.к. процентов на 50 уверен, что или совсем не пофиксили, или сделали кривее, чем было до этого.

История очень похожа на взлом Егора, за исключением того, что это не совсем рэйс, вернее, совсем не race condition в чистом его виде. Как оно будет полностью не знаю, я больше практик, чем теоретик. Назовем его «conditional race condition» — хоть и масло масляное, но суть отражает верно.

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

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

Завел себе аккаунт, и поехали…
Читать дальше →

Пример Sphinx поиска на реальном проекте — магазин автозапчастей Tecdoc

Reading time9 min
Views98K
Вкратце: статья будет полезна тем программистам, кто уже заинтересовался релевантным поиском и прочитал статьи по стартовой установке сфинкс поиска, погонял на тестовых примерах и таких же синтетических задачах. Часто эти примеры не дают ответа на вопрос, а как же ощутить реальную пользу от поискового модуля Sphinx в сравнении с другими более простыми вариантами поиска. Примеры кода в статье — на php+smarty, Sphinx 2.0.1-beta, база данных — mysql, исходники и дамп структуры базы выложены отдельным архивом в подвале. В статье описан пример использования таких особенностей сфинкса, как:
  • Создание единого конфиг файла для windows development и linux production
  • SetMatchMode(SPH_MATCH_EXTENDED2) и почему SPH_MATCH_ANY и другие не подходят для реального поиска
  • SetSortMode(SPH_SORT_RELEVANCE), SetFieldWeights — сортировка по релевантности и установка весов для полей индекса
  • SetLimits(0,20) — ограничение вывода результатов
  • AddQuery, RunQueries — построение мультизапросов
  • SetFilter, ResetFilters — добавление фильтрации в мулльтизапросе для ограничения получаемых данных
  • Wordforms — использование синонимов и преодоление ограничений для нестандартных словоформ, как «C#»

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

Практика прохождения собеседований или как я переехал в столицу

Reading time4 min
Views20K
Привет, %хаброюзер%!

Сегодня я поделюсь с вами своим опытом прохождения собеседований на вакансии PHP-программиста в «белокаменной»Москве.
Читать дальше →

JavaScript. Вопросы на собеседовании

Reading time3 min
Views137K
Не так давно озадачился поиском работы, в связи с чем посетил n-нное количество собеседований и услышал много интересных вопросов. По сети гуляет много статей с вопросами по JS, поэтому постараюсь выбрать вопросы, которые ещё не видел. Здесь нет вопросов типа Что такое замыкание?, Наследование в JavaScript или Сделайте ajax запрос на VanillaJS. Кстати советую поискать ответы на эти вопросы, прежде чем читать статью :) Под катом вопросы типа «с подвохом». Вряд ли какой-то из них попадётся вам, но, надеюсь, статья настроит вас на «подвоховое» мышление, и напомнит некоторые скользкие места и подводные камушки javascript.
Читать дальше →

Собеседования на должность PHP разработчика

Reading time3 min
Views71K

Довольно часто (постоянно) мне приходиться проводить собеседование людей желающих устроитсья в мой отдел на должность «junior PHP developer» и «PHP developer». И, с завидным постоянством, я и team-lead отдела задаем одни и те же вопросы…
Читать дальше →

Руководство по собеседованию на вакансию PHP-программиста

Reading time22 min
Views255K
Вездесущий… это определённо то слово, которым можно описать язык PHP по отношению к вебу. Он действительно вездесущ. В настоящее время, среди всех серверных языков программирования, PHP используется наиболее широко. На нём написаны более 80% сайтов, при этом следующий по популярности ASP.NET со своими 17% остаётся далеко позади.



Почему? Что позволило PHP стать настолько популярным и широко используемым? На этот вопрос нет однозначного ответа, но простота использования языка, безусловно, существенный фактор, поспособствовавший его успеху. Новички в PHP могут быстро выйти на достаточный уровень и разместить динамический контент на своих веб-сайтах с минимум познаний в программировании.

Именно в этом и заключается основная проблема поиска высококвалифицированных PHP-разработчиков. Относительно низкий порог вхождения и 20 лет развития языка привели к тому, что PHP-программисты стали такими же вездесущими, как и сам PHP. Многие из них могут на законных основания утверждать, что «знают» язык. Однако разработчики, которые действительно являются экспертами по PHP, способны создавать куда более функциональное, надёжное, масштабируемое и простое в сопровождении программное обеспечение.

Как же отличить тех, кто обладает реальной компетентностью в PHP (не говоря уже о тех, кто входит в 1% наиболее опытных кандидатов) от тех, у кого только поверхностные знания?
Читать дальше →

Простые догмы при работе с цветом в интерфейсах

Reading time5 min
Views111K
image

Привет, username!

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

Читать дальше →

Разработчики Sims 4 пошутили над «пиратами»

Reading time1 min
Views317K


Сотрудники компании Maxis креативно подшутили над игроками, у которых установлена нелицензионная копия игры Sims 4. В этой игре есть спецэффект пиксельного размытия изображения, когда персонаж идёт в ванную или туалет. Так вот, в «пиратской» копии эффект пикселизации разрастается на всю игровую область.
Читать дальше →

Настройка и оптимизация MySQL сервера

Reading time9 min
Views316K
В этой статье будут описаны различные настройки MySQL, преимущественно те, которые влияют на производительность. Для удобства все переменные разделены по разделам (базовые настройки, ограничения, настройки потоки, кэширование запросов, тайминги, буферы, InnoDB). Сначала уточним имена некоторых переменных, которые изменились в версии 4 MySQL, а в сети продолжают встречаться и старые и новые варианты имен, что вызывает вопросы.
Читать дальше →

Многоязычный Badoo: «трудности перевода»

Reading time10 min
Views27K


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

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

В этой статье мы вкратце расскажем о тех аспектах локализации, которым нужно уделить внимание в первую очередь, и поделимся опытом, который мы накопили при переводе Badoo на 46 языков. Это очень обширная тема, и мы продолжим рассказывать в деталях, как мы реализовали те или иные инструменты. В конце статьи вы можете проголосовать и выбрать тот аспект, о котором вам интересно узнать в первую очередь.
Читать дальше →

Авторизация через ВКонтакте, Mail.ru и другие — 3 (ВКонтакте и OAuth)

Reading time3 min
Views33K
В прошлых двух частях мы сделали авторизацию через ВКонтакте, используя предоставленный ими javascript-виджет и через Майл.ру, используя как JS API, так и через взаимодействие сервер-сервер. Сегодня мы исправим наше упущение относительно ВКонтакте и рассмотрим авторизацию через ВКонтакте без использования клиентских javascript'ов.
В качестве ссылки на авторизацию мы можем использовать любой элемент, например картинку

, оформленную аналогичным образом со ссылкой на авторизацию через mail.ru.
Читать дальше →

Авторизация через ВКонтакте, Mail.ru и другие для самых начинающих — 1

Reading time4 min
Views48K
На хабре и других ресурсах есть туториалы, однако в каждом упущен какой-нибудь незначительный момент, вопросы по которому можно видеть на различных форумах. Так как недавно столкнулся с задачей подружить один сайт с Контактиком и Майл.ру, то решил, пока свежа память, сделать свое небольшое руководство с блэкджеком так сказать, используя родные виджеты этих социальных сетей.
Читать дальше →

Безопасная загрузка изображений на сервер. Часть вторая

Reading time7 min
Views28K
Это вторая часть перевода. Начинать прочтение лучше с первой.

Итак, после применения описанных в первой части методов, мы можем прекратить волноваться? К сожалению, нет. То, какие расширения файла будут переданы транслятору PHP, будет зависеть от конфигурации сервера. Разработчик часто не знает и не контролирует конфигурацию веб-сервера. Мы видели веб-серверы, с такой конфигурацией, что файлы .html и .js выполнялись как php. Некоторые веб-приложения могут потребовать, чтобы файлы .gif или .jpeg интерпретировались PHP (это часто случается, когда изображения, например графы и диаграммы, динамически строятся на сервере самим PHP).

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

Безопасная загрузка изображений на сервер. Часть первая

Reading time10 min
Views138K
В данной статье демонстрируются основные уязвимости веб-приложений по загрузке файлов на сервер и способы их избежать. В статье приведены самые азы, в врят-ли она будет интересна профессионалам. Но тем неменее — это должен знать каждый PHP-разработчик.

Различные веб-приложения позволяют пользователям загружать файлы. Форумы позволяют пользователям загружать «аватары». Фотогалереи позволяют загружать фотографии. Социальные сети предоставляют возможности по загрузке изображений, видео, и т.д. Блоги позволяют загружать опять же аватарки и/или изображения.

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

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

Шаблоны проектирования PHP. Часть 1. Порождающие

Reading time13 min
Views236K
Тема заезженная до дыр, не спорю… Вероятно, для опытных разработчиков моя статья будет мало, чем полезна. Я бы рекомендовал её к прочтению тем, кто только начал осознавать, что его коду чего-то не хватает, и что он созрел для вникания в это далёкое понятие – «паттерны». По себе помню, что довольно долгое время я путался в шаблонах, иногда даже не понимая, чем один отличается от другого. Именно этот факт стал основой для моей статьи. Примеры в ней не будут реальными. Они будут абстрактными и максимально простыми. Однако я постараюсь все примеры держать в едином контексте, чтобы можно было наглядно видеть отличия их использования в одной и той же ситуации. Я не буду нагружать классы лишним функционалом, чтобы можно было понять, какая именно часть кода имеет непосредственное отношение к шаблону. Главными героями примеров станут Factory (фабрика) и Product (продукт, производимый этой фабрикой). Возьмём это отношение за отправную точку. Возможно, в некоторых примерах это будет не очень уместно, но зато очень наглядно…

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

Марш против RDBMS или проекты распределенных хранилищ (key-value stores)

Reading time5 min
Views15K
candybar2Вот вы часто создаете проекты? И, наверное, везде применяете базу данных, в частности, MySQL (а кто-то и PostgreSQL). Но вот что интересно, по опыту да и просто после чтения описания различных архитектур видно, что далеко не везде в проекте нужны ключевые особенности баз данных, во многих случаях базу используют просто как некоторое хранилище обычных данных. Например, в системах кеширования базы обычно не применяются, более того, кеширование как раз используют для того, чтобы избежать лишних запросов. А что используют для кеширования наиболее часто? Memcached. А что это такое? Это распределенная система хранения данных на основе хеш-таблицы. В общих чертах, это просто хранилище пар ключ-значение, над которыми можно производить только основные операции — запись, чтение, удаление и проверку на присутствие. Да-да, нет никаких фильтров, выборок, сортировки, самый максимум — система тегов для выборки одним запросом всех связанных записей. И во многих случаях такого функционала вполне достаточно.
Читать дальше →

Information

Rating
Does not participate
Works in
Registered
Activity