Search
Write a publication
Pull to refresh
56
0
frexin @sindrom

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

Send message

Nginx + серверный Javascript

Reading time7 min
Views10K

… или как перейти с PHP + JavaScript на JavaScript + JavaScript


Идея реализовать проект на сервер-сайд JavaScript была уже давно. Проблема была в отсутствии подходящего серверного программного обеспечения. Существующие открытые проекты не устраивали по разным причинам. Устанавливать дополнительный модуль для Apache было не самой хорошей идеей, потому что производительность и оптимизация использования памяти при этом были бы не на высоте. С помощью jslibs можно настроить FastCGI, но очень не хотелось оставлять ни малейших шансов «502 Bad Gateway», проект ngx_http_js_module так и остался в зачаточной стадии, а ngxv8 недостаточно развит для реализации реальных приложений. Поэтому я решил сделать собственную реализацию серверного javascript. Причем постараться сразу запрограммировать всю базовую функциональность, чтобы можно было ее тестировать в условиях, близких к реальности.

В качестве основного веб-сервера было решено использовать nginx, в качестве «движка» javascript — TraceMonkey (javascript-движок из Mozilla Firefox, бывший SpiderMonkey), и написать модуль для nginx, который бы их «склеил». Ничего сложного, на первый взгляд, но очень хотелось иметь определенную функциональность (и это получилось!), чтобы можно было нормально работать дальше. Большинство идей заимствованы, кстати, из PHP.
  • Корректная работа в multi-thread условиях
  • Возможность выполнять скрипт, указанный в URL, а не настраивать отдельно скрипт-обработчик и функцию-обработчик для каждого location
  • Возможность вызывать include(), sleep(), alert() из скрипта, использовать __FILE__ и __LINE__
  • Ограничение памяти, выделяемой каждому скрипту, и времени работы скрипта
  • Защита открываемых скриптом файлов, указав в настройках список разрешенных папок. Примерно как open_basedir в PHP
  • Автоматический разбор данных запроса (параметров GET, POST, и, конечно же, cookies), чтобы не писать обработку данных на javascript
  • Поддержка запросов application/x-www-form-urlencoded и multipart/form-data
  • Поддержка basic-авторизации
  • Работа с базами данных (в первую очередь, MySQL и SQLite)
  • Работа с файловой системой: чтение и запись файлов, проверка существования файлов, и т.п.
  • Кэширование байт-кода скриптов, как, например, в eAccelerator
Плюс некоторые другие возможности (инструменты для шаблонизации, для создания конфигурационных файлов, и т.п.), но их в основной список я не включил — их позволяют сделать языковые возможности TraceMonkey.

От слов — к делу! Как скомпилировать и настроить, как протестировать и сравнить...

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

Lookalike.me — сервис для людей, похожих на тебя или твоих друзей

Reading time2 min
Views111K
Пост написан по просьбе друга, который вместе со скромным коллективом разработчиков сделал отличный сервис — не жалко и попиарить.

Привет, Хабр!

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

Год назад я решился на перемены. Собрав в голове весь свой умысел, я сел рисовать интерфейс сайта для знакомств по фотографиям с уникальной системой распознавания и нахождения похожих лиц. К вечеру мне было, с кем обсудить мой скетч, и сегодня мы даем релиз тестовой версии сайта lookalike.me — сервиса для поиска людей, внешне похожих на тебя или твоих друзей.



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

Поделись консольным выводом своим и он не раз к тебе ещё вернётся

Reading time2 min
Views2.1K
Сталкивались с такой задачей надо кому-то передать значение вывода своей консоли или какие-то исходники или ещё что. Как — email, blog?.. В Linux'е, оказывается, есть инструментарий который способен максимально облегчить эту задачу и имя ему pastebinit.
Читать дальше →

Скрипт для обработки фотографий: unix-way среди нас

Reading time3 min
Views5.9K
Добрый вечер, хабровчане!

Начну с того, что работаю я в непростой школе простым лаборантом. На мне висит много всяких обязанностей, одной из которых является пополнение школьного сайта и ресурса oshkole.ru контентом.
Часто приходится выкладывать на этот ресурс фотографии. Но так как написан он о-очень криво (к слову, ведение там странички школы обязательно и контролируется прокуратурой), фотографии конечному пользователю подгружаются в полном размере. Вот и приходится ресайзить по ~30 штук в неделю.

Так как я любительница unix-way, быстро пришла идея написать bash скрипт.

Была поставлена цель: легко и непринужденно изменять размер всех изображений в директории. Задача достаточно тривиальная, скриптик был набросан за 5 минут, и… Тут меня осенило: я ведь так давно хотела написать статью на хабр, только было неочем. И вот я здесь =)

Всем, кому еще не стало скучно, добро пожаловать под кат.
Читать дальше →

Тюнинг консольного клиента MySQL

Reading time2 min
Views4.5K
Мне довольно часто, даже постоянно приходится обращаться к разным базам данных MySQL. Испробовав немало разных GUI клиентов я понял, что они все меня не удовлетворяют. То проблемы с кодировкой, то отсутствует автодополнение кода, то не работает история запросов. В общем пришел я к использованию консольного клиента mysql. И вроде все хорошо, но была пара проблем.
Во-первых заходя в очередную закладку с открытым соединением mysql я тупо смотрел в строку приглашения и старался понять на каком я сервере нахожусь и к какой базе данных подключен. Во-вторых при выводе большого количества полей или при выводе поля с длиной превышающей ширину терминала получалась каша из черточек, букв и палочек :). На днях я покопался в документации и с кое-чем разобрался.
Читать дальше →

Client for Google Translate

Reading time4 min
Views1.3K


Прошло восемь месяцев с первого релиза клиента. Вчера я выложил новую версию (4.3.332). Для тех, кто не знает, речь идет о переводчике для Windows, который позволяет быстро переводить в большинстве приложений, просто выделив текст мышкой. Перевод осуществляется, как не трудно догадаться, с помощью сервиса Google Translate. Первый пост. Сайт переводчика.

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

Учим английский по-новому

Reading time2 min
Views4.2K
Kimir.org

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

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

Учись говорить

Reading time3 min
Views25K
В предыдущей статье я написал несколько советов, которые как мне кажется, могут помочь правильно задавать вопросы. Советы универсальны и подходят также для отвечающего, и для обучающего.

Однако, есть тонкость: пусть вы сформулировали все в голове очень точно, правильно подобрали слова. Осталось сказать. И вот тут то часто кроется коварный враг — наш, как говорят профессионалы ораторского искусства, речевой аппарат.

Признайтесь себе, только не лукавьте: бывали ли у вас случаи, когда какой-нибудь «лохоманагер» со школьной скамьи пренебрежительно отзывался о вас как о скованном, нелюдимом человеке или «умнике» себе на уме? Да кто он такой? Что он может — только языком молоть… Стоп!

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

Склад бесплатных иконок

Reading time1 min
Views164K
Прошелся по закладкам и образовалась такая толстенькая подборочка ресурсов с бесплатными и качественными иконками, с которой спешу поделиться с тобой %username%!

Iconfinder


image


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

Алгоритм коллаборативной фильтрации

Reading time2 min
Views16K
Коллаборативная фильтрация (англ. collaborative filtering) — это метод, который даёт автоматические прогнозы исходя из наколенной информации о интересах и вкусах пользователей.

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

Закончен предварительный перевод книги «Волшебство Git»

Reading time1 min
Views27K
Я, как и многие программисты, после знаменитого выступления Линуса Торвальдса о Git на Google Talks заинтересовался распределенными системами управления версиями, а в особенно Git.

Я довольно таки свободно читаю на английском, но мне приятнее читать на русском языке, при условии нормального перевода.
Существует замечательная книга «Git Magic» Бена Лина (Ben Lynn).
Благодаря труду многих людей вышел первый черновой вариант этой книги. Всех желающих улучшить перевод — приглашаю под кат.
Читать дальше →

Все о 960gs — отличном css-фреймворке для построения модульных сеток

Reading time6 min
Views54K


Я хочу дать исчерпывающее описание замечательному фреймворку для построения модульных сеток 960gs. Недавно где-то в комментариях сказали, что 960gs сложнее в понимании, чем blueprint, что меня удивило. Я не хочу заниматься сравнением этих фреймворком, хотя бы потому, что они выступают в разных весовых категориях, однако, для построения модульной сетки ничего легче и проще в понимании, чем 960gs я не видела.


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

Межсайтовая авторизация 2

Reading time2 min
Views28K
По итогам поста, сделанного в июле 2009 и продолжительным испытаниям, мы пришли к простой и оптимальной для нас схеме межсайтовой авторизации.
Спешу поделиться с общественностью

jQuery 1.4: 15 новых возможностей

Reading time7 min
Views6.5K
14 января появился на свет jQuery 1.4. Этот релиз содержит множество новых возможностей и улучшений. В этой статье рассматриваются те, которые вы, возможно, найдёте самыми полезными.
Читать дальше →

Сдача сессии по-английски

Reading time9 min
Views21K
Так получилось, что мне выдалась возможность поучиться в магистратуре в университете City University London. За полгода, которые уже прошли, я увидел много нового, в том числе то, как устроена местная система образования, и успел её оценить.

На мой взгляд, подход к процессу обучения студентов за границей достаточно сильно отличается от российского — особенностей довольно много. В частности, процесс построен так, чтобы человеческий фактор в выставлении оценок всегда был минимальный, а знания, данные студенту, были измерены максимально объективно.

Так как сейчас у многих читателей Хабра сессия, я решил, что пост на эту тему мог бы быть кстати и хотел бы рассказать о том, каким образом в одном из ВУЗов Лондона проводятся экзамены, и как выставляются оценки за пройденные предметы.
Читать дальше →

Шпаргалка по расшифровке имен видеофайлов

Reading time8 min
Views310K
Как то стало интересно что значат разные буковки/цифарки через точку в названиях видеофайлов.

Пост — результаты гугления, обобщения, структуризации и некоторой правки орфографии.
Возможно, кому то пригодится. Я, например, перестал связываться с TC.
Читать дальше →

Вышла Ubuntu Tweak 0.5

Reading time1 min
Views1.5K


Недавно вышла новая версия достаточно популярной программы Ubuntu Tweak.
Программа представляет собой графический, удобный и понятный интерфейс, с помощью которого можно легко изменять системные и скрытые настройки операционной системы Ubuntu. Кстати новая версия программы поддерживает только Ubuntu 9.10.
В новой версии изменён дизайн, код программы освобожден от вставок на языке C, улучшены средства для инсталяции и деинсталяции приложений. Важно, что теперь синхронизация в Центре Приложений осуществляется с данными сайта с точностью до даты.

Мало того, в блоге разработчика программы сообщается, что скоро будет выпущена Ubuntu Tweak 0.6. На рисунке примерно набросан макет новой версии, графический интерфейс которой будет отличен от текущей свежей версии.



Прямая ссылка на загрузку Ubuntu Tweak 0.5.0: .deb (640 Кб)

Обновление сайта, обновление схемы БД (MySQL)

Reading time3 min
Views5.8K
Проблема — нужно обновлять сайт (ака «svn up») плюс обновить схему БД — добавить таблицы, индексы и т.п.
SQL запросы на обновление БД хранятся в репозитории, необходимо запустить нужный SQL после обновления кода приложения.

Сложность: 1) нельзя, чтобы один и тот же SQL выполнился два раза. 2) выполнять запросы нужно в определенной последовательности (нельзя сделать ALTER TABLE до создания).

Как?

Перевод Django Documentation: Models. Part 4 (Last)

Reading time10 min
Views7.5K
image

Доброго времени суток!

Это последняя часть серии моих переводов раздела о моделях из документации Django.

Перевод Django Documentation: Models. Part 1
Перевод Django Documentation: Models. Part 2
Перевод Django Documentation: Models. Part 3

_____Многотабличное наследование
_______Класс Meta и многотабличное наследование
_______Наследование и обратные отношения
_______Создание поля с parent_link
_____Прокси-модели
_______Запросы возвращают объекты модели, к которой адресованы
_______Ограничения для базовых классов
_______Менеджеры прокси-модели
_______Различия между прокси-моделями и unmanaged-моделями
_____Множественное наследование
_____Переопределение имен полей запрещено


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

Простой скрипт деплоя

Reading time5 min
Views8.6K
Хочу сказать сразу, цель этого поста не предоставить универсальное решение задачи развертывания кода на сервере, а показать пример, один из вариантов решения такой задачи. Подойдет ли это решение для вашего случая — решать вам.

Итак, задача выгрузки кода на сервера, одна из самых частых рутинных задач в работе программиста. Очень хорошо эта проблема освящена тут. Но до сих пор, многие решают её с помощью тупого копирования выбранных файлов по FTP, что зачатую приводит к путанице, и ошибкам. Ниже я предлагаю более или менее универсальный скрипт на языке bash, который позволит автоматизировать задачу.
Читать дальше →

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity