Как стать автором
Обновить
42
0
Винокуров Роман @Chaos_Code

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

Отправить сообщение

nginx — строим свой letitbit

Время на прочтение2 мин
Количество просмотров5.2K
Появилось желание сделать сервис подобный letitbit.net в отдельно взятой стране на окраине Европы.
Требовалось:
  • позволять загружать/отдавать большие файлы;
  • не позволять перепубликовывать прямые ссылки на файлы;
  • ограничивать количество одновременно скачиваемых файлов.

Для реализации выбрали NGINX в связке с PHP через fastcgi.
В NGINX добавили:
  1. великолепный Nginx upload module, который позволяет избежать многократное копирование загруженного файла на пути NGINX-PHP. К тому же, при небольшой доработке, возможна загрузка сразу в нужную папку, что позволяет использовать простое переименование вместо копирования в PHP
  2. нужную заплатку к модулю secure_link, позволяющую делать безопасные ссылки действительными ограниченное время

PHP взяли самый обычный и запустили через spawn-fcgi.
Поставили сервачок, напихали туда штук 12 терабайтных дисков.
Программист написал PHP код, а Марис Рускулис придумал следующий трюк с rewrite для NGINX, позволяющий избежать обращение к PHP при скачивании файла.
В результате, конфигурация NGINX выглядела примерно так:
http {
limit_zone regular $zonekey 10m;
limit_zone premium $zonekey 10m;
server {
root /www/oursiteishere;
location / { try_files $uri @files; }
location ~ \.php$ { try_files $uri @files; fastcgi_stuff_here; }
location @files { rewrite ^(.*)$ /index.php?$1 last; }
location /storage/ { root /storages/; internal; }
# Location for regular users
location ~ /download/.+/(.+)/0/.+/.*/(.+)$ {
set $fname $2;
set $username $1;
set $zonekey "$binary_remote_addr $username";
limit_conn regular 1;
limit_rate '100k';
secure_link_secret megasecret;
secure_link_ttl on;
if ($secure_link = "") { return 403; }
add_header Content-Disposition "attachment; filename*=UTF-8''$fname";
rewrite ^/download/([a-f0-9]+)/([\.~0-9a-zA-Z_]+)/([01])/([0-9]+)/(.+)/.+$ /storage/$4/$5 break;
}
# Location for premium users
# Location for upload using upload module
}
}

Замечательной вещью в данном конфиге является тот факт, что при скачивании файла по сгенерированной защищённой от подмены временной ссылке (проверку осуществляет secure_link) не вызывается PHP с последующим X-Accel-Redirect.
Возможно, данное решение накладывает ограничение на присутствие логики перед непосредственной отдачей файла, но тем не менее, на мой взгляд, является довольно оригинальным трюком, позволяющим немного сэкономить на fastcgi.

Эмуляция многопоточности в PHP

Время на прочтение10 мин
Количество просмотров30K
Суть многопоточности (для приложения) состоит в том, что процесс может состоять из нескольких (однотипных) потоков, выполняющихся «параллельно», то есть без упорядочивания по времени — выполнился один, пошел следующий. Использование многопоточности позволяет ускорить выполнение задачи и/или снизить нагрузку, таким образом, улучшая быстродействие самого приложения.

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

Я рассмотрю простой пример, как можно достичь эмуляции многопоточности в PHP.
Читать дальше →

Почти настоящая многопоточность средствами php 5

Время на прочтение5 мин
Количество просмотров32K
В очередной раз читал про многопоточность в php точнее полное её отсутствие и всевозможные костыли в виде не блокируемых сокетов. Вот как раз там наткнулся на интересную статью в которой описывался очень простой и эффективный способ распараллеливания потоков. На основе этого материала написал небольшой класс что бы облегчить себе работу в будущем.
Читать дальше →

PHP модуль — это просто

Время на прочтение3 мин
Количество просмотров20K
Недавно мы опубликовали визард для VisualStudio, с помощью которого можно создать экстеншн в пару кликов мыши. Теперь с помощью него мы напишем наши два первых расширения: «Привет, мир» и «вытащим иконку из exe».
Сразу прошу прощение, что очень сильно задержал статью, но жизненные обстоятельства вынудили это сделать, но они исключительно уважительные.



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

Настраиваем Vim под Python

Время на прочтение4 мин
Количество просмотров43K
Сегодня я хочу рассказать вам, как я настраивал любимый всеми редактор Vim (который в одном режиме пищит, а в другом — все портит) для написания кода на Python. Статья расчитана на начинающих виммеров.
У меня получилась такая картинка:

Настроить и свой!

nginx, memcached и SSI

Время на прочтение3 мин
Количество просмотров19K
Моя первая статья, не судите строго...

Приветствую вас, уважаемые хабрадевелоперы!

Многие из вас знают о прекрасном легковесном веб-сервере nginx.
Некоторые также знают, что он умеет работать с memcached.
Но лишь немногие в курсе, при чём здесь SSI и как его можно использовать в связке с nginx и memcached.

Как известно, новое — это хорошо забытое старое. Каждый названный инструмент и технология вам наверняка известны. Я же хочу рассказать о том, как и зачем свалить всё это в одну кучу :)
Читать дальше →

Основы Hibernate

Время на прочтение17 мин
Количество просмотров437K


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

Долго думал, о чем же написать свой «первый» топик… Слово первый не зря взял в кавычки, так как первый топик на самом деле уже был, опыт был к сожалению неудачный — дело закончилось баном.  Решил больше не копипастить. Уверенности тому, что надо написать что-то свое, придал вот этот топик. Решил твердо — пусть это будет и редко, но буду писать сам.

Ну, едем дальше!

Совсем недавно, по роду свой деятельности, мне пришлось столкнуться с таким понятием как ORM — (англ. Object-relational mapping). В двух словах ORM — это отображение объектов какого-либо объектно-ориентированного языка в структуры реляционных баз данных. Именно объектов, таких, какие они есть, со всеми полями, значениями, отношениями м/у друг другом.
Читать дальше →

Как использовать стили операционной системы в CSS

Время на прочтение2 мин
Количество просмотров3.2K
В CSS 2.1 появилась одна интересная фича, о которой не все знают — это возможность задавать на веб-странице шрифты и цвета, которые используются в текущей системной теме операционной системы.
Это может быть полезно в ситуациях, когда вы хотите приблизить интерфейс вашей страницы к пользовательскому интерфейсу операционной системы. Например, вы хотите написать Adobe AIR приложение, или сделать справочный интерфейс, наподобие нативной chm-справки (вот как здесь: manual.pohape.ru).
Читать дальше →

Список полезных инструментов для php разработчика

Время на прочтение10 мин
Количество просмотров149K
PHP один из самых широко используемых языков для создания вебсайтов. PHP фреймворки, такие как Zend, CakePHP, CodeIgniter и т.д и open source классы и библиотеки упростили разработку.
Независимо от того, являетесь ли вы опытным разработчиком или новичком, инструменты, которые вы используете, имеют прямое влияние на вашу продуктивность. Здесь собран список действительно полезных утилит и расширений для PHP разработчиков, которые помогут ускорить разработку, и улучшит итоговое качество кода.
Читать дальше →

Continuous integration для php

Время на прочтение9 мин
Количество просмотров14K
Эту статью написал мой добрый приятель и бывший коллега fred, работающий в команде программистов над большим и сложным проектом, который должен работать 24х7. Если кто-то решит пригласить его на хабр — с удовольствием вышлю его email по хабрапочте. Пожелания и комментарии приветствуются, а я обязуюсь передавать ответы автора в меру своих возможностей.

Меня давно посещала мысль запустить CI-сервер для рабочего проекта. База модульных тестов уже достаточно внушительных размеров, а количество людей в проекте немного увеличилось. Можно было бы наблюдать за тем, как изменяется покрытие тестами кода и соблюдаются стандарты кодирования. И наказывать провинившихся. Шучу.
Некоторое время назад была прочитана книжка Непрерывная интеграция. Улучшение качества программного обеспечения и снижение риска и статья Quality Assurance Tools for PHP, которые и послужили отправной точкой.
Читать дальше →

Компонент Dependency Injection

Время на прочтение1 мин
Количество просмотров6.6K
Новый компонент от Symfony касается крайне важного паттерна проектирования — Dependency Injection. Честно говоря, я много про него читал, но на практике не очень видел как применить, и теория была для меня довольно абстрактной. Симфонисты и здесь выдержали фирменный стиль. К компоненту приложена книжка, которая начинается с главы «что такое Dependency Injection»? И шаг за шагом некоторый учебный класс рефакторится в элегантное решение. Чтобы показать, что компонент может использоваться не только с Симфони, в качестве примеров используются и классы из Zend-фреймворка. Жалко только, что книжку нельзя скачать.

Вот еще один пример использования этого компонента с Zend-фреймворком.

25 советов по улучшению вашего кода jQuery

Время на прочтение15 мин
Количество просмотров29K
Это перевод статьи, написанной Jon Hobbs-Smith. Я счел ее довольно интересной и решил выложить в своем блоге, а также поделиться им с хабрапользователями, также как и я заинтересованными в библиотеке jQuery. Перед тем как начать хочу отметить, что написана она (как и переведена) далеко не экспертом в jQuery, поэтому если вы найдете в ней ошибку, пожалуйста, сообщите. Итак, начнем.
Читать дальше →

Дизайн-аудит на примере известного портала

Время на прочтение12 мин
Количество просмотров12K
Дизайн-аудит
Практически каждый дизайнер хотя бы раз в своей практике сталкивался со следующей проблемой: вроде бы всё хорошо получилось, но что-то где-то не так, есть ощущение какой-то недоделанности и неряшливости. Кто-то в этом случае привычно махнёт рукой и, надеясь на некомпетентность клиента, выведет недоделанный сайт в Сеть. Кто-то начнёт череду поисков решения проблемы и зайдёт в глубокие дебри бесконечных переделок и доработок. И почти никто не обратится за помощью к специалистам, занимающимся непосредственно данной категорией проблем — к дизайн-аудиторам. А зря. Аудит сайтов в целом лишь относительно недавно стал вызывать интерес в нашей стране, появились специалисты в области юзабилити сайтов, продвижения и раскрутки. А вот непосредственно улучшением внешнего вида занимаются лишь единицы, да и то о них мало кто знает.

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

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

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

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

InfoVis Toolkit

Время на прочтение1 мин
Количество просмотров2.3K
InfoVis Toolkit — предоставляет инструменты для создания интерактивных представлений данных в Веб с помощью JavaScript. Распространяется с открытым исходным кодом под лицензией BSD. Поддерживаются основные браузеры: IE6+, Firefox2+, Safari3+, Opera9.5+
Читать дальше →

Полиглоты в продакшн Питона

Время на прочтение15 мин
Количество просмотров7.4K
Сразу, в порядке завлекалочки. Нашей целью будет научиться писать программы-полиглоты, способные интерпретироваться сразу на нескольких языках программирования (одним, «базовым» из которых является Python). При этом, в случае интерпретации на одном из них, программа будет генерировать другую программу, функционально схожую (или даже эквивалентную) той, которая выполняется в случае интерпретации на другом языке.

И самое интересное: подходы, используемые при написании этой программы, будут интересны не столько академически, сколько практически — при разработке программы с использованием этих подходов разработка будет проще и удобнее (хоть поначалу и чуточку непривычно), а программа будет эффективнее, чем без них.

Впрочем, это звучит страшнее, чем является.

Поехали?

Плавающие якоря

Время на прочтение1 мин
Количество просмотров9.2K
Верстал комменты для очередного проекта. Всегда напрягало, что якорь в комментариях опускал экран до нужного комментария «впритык», тогда как с эстетической точки зрения было бы приятно, если бы сверху от границы экрана до самого комментария все же был бы какой-то отступ.
image
Читать дальше →

3 in 1: Desktop, Mobile, Web. Кроссплатформенная разработка

Время на прочтение5 мин
Количество просмотров9.6K

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

читать дальше

Стэнфордский видео-курс по языкам программирования

Время на прочтение1 мин
Количество просмотров6.3K
Стэнфордский курс по основам языков программирования выложен на YouTube.



27 лекций минут по 20 каждая ведут стэнфордский преподаватель Джерри Кейн (экс-Стэнфорд, нынче Facebook), последняя лекция по Haskell преподается Сашей Рашем (Facebook). Рассматриваются концепции и основы C (куда ж без него), ассемблера, C++, Scheme, Python и Haskell.

Несколько удобных инструментов для тестирования сайта

Время на прочтение3 мин
Количество просмотров32K
Представляю вашему вниманию обзор нескольких полезных инструментов для всестороннего тестирования сайтов.

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

ZFDebug

Время на прочтение2 мин
Количество просмотров3K
ZFDebug представляет собой плагин для Zend Framework. В нем содержится полезная отладочная информация в небольшой панеле в нижней части каждой страницы. До версии 1.5 назывался Scienta ZF Debug Bar.

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

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность