Search
Write a publication
Pull to refresh
0
0

Пользователь

Send message

SSH-туннели — пробрасываем порт

Reading time2 min
Views437K
Не всегда есть возможность, да и не всегда надо, строить полноценный туннель с интерфейсной парой адресов. Иногда нам нужно лишь «прокинуть» вполне определённые порты.

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

Мониторинг производительности PHP-кода с помощью Pinba

Reading time15 min
Views42K
Давайте представим себе типичный, набирающий популярность стартап, использующий, например, PHP или Python. Сначала все находится на одном сервере — PHP (или Python), Apache, MySQL. Затем вы выносите MySQL на отдельный сервер, устанавливаете nginx для раздачи контента, возможно, добавляете memcached для кеширования и еще несколько серверов приложений…

Со временем число серверов будет расти, и рано или поздно вы зададитесь вопросами
«А что сейчас вообще происходит с системой? Как часто выполняется тот или иной скрипт и как долго? Какие операции занимают большую часть времени?» Системы мониторинга типа Zabbix дают лишь общую, поверхностную картину состояния приложения.

Чтобы получить ответы на эти вопросы, в Badoo был разработан сервиc мониторинга и статистики в реальном времени — Pinba. В данной статье мы расскажем о нашем опыте использования его для мониторинга и профайлинга нашей системы.
Читать дальше →

InfiniteWP: управляем всеми сайтами на WP из одной панели

Reading time2 min
Views11K

Итак здравствуйте!


На данный момент много (больше 30) наших клиентов заказали себе сайт на популярной CMS WordPress, и остались на поддержке.
Это значит порядка 30 сайтов к которым надо иметь пароли, проверять на наличие обновлений, устанавливать нужные плагины, наполнять материалом и делать хорошо клиенту и его сайту.
И совсем недавно у меня возник вопрос, а что если все это упростить? Собрать все в одном месте?

Сказано — сделано. Искал — нашел.


Читать далее

Установка SVN+Trac+TracWebAdmin

Reading time3 min
Views18K
Привет всем!
Сегодня я расскажу как правильно и без гемора установить связку SVN + Trac + TracWebAdmin.

Для чего все это...?

Представьте себе ситуацию: у вас есть проект, который находится на стадии разработки. Скрипты содержат тысячи строк кода. Постоянное сохранение, бэкап файлов, удаление фрагментов кода, вставка новых вынуждают вести точный контроль над исходным кодом проекта, чтобы не потерять уже существующее и проверенное. Вам приходится записывать в текстовом файле или на бумаге этапы разработки и тестирования отдельных частей системы, возможно даже записывать версии файлов. Возможно это удобно… но не надолго — насутпают моменты, когда контролировать код вручную становится физически невозможным из-за его размера. Здесь на помощь приходит система контроля за версиями SVN. Начать ознакомление можно осюда: ru.wikipedia.org/wiki/SVN. А Trac — это всего лишь удобный веб-интерфейс для еще более удобного контроля за своим проектом. Рассмотрение Trac'а можно начать отсюда: ru.wikipedia.org/wiki/Trac
Читать дальше →

Защита от SQL-инъекций в PHP и MySQL

Reading time26 min
Views259K
К своему удивлению, я не нашёл на Хабре исчерпывающей статьи на тему защиты от инъекций. Поэтому решил написать свою.

Несколько пространный дисклеймер, не имеющий прямого отношения к вопросу
Давайте признаем факт: количество статей (и комментариев) на тему защиты от SQL-инъекций, появившихся на Хабре в последнее время, говорит нам о том, что поляна далеко не так хорошо истоптана, как полагают некоторые. Причём повторение одних и тех же ошибок наводит на мысль, что некоторые заблуждения слишком устойчивы, и требуется не просто перечисление стандартных техник, а подробное объяснение — как они работают и в каких случаях должны применяться (а в каких — нет).

Статья получилась довольно длинной — в ней собраны результаты исследований за несколько лет — но самую важную информацию я постараюсь компактно изложить в самом начале, а более подробные рассуждения и иллюстрации, а так же различные курьёзы и любопытные факты привести в конце. Также я постараюсь окончательно развеять множественные заблуждения и суеверия, связанные с темой защиты от инъекций.

Я не буду пытаться изображать полиглота и писать рекомендации для всех БД и языков разом. Достаточное количество опыта у меня есть только в веб-разработке, на связке PHP/MySQL. Поэтому все практические примеры и рекомендации будут даваться для этих технологий. Тем не менее, изложенные ниже теоретические принципы применимы, разумеется, для любых других языков и СУБД.

Сразу отвечу на стандартное замечание про ORM, Active record и прочие query builders: во-первых, все эти прекрасные инструменты рождаются не по мановению волшебной палочки из пены морской, а пишутся программистами, используя всё тот же грешный SQL. Во-вторых, будем реалистами: перечисленные технологии — хорошо, но на практике сырой SQL постоянно встречается нам в работе — будь то legacy code или развесистый JOIN, который транслировать в ORM — себе дороже. Так что не будем прятать голову в песок и делать вид, что проблемы нет.

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

Ещё только начав интересоваться темой защиты от инъекций, я всегда хотел сформулировать набор правил, который был бы одновременно исчерпывающим и компактным. Со временем мне это удалось:

Правила, соблюдение которых гарантирует нас от инъекций


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

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

Но вперёд, читатель — перейдём уже к подробному разбору.
Читать дальше →

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

Reading time8 min
Views22K
image Это красноречивое объявление я увидел и сфотографировал в подъезде своего знакомого на двери неизвестного мне товарища. Возможно, стоило позвонить в дверь и познакомиться, но я растерялся и этого не сделал. Если товарищ есть на Хабре, то ему — большой привет.

Подобный крик души — мне хорошо знаком. Я несколько лет фрилансил, да и сейчас, перебравшись на постоянную работу, всё равно часто тружусь удалённо из дома. Наблюдательные соседи это заметили, поэтому для пяти из пятнадцати квартир подъезда мне «приходилось» с разной периодичностью оказывать техническую поддержку (порой срочную, порой бессмысленную). А ещё же есть компьютеры в своей квартире и у родственников на соседних улицах. При этом я всегда трудился и тружусь в области веб-разработок, и никогда — системным администратором. Но для окружающих негиков я всё равно «компьютерщик, который в этом деле понимает».

На этом печальная рефлексия закончена, ведь вы читаете позитивный воскресный пост.

Друзья, проблема «тех. поддержки по-соседски» существует для многих айтишников, но я поделюсь аж несколькими способами её благополучного решения, которые в моём случае — отлично сработали.

Ещё больше способов, наверняка, предложат в комментариях.

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

Профилирование JavaScript с Chrome Developer Tools

Reading time7 min
Views69K
Скорость сайта состоит из 2 частей: как быстро загружается страница и как быстро работает код в ней. Многие сервисы, такие как минификаторы или CDN, помогают ускорить загрузку, но скорость работы кода зависит только от вас.

Небольшие изменения в коде могут давать огромные изменения в производительности. Всего несколько строк могут означать разницу между быстрым сайтом и диалогом “Unresponsive Script”.
Читать дальше →

OutWiker. Open Source программа для хранения заметок

Reading time2 min
Views29K
Привет, хабравчане.

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



OutWiker — это кроссплатформенная (Windows, Linux) программа для хранения заметок в виде дерева. Распространяется OutWiker с открытыми исходниками. Особенностью программы является то, что все записи хранятся не в одном файле, а структура формируется из вложенных файлов и папок. Кроме того, программа поддерживает несколько типов страниц: простые текстовые страницы, страницы, где для оформления заметок используется HTML и страницы в формате викинотации (напоминающую pmWiki).
Читать дальше →

Коаны о программировании

Reading time4 min
Views36K
От переводчика: The Codeless Code — сборник побасенок о философии программирования. Побасенки в сборнике разные — некоторые весьма кровожадные, некоторые достаточно хардкорные с технической точки зрения (родной язык автора — Java), но встречаются очень емкие. Представляю вам перевод семи наиболее полюбившихся мне историй, остальные 30+ (новые добавляются каждую неделю) можно найти на сайте.

Пустяк


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

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

Мастер ответил: «Здесь есть изъян, и я размышляю, как лучше его исправить.»
Читать дальше →

20 вещей, которые я должен был знать в 20 лет

Reading time3 min
Views718K
1. Мир пытается оставить тебя тупым. Начиная от банковских платежей и процентов и заканчивая чудо-диетами — из необразованных людей легче вытрясти деньги и ими проще управлять. Занимайтесь самообразованием столько, сколько можете — для того, чтобы быть богатым, независимым и счастливым.
Читать дальше →

Клавиатурные сокращения с Javascript

Reading time1 min
Views1.9K
Mousetrap — маленькая библиотека (1.4 KB) для обработки клавиатурных нажатий.

// single keys
Mousetrap.bind('4', function() { highlight(2); });
Mousetrap.bind("$", function() { highlight(3); }, 'keydown');
Mousetrap.bind('x', function() { highlight(4); }, 'keyup');

// combinations
Mousetrap.bind('command+shift+K', function() { highlight(7); });
Mousetrap.bind(['command+k', 'ctrl+k'], function() { highlight(8); });

// gmail style sequences
Mousetrap.bind('g i', function() { highlight(11); });
Mousetrap.bind('* a', function() { highlight(12)});

// konami code!
Mousetrap.bind('up up down down left right left right b a enter', function() {
    highlight([15, 16, 17]);
});

Как видно, поддерживаются как одиночные нажатия, так и сочетания и клавиатурные комбо.

Работает в Internet Explorer 6+, Safari, Firefox, Chrome (с включенным Vimium не работает).

Пробуйте — craig.is/killing/mice

Простое решение на bash для расшаривания музыки и фоток в Dropbox

Reading time3 min
Views1.9K
Всем доброго хабрадня!

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

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

Сразу поговорим об ограничениях. Dropbox не даёт смотреть html, это так, но, как подсказывает нам adminimus вот тут, надо переходить на XHTML. Да, это немного неприятно, но быстро привыкаешь, а для простой вёрстки это и вообще почти не заметно. Значит, нам нужен скрипт, который на входе получит папку с файлами, а на выходе выдаст файлик .xhtml со всем необходимым содержимым.

Если Вам хочется сразу получить код на bash'е, то прошу на гитхаб, а если интересны технические подробности, то — под кат.
Читать дальше →

Изучить Github за 15 минут

Reading time1 min
Views127K
TryGit — интерактивный обучающий курс по Github в стиле Codecademy. Курс состоит из 25 мини-уроков, которые знакомят пользователя с базовыми понятиями и основными командами git, при этом ученик своими руками вводит команды в консоль, смотрит результат и читает сопровождающие надписи с объяснением происходящего.



Вот таким в будущем должно стать обучение в школах!

Конечно, 15-минутное введение не заменит полноценного учебника. Для обучения можно рекомендовать бесплатную книгу Pro Git и видеокурс Getting Git.

“Книжная полка хакера” — библиотека бесплатной компьютерной литературы

Reading time1 min
Views13K
Сайт Hackershelf.com — коллекция официально бесплатных электронных книг компьютерной тематики. Библиотека наполняется сообществом — зарегистрированные пользователи могут добавлять книги и редактировать информацию о существующих. В ней уже больше двухсот наименований книг, есть поиск по категориям и популярности.

Класс для реализации UNIX-демонов на PHP

Reading time5 min
Views2.5K
Ну начнем с того, что довольно часто приходится сталкиваться с тем, что необходимо реализовывать какую-либо серверную часть для обработки каких-то данных и т.д. Естественно, что сервеную часть удобней всего было бы реализовать в виде демона. В свое время я наткнулся на подобный класс реализации демонов написанного на Python. И вот на прошлой неделе решил написать такое же творение на PHP, вроде получилось не плохо, оценивать Вам.
Читать дальше →

RESTful API для сервера – делаем правильно (Часть 2)

Reading time9 min
Views86K
В первой части статьи я кратко описал принципы RESTful и объяснил каким образом следует проектировать архитектуру вашего сервера так, чтобы можно было легко выпускать новые и прекращать поддержку устаревших версий вашего API. В этой части я кратко расскажу о HATEOAS и Hypermedia, а затем расскажу о роли, которую они могут сыграть при разработке нативных приложений для мобильных устройств. Но главной темой этой статьи будет реализация кэширования (точнее поддержка кэширования на стороне сервера). Целевая аудитория включает разработчиков серверного ПО и, в какой то мере, разработчиков под iOS или под другие мобильные платформы.

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

Коллекции объектов в PHP

Reading time7 min
Views31K
На протяжении последних 5 лет я работаю с PHP. У него есть достаточно разных проблем, но это никогда не мешало создавать отлично работающие продукты.

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

10 популярных игр и приложений в апреле 2012 для Ubuntu (репозиторий UALinux)

Reading time3 min
Views2.7K
imageПеред наступающими выходными днями хотел бы поделиться статистикой популярных игр и приложений репозитория UALinux для Ubuntu и помочь игроманам выпасть на пару дней из реальности.

Из данных статистики были исключены игры указанные ранее в анонсах
здесь: 10 самых популярных игр и приложений для Ubuntu за март 2012
и здесь: 10 самых популярных игр для Ubuntu за февраль 2012
по двум причинам: игры эти уже знают, да и по причине массового захода статистика получается не совсем точной.

Результаты оказались довольно интересными…
Читать дальше →

Взломать Wi-Fi за 10 часов

Reading time12 min
Views1.5M
Еще не так давно казалось, что беспроводная сеть, защищенная с помощью технологии WPA2, вполне безопасна. Подобрать простой ключ для подключения действительно возможно. Но если установить по-настоящему длинный ключ, то сбрутить его не помогут ни радужные таблицы, ни даже ускорения за счет GPU. Но, как оказалось, подключиться к беспроводной сети можно и без этого — воспользовавшись недавно найденной уязвимостью в протоколе WPS.


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

Ошибки трансферта технологий №3 / «Ошибки оффшоров» + АПДЕЙТ

Reading time18 min
Views9.3K
Оказывая помощь в выводе разработок и бизнесов на внешние зарубежные рынки, приходится постоянно наблюдать одни и те же ошибки, и как следствие — неудачи и потери.
Читать дальше →

Information

Rating
Does not participate
Registered
Activity