Pull to refresh
0
0
Vladimir Shulyak @nc00x

User

Send message

Глоток МоКито

Reading time3 min
Views102K
А Вы знаете что такое mock-объект? Нет?

Что же говорит по этому поводу википедия: «В объектно-ориентированном программировании mock-объект имитирует поведение реального объекта заданным образом… ». Казалось бы зачем? Википедия продолжает: «Во время unit-тестирования mock-объекты могут симулировать поведение бизнес-объектов и бизнес-логику, что иногда необходимо из-за сложности реального поведения»

И что же дают mock-библиотеки java-разработчику?

Сделай бочку!

Reading time5 min
Views14K
Почти никто из начинающих продюсеров не избегает соблазна поставить себе дюжину библиотек сэмплов из текущего хит-парада журнала Computer music, а уж мысли вроде «вот сейчас солью себе 20 гигов рефиллов для Ризона – и сразу нарулю мегахит!» мелькали, наверное, у каждого новичка.
Конечно, нет ничего плохого в том, чтобы использовать для написания своих нетленок готовые пресеты и сэмплы – в конце концов, именно для этого они и продаются (мы же все их честно покупаем, да?;).
Однако не стоит забывать, что можно создавать красивые, интересные, а главное – абсолютно уникальные звуки самостоятельно, используя простейшие средства и немного фантазии.
Саунддизайн – занятие не только крайне увлекательное, но и полезное во всех отношениях: вспомните Бенни Бенасси, который много лет был обычным диджеем средней руки, известным разве что в пределах родного Милана, однако стоило ему нарулить свой знаменитый мегазвучище, как он тут же превратился в суперзвезду мирового масштаба.

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

Боремся с неплавной анимацией скрытых элементов

Reading time3 min
Views26K
Работая с jQuery многие рано или поздно сталкиваются с одной особенностью: когда мы хотим показать с анимацией скрытый блок, его появление может быть дерганым. Происходит это не всегда, но довольно часто. К сожалению не все разработчики знают как с этим бороться, а те кто знают, зачастую ленятся. Явный пример дерганного появления блока, можно посмотреть прямо на главной странице jQuery, нажав на кнопку Run Code:

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

Темы дипломов

Reading time4 min
Views87K
В продолжение темы топика Готовимся к выступлению. Доклад, диплом, диссертация. Структура изложения.

В ВолгГТУ, где я являюсь осьмушкой (1/8) старшего преподавателя, как и в большинстве ВУЗов страны, есть практика написания дипломных работ. Все знают, что это такое.

Долгие годы все было вполне традиционно, когда зачастую студент толком не знал, чего от него ждут, а преподаватель думал чем бы занять студента и злился на отсутствие инициативы (бывает и иначе, конечно, но так бывает часто).

Руководитель нашей кафедры (программного обеспечения АС), исключительно здравомыслящий, хотя и немолодой профессор, внедряет выдачу списка тем студенту не просто в виде темы, а развернутым описанием:

1. Тема.
2. Развернутая постановка задачи.
3. Практическая ценность.
4. Новизна (задел на будущее, когда человек станет магистрантом или аспирантом).
5. Примерные темы глав работы.
6. Требования к программному средству.

Может быть, в других ВУЗах так делается давно, но для меня, например, эта практика нова и я встречаю ее с удовольствием. Студентам тоже будет проще; возможные конфликты с руководителем диплома будут разбираться заведующим предметно и содержательно.

Но довольно литдыбра. Основную часть времени я занимаюсь вебом, преподаю этот же предмет в ВУЗе, и поэтому вполне очевидно, что темы моих дипломов тоже связаны с Интернетом.
Читать дальше →

Методы защиты веб-формы без капчи

Reading time3 min
Views62K

О чём речь?


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

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

В этом обзорном посте я бы хотел рассмотреть незаметные для пользователя методы защиты от ботов.

Методы защиты


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

О форме регистрации

Reading time2 min
Views3.1K
Меня всегда раздражали формы регистрации. Особенно, когда тебе до зарезу нужно получить какие-то возможности зарегистрированного пользователя, но только на один раз, к примеру, скачать какую-нибудь софтину или задать вопрос на узкоспециализированном форуме. В большинстве случаев формы регистрации там просто ужасны, хоть и не отличаются сильным разнообразием. Не имея ни малейшего желания заполнять пять-шесть помеченных звездочкой полей, я принужден скрипя зубами два(!) раза вписывать адрес электронной почты, разгадывать капчу и придумывать секретный вопрос. И после всех этих мучений, после того нажатия на заветную кнопку «сабмит», страница полностью перезагружается и радостно сообщает, что капча введена неверно, да и имя пользователя давно занято. И в довершение мучений от меня требуют перейти по ссылке, отправленной на мою почту, для активации аккаунта.
Поэтому у себя я сделал все совсем не так.

Еще раз о делегирование или как правильно использовать свои события

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

Для начала вспомним, что же такое делегирование на следующем примере:

<div id=«container»>
  <a href="" class=«edit»>Edit</a>
  <a href="" class=«delete»>Delete</a>
</div>

<script type=«text/javascript»>
  $('#container').click(function(event) {
    var elem = $(event.target);

    if (elem.hasClass('edit')) {
      console.info('Clicked to edit link');
    }
    else if (elem.hasClass('delete')) {
      console.info('Clicked to delete link');
    }

    return false;
  });
</script>

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

Сервер на стероидах: FreeBSD, nginx, MySQL, PostgreSQL, PHP и многое другое

Reading time16 min
Views40K
Нравится мне эта картинка, у меня, вот никогда такие красивые графики в какти не получались =(

Введение


С момента написания мной предыдущей статьи по оптимизации этой связки прошло довольно много времени. Тот многострадальный Pentium 4 c 512Мб памяти, обслуживающий одновременно до тысячи человек на форуме и до 150,000 пиров на трекере уже давно покоится на какой-нить немецкой, свалке, а клуб сменил уже не один сервер. Всё сказанное в ней всё ещё остаётся актуальным, однако есть вещи которые стоит добавить.
Статья большая, так что будет поделена на логические блоки:

0. Зачем вообще что-то оптимизировать?
  
1. Оптимизация ОС (FreeBSD)
  1.1 Переход на 7.х 
  1.2 Переход на 7.2
  1.3 Переход на amd64
  1.4 Разгрузка сетевой подсистемы
  1.5 FreeBSD и большое кол-во файлов
  1.6 Softupdates, gjournal и mount options
  
2. Оптимизация фронтенда (nginx)
  2.1 Accept Filters
  2.2 Кеширование
  2.3 AIO
  
3. Оптимизация бэкенда
  3.1 APC
  3.1.1 APC locking
  3.1.2 APC hints
  3.1.3 APC fragmentation
  3.2 PHP 5.3
  
4. Оптимизация базы данных
  4.1 MySQL 
  4.1.1 Переход на 5.1
  4.1.2 Переход на InnoDB
  4.1.3 Встроеный кеш MySQL - Query Cache
  4.1.4 Индексы
  
4.2 PostgreSQL
  4.2.1 Индексы
  4.2.2 pgBouncer и другие.
  4.2.3 pgFouine
  
4.3 Разгрузка базы данных
  4.3.1 SphinxQL
  4.3.2 Не-RDBMS хранилище
  4.4 Кодировки
  4.5 Асинхронность
  
Приложение. Мелочи.
  1. SSHGuard или альтернатива.
  2. xtrabackup
  3. Перенос почты на другой хост
  4. Интеграция со сторонним ПО
  5. Мониторинг
  
 6. Минусы оптимизации

Кому что-нибудь из этого списка интересно, жмём сюда...

Data URI [CSS] Sprites 1.5 — уникальный автоматический генератор CSS спрайтов

Reading time2 min
Views2.1K


Тем кто следит за статьями про клиентскую оптимизацию уже известен современный подход к созданию CSS спрайтов на базе data:uri технологии. Указанный подход имеет весомые достоинства:
  • абсолютная минимизация конектов к серверу за изображениями определенных в css — сделать еще меньше уже невозможно.
  • полная 100%-ая автоматизация процесса создания спрайтов независимо от свойств backgroud-position и background-repeat.
  • предзагрузка всех изображений определенных в css, которые необходимы для сайта.

Обновился сервис автогенерации

Книжная полка: Java

Reading time6 min
Views108K
По мотивам «JAVA → Java по-русски. Часть первая: Книги» habrahabr.ru/blogs/java/66568


Добрый день, уважаемые хабровчане!
В предыдущем обзоре Java книг, проведенном пользователем Scala, было рассказано о «практических» книгах, вышедших на рынок в последние три года. Я же хочу рассказать об этих и других книгах с несколько иного ракурса: попытаться выделить ценность информации книг.
Я не любитель читать с монитора, и предпочитаю книги покупать в бумажном варианте. Чтобы сделать осознанный выбор, следует отдавать себе отчет в том, что книга несет некие фундаментальные знания, но никак не сборник «последние фишки». Также в данной статье я хочу упомянуть о других известнейших трудах, не касающихся Java напрямую. Посмотрим, что лучше всего выбрать для обучения языку?
Читать дальше →

Создаем OLAP куб. Часть 1

Reading time3 min
Views165K
OLAP

Продолжая тематику Многомерные кубы, OLAP и MDX и olap для маленькой компании, традиционно, предлагаю начать с простенького «Hello World» куба, который будет анализировать процессы и тенденции голосований на Хабре.

Итак, давайте попробуем создать свою первую OLAP систему.
Но, прежде чем, потирая руки, запускать Business Intelligence Studio, предлагаю вначале создать хранилище данных хабра-голосов, так называемый Data Warehouse.
Зачем? Причин в этом несколько:
  • сама суть Data Warehouse-а хранить «очищенные» данные, готовые для анализа, поэтому даже его изначальная структура может сильно отличаться от структуры нашей хабра-OLTP базы данных
  • в HabraDW (так мы его назовем) мы вынесем только ту информацию, которая нам нужна будет для анализа, ничего лишнего
  • к Data Warehouse не накладываются требования нормализации. Даже наоборот, денормализировав некоторые данные можно добиться более понятной схемы для построения куба, а также скорости загрузки данных в куб
Читать дальше →

Интересный способ защиты от ботов

Reading time1 min
Views14K
Наткнулся тут недавно на одном сайте на способ защиты от ботов без использования каптчи и javascript.
Все очень просто — достаточно добавить скрытое поле с символом кодированным в HTML сущность (например &amp;copy; &amp;#151; и т. д.). Дело в том что браузер найдя такой символ преобразует его перед отправкой в обычный, а робот использующий парсер форм так и отправить закодированным (причем у меня есть свой парсер форм и он сделал бы именно так). При проверки формы достаточно просто посмотреть длину строки в этом поле. Если отправлял человек то она будет равна числу символов в строке, а если нет значительно больше.
Так что такое решение пусть и не обеспечивает серьезной защиты но вполне может применяться в тех случаях если что то более сложное использовать нельзя.

P. S. пример
P. P. S. Оказывается у меня тут в черновиках статья лежит про методы защиты от ботов и их обходы, стоит дописать?

Установка PhotoShop CS4 под Ubuntu 9.04 Jaunty

Reading time4 min
Views5.3K
Уважаемые коллеги, позвольте предложить вам мой первый пост на хабре — перевод публикации по установке Adobe PhotoShop CS4 под Ubuntu 9.04 Jaunty.

Немалое количество пользователей используют Adobe PhotoShop, и, похоже, CS4 работает (под Ubuntu — прим. пер.). Однако установка его нетривиальна, и требует выполнения некоторых действий: Нам потребуется скомпилировать пропатченную сборку Wine 1.1.25, после чего добавить еще связку утилит в систему.
Также не лишним будет напомнить, что вам потребуется легальная (либо триальная :) — прим. пер.) версия Adobe PhotoShop CS4.
Эта инструкция предназначена только для Ubuntu Jaunty (она может сработать и для других сборок, но я в этом сомневаюсь)
Читать дальше →

DNS Tunneling via iodine: сыр действительно бесплатный

Reading time3 min
Views26K
Есть:
— отключенный за неуплату интернет (adsl, lan, etc)
или
— нешифрованная wi-fi сеть c закрытым интернетом, но работающим dns
или
— очень строгий firewall с открытым dns

Хочется:
полноценный интернет, пусть даже очень медленно
Как?

Redis — высокопроизводительное хранилище данных

Reading time2 min
Views102K
Бодрый день, хаброчеловеки!

Что такое Redis?


Redis — это высокопроизводительное нереляционное распределённое хранилище данных. В отличие от Memcached, который может в любой момент удалить ваши данные, вытесняя старые записи новыми, Redis хранит информацию постоянно, таким образом он похож на MemcacheDB.

Чем Redis отличается от существующих решений?


API для работы с Memcached (MemcacheDB) позволяет хранить массивы, но эти массивы будут сериализованы и сохранены как строки, таким образом атомарные операции над такими массивами не возможны.
Redis позволяет хранить как строки, так и массивы, к которым можно применять атомарные операции pop / push, делать выборки из таких массивов, выполнять сортировку элементов, получать объединения и пересечения массивов.

Производительность


110000 запросов SET в секунду, 81000 запросов GET в секунду на Linux-сервере начального уровня (тесты).

Высокая скорость работы Redis обеспечивается тем, что данные хранятся в оперативной памяти и сохраняются на диск либо через равные промежутки времени, либо при превышении определённого количества не сохранённых запросов. Из этого вытекает, что используя Redis, вы можете потерять результаты нескольких последних запросов, что вполне приемлимо для большинства веб-приложений, учитывая, что обращение к Redis по скорости сравнимо с обращением к оперативной памяти. Тем не менее, потерь можно избежать через избыточность — Redis поддерживает неблокирующую master-slave репликацию.

Sharding


Redis, как и Memcached, может работать как распределённое хранилище на многих физических серверах. Такой функционал реализуется в клиентских библиотеках, и к сожалению, «из коробки» этот функционал реализован пока только в Ruby API, однако это не мешает вам хешировать ключ самостоятельно и получать ID сервера, к которому с этим ключом обращаться.

API


API доступно для следующих языков:
  • Ruby
  • Python
  • PHP
  • Erlang
  • Tcl
  • Perl
  • Lua
  • Java


API для PHP доступно как в виде модуля, написанного на C, так и в виде PHP5 класса, который общается с Redis-сервером через сокеты, таким образом не требуется устанавливать модуль.
Кроме того существует PHP5 класс от отечественного разрабочика (с именем, заслуживающим доверия. Я серьёзно.) — IMemcacheClient. (Спасибо DYPA за наводку)

Перспективы развития


Разработка ведётся очень активно, комиты происходят почти каждый день, сейчас доступна версия Redis 0.900 (1.0 release candidate 1), которая очень скоро станет версией 1.0
В ближайшем будущем авторы обещают внедрить разные интересные фичи, в том числе и сжатие данных.

Лицензия и поддерживаемые платформы


Redis — написан на ANSI C и работает на большинстве POSIX-систем (Linux, MacOS X). Это бесплатное открытое ПО под BSD лицензией =)

Up: Rediska — удобный PHP-клиент для key-value базы Redis. Оф.сайт.

История двух нитей

Reading time3 min
Views2.6K
На собеседовании в ИТ-компании было предложено ответить на следующий вопрос.

Задача. Дано такой код:

		static int counter = 0;

		void worker()
		{
			for (int i = 1; i <= 10; i++)
				counter++;
		}


Процедуру worker() запускают из двух нитей. Какое значение будет содержать переменная counter по завершении работы обеих нитей и почему?

Немного теории. Нити — это параллельно-исполняемые задачи в пределах одного процесса. Основное различие между процессами и нитями такое, что все нити одного процесса работают в общем адресном пространстве своего процесса.

Я не называю нити потоками, что бы не путать потоки выполнения (thread) и потоки данных (stream).

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

Создание GWT приложения с GWT-Ext контролами, работающего на JBoss, с помощью NetBeans. Step By Step

Reading time3 min
Views6.6K
Решил поделиться с широкой общественностью каким образом можно создать полноценное GWT приложение с помощью NetBeans, а так же каким образом развернуть его на сервере приложений JBoss. К сожалению в сети я не нашел полного описания этого процесса(есть статьи отдельно GWT, отдельно про GWT-EXT и отдельно про JBoss), поэтому и решил собрать всё в одну кучу. Надеюсь кому-то этот гайд пригодится и послужит отправной точкой. Итак приступим.

Осторожно! Много больших скриншотов
Читать дальше →

Собеседуем руководителя проектов

Reading time6 min
Views69K
Сразу хотелось бы определиться с некоторыми понятиям, дабы никого не провоцировать на полемику из-за недопонимания ключевых моментов. Так же хочу предупредить, что это не руководство к действию и не пособие, а всего лишь рассказ в стиле «как это делают другие».

Для меня руководитель проекта (проектов) – это человек, прежде всего имеющий глубокое понимание предметной области, в нашем случае интернет разработки, имеющий опыт самостоятельной разработки, находящийся в курсе технологических и бизнес тенденций на рынке. Равноценно вышеупомянутым качествам – умение общаться и находить общий язык с совершенно разного типа людьми. Знания РП должны лежать не только в плоскости разработки, но так же и в прототипировании интерфейсов, и в дизайне, и в интернет-маркетинге.
Читать дальше →

Information

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