Search
Write a publication
Pull to refresh
46
0
Владислав Раструсный @FractalizeR

CTO

Send message

Отказоусточивый прокси-сервер на базе Squid в домене Windows

Reading time7 min
Views46K
UPD: различия в потреблении памяти между моей конфигурацией и той, которая используется у авторов негативных комментариев, вызваны тем, что со Squid'ом помимо стандартного скрипта wbinfo_group.pl, с помощью которого определяется принадлежность доменного пользователя доменной группе, используется скрипт, который определяет сам логин пользователя для того, чтобы squid умел предоставлять пользователю права, отличающиеся от тех прав, которые предоставлены его группе.

imageОднажды дождливым серым вечером у меня появилась потребность внедрить прокси-сервер, но не простой, а такой, который бы обладал следующим функционалом:
  • предоставление/ограничение доступа в зависимости от членства учетной записи в определенной группе Active Directory;
  • предоставление/ограничение доступа в зависимости от прав, предоставленных учетной записи (например, чтобы можно было всей группе разрешить пользоваться поисковиками, а одному самому хитрому пользователю этой группы отключить строго определенный поисковик);
  • предоставление доступа без всяких ограничений для «VIP» MAC-адресов;
  • предоставление доступа к минимальному набору ресурсов всем пользователям (и недоменным в том числе);
  • количество движений, которые должен выполнить пользователь для работы с прокси-сервером, должно быть сведено к минимуму;
  • администрирование прокси-сервера производится посредством веб-интерфейса;
  • совокупная стоимость владения данным прокси-сервером должна быть минимальной.

Тех, кому интересна длинная история метаморфоз, превративших один компьютер в супермонстра, приглашаю под кат

Знакомство с системой деплоя и сопровождения серверов xCAT

Reading time9 min
Views19K
В продолжение темы нашей предыдущей статьи, сегодня поговорим об инструменте, который мы используем изо дня в день.

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

Любому инженеру, управляющему парком серверов Badoo – самой популярной сети знакомств в интернете, не хочется даже вспоминать о том, что когда-то приходилось править вручную конфигурации DHCP-сервера, собирать образы для сетевой PXE-загрузки… Мы хотим рассказать вам, где и как в нашей компании успешно используется программное решение xCAT.
Читать дальше →

Алгоритм детектирования теней на видеоизображении

Reading time3 min
Views8.3K

Введение


В данной статье мне хотелось рассказать об алгоритме, который позволяет разделять на видеоизображении реальные объекты и тени.



Данный алгоритм был впервые реализован мной во время разработки алгоритмов видеоаналитики для IP-видеосервера MagicBox, которое разрабатывает компания Синезис, в которой я работаю в настоящее время. Как известно, при детектировании движения на видеопоследовательности, условия освещенности не всегда идеальны. И простейший детектор движения, основанный на разности текущего кадра и некого усредненного фона будет реагировать не только на реальные объекты, но также и на виртуальные: подвижные тени и световые зайчики. Что является нежелательным, так как может приводить искажению формы детектируемых предметов а также к ложным срабатываниям детектора движения. Это актуально в солнечную погоду, а особенно в случае переменной облачности. Потому наличие алгоритма по выделению теней, может весьма положительно сказаться на точности всего детектора. Но давайте рассмотрим все по порядку.
Читать дальше →

Data Mining в онлайн играх

Reading time11 min
Views32K
АионВо всех онлайн сервисах и играх самая большая доля аудитории уходит прямо на старте – в первые же минуты и часы знакомства с продуктом. Этой теме уже посвящены сотни книг и статей с самыми различными гипотезами успеха и причин лояльности аудитории – уникальность, простота, юзабилити, бесплатность, обучение или инструкция, эмоциональность, и еще множество факторов считаются крайне важными.

Мы захотели узнать, почему уходят игроки и можно ли предсказать их уход. Предмет исследования – ММОРПГ Аион, однако наши результаты оказались применимы к широкому кругу игр и онлайн сервисов.
Заглянуть в будущее

Нестандартная аутентификация в проектах на Symfony 2.0

Reading time17 min
Views17K
Цель данной статьи — рассказать об организации нестандартной аутентификации для проектов на базе Symfony 2.0.

Зачем это может понадобится?


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

1С: Предприятие 8.2 в Ubuntu 11.10 с локальным ключом HASP

Reading time3 min
Views44K
upd. vdovin_ds пишет:
недавно вышла 1С 8.3, и у неё есть клиент под linux. Работает лучше чем через wine
Так что возможно содержание статьи устарело.

Передо мной была поставлена задача установить последнюю версию 1С на Ubuntu. К концу первого дня чтения форумов я познал всю сложность бытия. К концу второго — заработало!

Интернет полнится различной информацией по этому поводу, однако большая ее часть нерелевантна: описывается установка серверной части 1С, установка устаревшей версии или версий с сетевым ключом.

Вначале я пытался установить 1С на "чистый" Wine версии 1.3 (в том числе и с USB патчем), однако танцы с бубном вокруг компьютера не привели к положительным результатам, поэтому пришлось перейти на WINE@Etersoft. Собственно, пошаговая инструкция установки под катом.
Читать дальше →

Пишем примитивный и никому не нужный компилятор

Reading time9 min
Views178K
Я считаю, что каждый программист должен написать свой компилятор.

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

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

Пишем одностраничный клиент на javascript

Reading time5 min
Views48K
Данная статья является вольным переводом. Оригинал тут.

Введение


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

Предлагаю ознакомиться с решением на базе backbone.js, underscore.js и jQuery, которое поможет решить эту проблему.

Постановка задачи


Каким бы мы хотели видеть наше приложение? Вот основные моменты, которые мне кажутся важными:
  1. Должен быть удобный способ описать модели нашей предметной области.
  2. Любые изменения в модели должны немедленно отражаться в пользовательском интерфейсе, если модель в нем представлена каким-либо образом.
  3. Понятная и легко-поддерживаемая структуризация кода в стиле MVC.


Попробуем решить эти задачи на примере простого приложения «Каталог фильмов».
Поехали!

Малоизвестные особенности Java. Вторая часть

Reading time3 min
Views59K
Как и обещал, предлагаю вашему вниманию следующие пять пунктов.

Малоизвестные особенности Java. Первая часть

6. Конфликт имён.

Если импортированы несколько классов с одним и тем же именем из разных пакетов, возникает конфликт имён. В таком случае при обращении к классу следует указывать его квалифицированное имя, то есть полное имя, включая и имя пакета, например java.lang.String.

Неужели ничего нельзя с этим поделать? Оказывается можно. Следующий код скомпилируется без проблем, несмотря на то, что класс List присутствует и в пакете java.awt, и в пакете java.util:

import java.awt.*;
import java.util.*;
import java.util.List;

public class Класс {
	public static void main(String... аргументы) {
		List простоСписок = Collections.emptyList();
		System.out.println(простоСписок);
	}
}


Достаточно дополнительно импортировать необходимый класс, java.util.List в данном примере.

Тут, как вы заметили, используются кириллические идентификаторы. Да! Для кого-то это станет откровением, но Java… такая Java. Идентификатор может состоять из совершенно любых букв, помимо цифр, знаков подчёркивания и валюты США (однако последний знак ($) использовать не рекомендуется, он предназначен для системных нужд). Но оно нам надо? Разве только в целях обфускации. Только представьте себе, сколько разных идентификаторов можно сгенерировать всего-то из символов «А» английского, русского и греческого алфавитов…

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

Алгоритм сортировки Timsort

Reading time6 min
Views162K
Timsort, в отличии от всяких там «пузырьков» и «вставок», штука относительно новая — изобретен был в 2002 году Тимом Петерсом (в честь него и назван). С тех пор он уже стал стандартным алгоритмом сортировки в Python, OpenJDK 7 и Android JDK 1.5. А чтобы понять почему — достаточно взглянуть на вот эту табличку из Википедии.



Среди, на первый взгляд, огромного выбора в таблице есть всего 7 адекватных алгоритмов (со сложностью O(n logn) в среднем и худшем случае), среди которых только 2 могут похвастаться стабильностью и сложностью O(n) в лучшем случае. Один из этих двух — это давно и хорошо всем известная «Сортировка с помощью двоичного дерева». А вот второй как-раз таки Timsort.

Алгоритм построен на той идее, что в реальном мире сортируемый массив данных часто содержат в себе упорядоченные (не важно, по возрастанию или по убыванию) подмассивы. Это и вправду часто так. На таких данных Timsort рвёт в клочья все остальные алгоритмы.
Читать дальше →

Категория Hask

Reading time7 min
Views16K

Вступление


В этой небольшой статье я расскажу о теории категорий в контексте системы типов языка Haskell. Никакой зауми, никаких уловок – постараюсь объяснять всё наглядно. Я хочу показать тесную связь языка программирования с математикой, чтобы спровоцировать у читателя осознание одного, через другое и наоборот.

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

Эта статья во многом повторяет (в том числе заимствует иллюстрации) раздел из английской Haskell Wikibook, но тем не менее не является непосредственным переводом.

Что такое категория?



Примеры


Для наглядности рассмотрим сначала пару картинок изображающих простые категории. На них есть красные кружочки и стрелки:

Красные кружочки изображают «объекты», а стрелки – «морфизмы».

Я хочу привести один наглядный пример из реальной жизни, который даст какое-то интуитивное представление о природе объектов и морфизмов:

Можно считать города «объектами», а перемещения между городами – «морфизмами». Например, можно представить себе карту авиарейсов (как-то не нашёл я удачную картинку) или карту железных дорог – они будут похожи на картинки выше, только сложнее. Следует обратить внимание на два момента, которые кажутся в реальности само собой разумеющимися, но для дальнейшего имеют важное значение:
  • Бывает, что из одного города в другой никак не попасть поездом или самолётом – между этими городами нет морфизмов.
  • Если мы перемещаемся в пределах одного и того же города, то это тоже морфизм – мы как бы путешествуем из города в него же.
  • Если из Санкт-Петербурга есть поезд до Москвы, а из Москвы есть авиарейс в Амстердам, то мы можем купить билет на поезд и билет на самолёт, “скомбинировать” их и таким образом попасть из Санкт-Петербурга в Амстердам – то есть можно на нашей карте нарисовать стрелку от Санкт-Петербурга до Амстердама изображающую этот скомбинированный морфизм.
Надеюсь, с этим примером всё понятно. А теперь немного формализма для чёткости.
Читать дальше →

Реалистичные тени при помощи CSS3 без использования изображений

Reading time7 min
Views143K
Привет, Хабр!

Хочу поделиться замечательным мастер-классом по созданию реалистичных теней для блоков на чистом CSS, найденном на просторах рунета по адресу http://mainview.ru/css/realistichnye-teni-pri-pomoshhi-css3-bez-ispolzovaniya-izobrazhenij. Естественно, для того, чтобы примеры работали как надо, необходим браузер с поддержкой CSS3.

image

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

Малоизвестные особенности Java

Reading time4 min
Views142K
Готовясь к собеседованию, я решил освежить память да и вообще поискать каверзные и малоизвестные нюансы языка Java. Выборку пяти наиболее интересных на мой взгляд моментов я вам и предлагаю.

Вот уже подоспела и вторая часть статьи.


1. Нестатические блоки инициализации.

Всем, я думаю, известно, что в Java существуют статические блоки инициализации (class initializers), код которых выполняется при первой загрузке класса.

class Foo {
	static List<Character> abc;
	static {
		abc = new LinkedList<Character>();
		for (char c = 'A'; c <= 'Z'; ++c) {
			abc.add( c );
		}
	}
}


Но существуют также и нестатические блоки инициализации (instance initializers). Они позволяют проводить инициализацию объектов вне зависимости от того, какой конструктор был вызван или, например, вести журналирование:

class Bar {
	{
		System.out.println("Bar: новый экземпляр");
	}
}


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

Map<String, String> map = new HashMap<String, String>() {{
	put("паук",  "арахнид");
	put("птица", "архозавр");
	put("кит",   "зверь");
}};


Очень даже мощное средство, не находите?

JFrame frame = new JFrame() {{
	add(new JPanel() {{
		add(new JLabel("Хабрахабр?") {{
			setBackground(Color.BLACK);
			setForeground(Color.WHITE);
		}});

		add(new JButton("Торт!") {{
			addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent event) {
					System.out.println("Хабрахабр - торт!");
				}
			});
		}});
	}});
}};


Остальные четыре пункта под катом.
Читать дальше →

Интеграция JavaScript cookies в CURL-запросы

Reading time10 min
Views25K
В этой статье я расскажу об одной необычной проблеме, с которой мне однажды пришлось столкнуться по роду своей деятельности. Внимание: эта статья не для начинающих. Предполагается, что читатель уже имеет опыт веб-программирования и знаком с языком PHP, библиотекой CURL и основами HTTP.

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

Как мы поставили процесс разработки на проекте длиной в 2 года

Reading time4 min
Views15K
Именно столько мы уже делаем геосоциальную сеть Альтергео. Я расскажу, как нам удаётся быть и оставаться достаточно эффективными в разработке, сохраняя бодрый темп всё время.

Основное:
  • Численность команды разработчиков — 7 человек;
  • Длительность спринта — примерно две недели;
  • Стендапы каждый день;
  • Организацонные вещи хранятся в Acunote, google docs и MindMap;
  • Код хранится в SVN, новая фича — новая ветка, над одной фичей трудятся несколько разработчиков;
  • Тестирование — через unit-tests.

Два года — это очень длинный марафон, поэтому каждому важно правильно получать задачи и видеть конкретные результаты их выполнения. Для этого мы ввели систему коротких периодов, различения целей и задач плюс предельной конкретизации последних. Самая короткая ставящаяся задача — 2 минуты, самая длинная — 3 часа.

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

Монитор качества — повышаем удовольствие от разработки

Reading time10 min
Views15K
Коллеги, добрый день!

Сегодня поговорим о причинах, побуждающих создавать и внедрять методики и инструменты обеспечения качества, заглянем в историю проблемы, осветим известные риски и постараемся «устаканить» в сознании выигрышную стратегию обеспечения достаточного качества веб-решения. В заключении я расскажу о новом инструменте в 11 версии платформы Битрикс — «Мониторе качества».
Читать дальше →

Самый простой способ генерации xls в PHP

Reading time2 min
Views59K
Вообще казалось бы вынесенная в заголовок задача не должно быть сложной, да и гугл дает кучу ссылок, в том числе на хабр, однако для того чтобы сделать выгрузку БД с сайта в эксель мне пришлось несколько помучаться.

С модулем Spreadsheet_Excel_Writer я предпочел не связываться, по причине отсутствия необходимых ему модулей php на трех имеющихся у меня в наличии для тестирования серверах, хочется все-таки сделать код перетаскиваемый между серверами легко и просто.
php_write_excel оттолкнул полным отсутствием документации при необходимости сделать работу быстро (хотя в дальнейшем я хочу с этим модулем поразбираться).
Читать дальше →

Плагин на jQuery для вывода рейтинга в виде звезд

Reading time5 min
Views53K
Все началось с того, что я решил изменить рейтинг для заметок на своем блоге.

Основной причиной смены рейтинга послужило то, что рейтинг выводился «целочисленными» звездами, ну максимум можно было вывести и половину звезды. Т. е. если рейтинг для статьи был 4.75, то надо было выводить либо 4.5 звезды либо 5, что меня не очень устраивало.

Поэтому было принято решение написать свой собственный плагин на jQuery для формирования рейтинга в виде звезд.

Основные требования к плагину:
  • Рейтинг должен был выводиться корректно, т. е. если у меня рейтинг был равен 4.78, то и количество закрашенных звезд должно быть соответствующим.
  • Возможность выбора эффекта при наведении курсора мыши на звезду. Это имеется ввиду то, какую оценку пользователь сможет выставлять. т. е. при наведение указателя мыши на звезды они должны были закрашиваться либо целыми звездами, либо по пол звезды, либо в абсолютных значениях следуя за указателем мыши
  • Возможность задания своих звезд
  • Возможность указать URL на который будет отправлен результат голосования
  • Возможность указать количество звезд выводимых в рейтинге
  • Автоматическое склонение результатов голосования. (Например: 1 голос, 2 голоса, 5 голосов)
  • Возможность задать свои существительные для результатов голосования
  • Возможность задавать минимальное значение рейтинга, ниже которого пользователь не сможет проголосовать
  • Возможность выполнить пользовательскую функцию, при клике на звезду


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

Нифига себе сходил за хлебушком, или история одного взлома

Reading time8 min
Views117K
Всё началось с того, что ко мне (как к фрилансеру) обратились за помощью и попросили настроить exim4 так, чтобы почтовая рассылка не попадала в спам. Даже заботливо ссылку прислали на замечательную статью.

Работы на пару часиков включая обновление DNS, но не тут то было. Залогинившись под рутом я включил свой любимый screen по привычке командой screen -x и лицезрел прелюбопытнейшее действо в любимой многими папке /dev/shm. Злоумышленник не удосужился прикрыть сессию screen, либо всё еще работал в ней. И тут начинается квест:

Первое, что я сделал — просмотрел, чем же занимался злоумышленник:

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

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity

Specialization

Chief Technology Officer (CTO)