Pull to refresh
1
0
Send message

Реализация MVC паттерна на примере создания сайта-визитки на PHP

Reading time16 min
Reach and readers746K
mvc

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

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

Случайные числа. Take Two

Reading time3 min
Reach and readers32K
Недавно вышла замечательнейшая работа про атаки на генератор случайных чисел в PHP, однако в ней никаких практических примеров представлено не было. Мы провели собственное исследование данной темы, которое вылилось в создание набора инструментов для реализации подобного рода атак.
Читать дальше →

Доступные методы борьбы с DDoS-атаками для владельцев vds/dedicated серверов с Linux

Reading time12 min
Reach and readers42K
image

Начать свое присутствие на Хабре мы решили с материала, подготовленного для Конференции уральских веб-разработчиков, в котором описаны проверенные на собственной практике и оказавшиеся вполне успешными методы борьбы с DDoS-атаками. Целевая аудитория данной статьи — это программисты, имеющие в распоряжении vds или dedicated. Статья не претендует на полноценное руководство и многие сисадминские нюансы в ней намеренно опущены. Мы рассматриваем только DDoS типа http flood как наиболее распространенный тип DDoS и наиболее дешевый для заказчика.

Целевая аудитория данной статьи – это программисты, имеющие в распоряжении VDS или Dedicated.
Читать дальше →

Как я покупал квартиру

Reading time11 min
Reach and readers63K
Я хотел написать статью про линейную регрессию, но потом подумал, да ну её, лучше куплю квартиру. И пошёл искать, что предлагают. А предлагают, как оказалось, много чего. В подходящий мне ценовой диапозон попало больше 500 квартир. И что, мне теперь все это просматривать? Ну нееет, программист я в конце концов или не программист. Надо это дело как-то автоматизировать.
Читать дальше →

Памятка пользователям ssh

Reading time13 min
Reach and readers1.6M
abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.

Оглавление:
  • управление ключами
  • копирование файлов через ssh
  • Проброс потоков ввода/вывода
  • Монтирование удалённой FS через ssh
  • Удалённое исполнение кода
  • Алиасы и опции для подключений в .ssh/config
  • Опции по-умолчанию
  • Проброс X-сервера
  • ssh в качестве socks-proxy
  • Проброс портов — прямой и обратный
  • Реверс-сокс-прокси
  • туннелирование L2/L3 трафика
  • Проброс агента авторизации
  • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)
Читать дальше →

Повышаем безопасность стека web-приложений (виртуализация LAMP, шаг 2/6)

Reading time6 min
Reach and readers8.9K

Linux: Настройка сервера баз данных MySQL


Перейдем ко второму практическому уроку серии и поговорим о настройке виртуального окружения выделенного сервера – подготовим  узел (VM) предназначенный для хранения и обслуживания доступа к БД MySQL/PostgreSQL.

В этой установке, мы будем использовать сервер баз данных MySQL. Все настройки этого урока будут проводится исключительно на vm04 с IP-адресом 192.168.1.13
Читать дальше →

Свежий взгляд на примеси в JavaScript

Reading time8 min
Reach and readers19K
В этой статье я детально исследую примеси в JavaScript, и покажу менее общепринятую, но, на мой взгляд, более естественную стратегию «примешивания», которую, надеюсь, вы найдете полезной. Закончу я матрицей результатов профилирования, подводящей итог влиянию на производительность каждой техники. (Большое спасибо блистательному @kitcambridge за ревью и улучшение кода, на котором основан этот пост!)

Повторное использование функций

В JavaScript каждый объект ссылается на объект-прототип, из которого он может наследовать свойства. Прототипы — отличные инструменты для повторного использования кода: один экземпляр прототипа может определять свойства бесконечного числа зависимых сущностей. Прототипы могут так же наследоваться от других прототипов, формируя, таким образом, цепочки прототипов, которые более-менее повторяют иерархии наследования «классовых» языков типа Java and C++. Многоэтажные иерархии наследования иногда бывают полезны при описании природного порядка вещей, но, если первичным мотивом служит повторное использование кода, такие иерархии могут быстро стать искривленными лабиринтами бессмысленных субклассов, утомительных избыточностей и неуправлямой логики («кнопка — это прямоугольник или контрол? Вот что, давайте унаследуем Button от Rectangle, а Rectangle может наследоваться от Control… так, стоп…»).
Читать дальше →

Повышаем безопасность стека web-приложений (виртуализация LAMP)

Reading time10 min
Reach and readers18K
Под стеком web-приложений мы будем подразумевать множество программных продуктов с открытым исходным кодом: операционная система, web -сервер, сервер БД и среду исполняемого кода. Наиболее известным и обыденным стеком является LAMP. Это акроним для стека web-приложений на базе бесплатных решений с открытым исходным кодом. Название составлено из первых букв входящего в его состав продуктов: Linux (операционная система), web -сервер Apache, база данных MySQL, и PHP (иногда Perl или Python). Опубликованные нами ранее материалы, посвященные вопросам безопасности, рекомендуют держать различные сетевые службы на выделенных под эти цели серверах или виртуальных машинах. Это позволит изолировать скомпрометированные и взломанные злоумышленником элементы системы, в случае если последний получит возможность эксплуатации ошибок в одном из звеньев сети обслуживания. Статья также является ответом на наиболее часто задаваемые нашими читателями вопросы, присланными нам по электронной почте. В руководстве я объясню, как построить решение на базе физических или виртуальных серверов, одинаково подходящих для раздачи статического и динамического контента, для приложений, требующих наличие БД и кэширования.
Читать дальше →

Организаторский отчет об EPAM Open Day, посвященном Cloud Computing

Reading time2 min
Reach and readers2.2K
image

Четвертый Open Day oт Epam Systems успешно состоялся 20 мая, в уже ставшем традиционном месте встречи – IT-cafe. На этот раз темой дня стал Cloud, который собрал свыше сотни желающих. Подобный интерес стал приятной, но все же, неожиданностью. В зале присутствовали не только Харьковчане, нас посетили гости из Киева, Минска и других городов. В связи с ограниченным количеством мест посетить мероприятие удалось не всем желающим(кол-во зарегистрировавшихся вдвое превышало кол-во посадочных мест). Компания Epam обещает учесть этот опыт и в последующих мероприятиях создать большее количество мест для посетителей.
Послушать доклады спикеров пришли представители большинства IT-компаний Харькова. Посетителей ожидала обширная программа, семь докладчиков.
Иван Песин (Львов) наглядно показал как создать реальную LAMP инфраструктуру на Amazon AWS, а Эли Фельдман (Нью Йорк) рассказал, зачем EPAM решил строить свой Private Cloud.

image
Андрей Гусев Cloud Computing Definition: 5-4-3
Вступление в рамках которого будут определены основные понятия Cloud Computing Презентация


image
Иван Песин Amazon AWS. Create elastic environment in 15 minutes
практическая часть в рамках которой наш Львовский гость создаст реальную LAMP инфраструктуру на Amazon AWS, настроит политику автоматического масштабирования и проведет нагрузочное тестирование созданной инфраструктуры.


image
Эли Фельдман EPAM Cloud Software Stack
Зачем EPAM решил строить свой Private Cloud? По какому принципу выбирались основные структурные блоки? Какие технические и организационные проблемы при этом возникли? Какой опыт был накоплен? На эти и не только на эти вопросы Эли Фельдман ответил в своём докладе Презентация


Александр Раскосов EPAM Cloud Orchestrator as unified mobile management console
Как сделать работу DevOps комфортной? Как сохранить универсальность и при этом не перегрузить API излишней детализацией? Как сделать management инфраструктуры действительно мобильным? Презентация


Алена Матохина Migration to Cloud: experience of 30 projects
В результате миграции более 30 проектов в «облака», можно сделать вывод, что многие разработчики и руководители проектов путают понятия virtual hosting и cloud computing. Презентация


Алексей Трегубов Unified EPAM Cloud Migration flow
Доклад посвящен найденному решению, позволяющему избежать неожиданных неприятностей и унифицировать процесс миграции. Презентация


Сергей Криштоп Cloud Services for Developers
В докладе представлен анализ 2-х различных подходов в разработке приложений для облачных сервисов использующих модель Инфраструктура-как-сервис (IaaS) и Платформа-как-сервис (PaaS). В качестве инфраструктурного решения был выбран EPAM Cloud, в качестве платформы — Microsoft Azure. Презентация


image

Во время мероприятия спикеры объединились в team и вели активную дискуссию со слушателями не только во время перерывов, но и после окончания ивента. Если говорить об особенности этого Epam Open Day, то он, как ни один другой, отличался интересом аудитории к докладам и общей положительной атмосферой.
Посмотреть фото можно тут

Еще раз о каррировании и частичном применении в PHP

Reading time4 min
Reach and readers6.8K
Искусство каррированияВ недавней статье предложена реализация каррирования (currying) и частичного применения (partial function application) на PHP. Ее фундаментальным недостатком является то, что результатом каррирования является не функция, а объект. Он уже не может быть передан в качестве callback-параметра, а для подстановки аргументов приходится использовать специальный синтаксис. В настоящем тексте предлагается новая, прозрачная реализация этих конструкций для PHP 5.3 и выше.

Термин currying происходит от фамилии американского математика Haskell Curry. Второе значение слова currying — выделка дубленой кожи.

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

Эмуляция каррирования и частичного применения на PHP — это один из примеров того, что Макконнелл в «Совершенном коде» (гл. 4.3) называет программированием с использованием языка, а не на языке.
Читать дальше →

Пишем и оптимизируем Жизнь Конуэя на JS

Reading time5 min
Reach and readers6.7K
Обновляя недавно дизайн своего хомяка, подумал – а не сделать ли мне какую-нибудь необычную страницу с 404-й ошибкой? Поскольку в детстве я был впечатлен Жизнью Конуэя (как возможно и многие из читателей), решил её на JS и реализовать.

Казалось бы, что сложного в Жизни: если у занятой клетки 2 или 3 соседа – она остается, если у пустой ровно 3 – рождается? В этой статье я расскажу о своей оптимизации алгоритма и отрисовки на canvas-е, некоторых не очевидных моментах целочисленной/бинарной арифметики в JavaScript.

Забегая вперед, конечный результат можно увидеть тут, исходники видны там же (да еще и по лицензии CC BY).
Читать дальше →

Несколько шагов кэширования справочников

Reading time3 min
Reach and readers2.3K
В ходе работы над системой документооборота возникла задача — кэшировать справочники, использующиеся на клиентской стороне. Cистема была спроектирована в виде трехзвенки (БД — сервер приложения — клиентская часть), поэтому простора для фантазии было много.
Исходные условия: несколько десятков справочников, отличающихся по объему от нескольких записей до нескольких десятков тысяч записей в каждом. Каждая запись для большинства справочников хранит в себе полезные данные (обычно строку) и идентификатор записи (целое число).
Читать дальше →

Адаптивная верстка: CSS&JS фреймворк Skeleton

Reading time4 min
Reach and readers70K

В продолжение недавней статьи про адаптивную верстку, хочется более полно раскрыть тему. В реалиях, чаще всего, для адаптивной верстки используют CSS-фреймворки. Об одном из них я хотел бы рассказать, а если точнее – перевести мануал по ее использованию. Называется он Skeleton.
Читать дальше →

Отчет ФБР о криптовалюте Биткойн

Reading time4 min
Reach and readers13K


Федеральное бюро расследований США обеспокоено потенциалом отмывания денег и другой криминальной деятельности в анонимной платежной системе Биткойн. Таковы выводы, которые можно сделать, ознакомившись с появившимся на этой неделе в сети документом под названием «Виртуальная валюта Биткойн: уникальные особенности представляют отдельные затруднения сдерживания незаконной деятельности» (Bitcoin Virtual Currency: Unique Features Present Distinct Challenges for Deterring Illicit Activity).

Опубликованный 24-ого апреля отчет не засекречен, но помечен как документ исключительно для официального использования, и 9-ого мая произошла его утечка в Интернет. В документе показаны не только оценки системы, но и непреднамеренно описаны советы пользователям криптовалюты, следуя которым они могут оставаться более анонимными.

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

Массивы или Объекты? Хочу коллекции в пхп!

Reading time4 min
Reach and readers22K
Чего уж скрывать, мне нравятся объекты, и не нравятся ассоциативные массивы. И когда выбираю из базы некий набор данных, хочется получать набор объектов а не массив массивов. Причем не просто набор объектов, а нужный мне набор и именно так как я этого хочу. Раньше происходила выборка из базы в 3 этапа:
1. получить массив данных из бд
2. пройтись по результату
3. на каждой итерации создать объект и сунуть в другой массив
Ну и собственно вернуть данные наружу. Это не то чтобы напрягало сильно, но чувствовал что должен быть способ проще и удобней. И я его нашел — Коллекции.
Читать дальше →

Полезные ссылки для изучения CSS анимации

Reading time3 min
Reach and readers24K
Мы начали наблюдать много экспериментов над CSS3 анимацией и статьи о ней в 2011-м, но тогда поддержка этой анимации была ограничена браузерами на вебките. В середине 2011-го Firefox 5 тоже получил эту поддержку, а также мы можем ожидать ее в следующей реинкарнации Internet Explorer (10), поэтому сейчас идеальное время, чтобы разобраться с синтаксисом @keyframes (покадровой анимации). Этот пост предлагает краткий обзор 10-ти статей, в которых объясняется, как использовать это клевое CSS3 свойство, с примерами и демками.


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

Насколько большие массивы (и значения) в PHP? (Подсказка: ОЧЕНЬ БОЛЬШИЕ)

Reading time7 min
Reach and readers32K
В этой статье я хочу исследовать расход памяти у массивов (и значений в целом) в PHP используя следующий скрипт в качестве примера, который создаёт 100 000 уникальных целочисленных элементов массива и в конце измеряет количество использованной памяти.
Читать дальше →

Как раскрыть мощь HTML5 Canvas для игр

Reading time8 min
Reach and readers40K


Браузеры, поддерживающие HTML5, и платформа HTML5 для Windows 8 Metro сегодня становятся серьезными кандидатами для разработки современных игр.

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

Цель данной статьи — дать вам несколько подсказок, как выжать максимум мощности из HTML5 Canvas. Статья состоит из двух основных частей [вы читаете первую]. David Rousset скоро опубликует вторую часть.

В статье я буду показывать ключевые идеи на одном и том же примере — это эффект 2D-туннеля, который я написал для Coding4Fun-сессии на TechDays 2012 во Франции.
Читать дальше →

«Загадочные отступы» между инлайн-элементами

Reading time15 min
Reach and readers36K
Каждому, даже самому «молодому» верстальщику известны неприятности (проблемы) с интервалом между элементами, пробелами, которые вставляются между словами. Эти пробелы часто мешают нам при вёрстке того или иного блока. Избавиться от них бывает не так-то просто, а зачастую эти межсловные расстояния и вовсе ставят нас перед выбором, выбором способа решения данной проблемы.

В этой статье мы попытаемся понять, что же из себя представляют эти загадочные "Отступы", что это за звери и с чем их едят. Так же рассмотрим, что такое inline-block, и почему после себя он ставит эти непонятные интервалы. Ну, и, самое главное, мы увидим несколько универсальных решений данного вопроса и, конечно же, обсудим все их стороны.
Читать дальше →

10 миллионов хитов в день с WordPress на сервере за $15

Reading time1 min
Reach and readers17K
Английский разработчик Эван Лейт (Ewan Leith) опубликовал пошаговую инструкцию, как поднять виртуальный микросервер на Amazon, Linode или другом облачном хостинге, который сможет крутить блог WordPress и выдерживать 10 миллионов хитов в сутки (отчёт составлен с помощью Blitz.io), при этом будет стоить всего пятнадцать долларов в месяц.

Инструкция описывает, как последовательно установить Ubuntu 11.10 (Oneiric), MySQL, PHP с PHP FPM, APC и модулем MySQL, Nginx с конфигурацией для WordPress, ну и сам WordPress. После этого сервер работает ещё довольно медленно, но всё меняет установка W3 Total Cache и Varnish, которые вместе с Nginx способны сотворить настоящее чудо.

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

Information

Rating
Does not participate
Registered
Activity