26 июля к нам обратился Pas с пренеприятнейшим известием: Хабр снова атакуют. Мы, естественно, посоветовали переключаться на нас.
User
6 причин, по которым нужно стартовать с бирж
2 min
2.7KНекоторое время назад, прогуливаясь на просторах интернета, уж простите, но не помню где, я нашел статью. В статье рассказывалось о том, что регистрация и ведение профиля на фриланс биржах — это, по сути, обезличивание исполнителя, и если хотите хорошо — делайте и продвигайте свой сайт. Ниже я бы хотел привести несколько доводов за то, чтобы по крайней мере стартовать на биржах фриланса.
+19
Поиск по торрентам в DHT-сети
4 min
158KМало найдётся людей среди пользователей и читателей Хабра, которым не доводилось бы пользоваться торрентами. И наверняка многие понимают уязвимость центральных звеньев этой системы — торрент-трекеров (истории с Пиратской бухтой и бывшим torrents.ru, ныне рутрекером, — тому подтверждение).
Однако не все знают, что уже давно существует альтернатива традиционным трекерам — DHT-сеть, позволяющая организовывать раздачи без трекера. До сих пор она не получила большого распространения из-за невозможности поиска внутри сети — нужный файл можно было скачать только при наличии magnet-линка раздачи. Однако недавно появился первый и уникальный пока поисковый сервис по DHT-сети BTDigg.org.
Сервис с весьма лаконичным дизайном заточен под одну функцию — поиск:

Чтобы снизить зависимость от трекеров, в 2007 году разработчиками протокола bittorrent была принята его модификация на основе DHT-структуры, которая позволяла делать раздачи без трекера.
Что такое DHT-сеть? Фактически, это распределённая сеть торрент-клиентов, которая хранит идентификаторы (хеши) всех публичных раздач — т.н. magnet-link, которые представляют собой 160-битное случайное число. DHT-узлы клиентов отвечают за анонсирование своих торрентов и за поиск запрашиваемых. Благодаря тому, что все современные клиенты поддерживают DHT, можно сказать, что в этой сети есть практические все публичные торренты (приватные торренты сеть «не видит» и не позволяет скачивать). Практически — потому что DHT в клиенте может быть отключен. Поиск идёт по мета-информации, которую содержит в себе торрент-файл — то есть, проще говоря, он ищет по названию торрента и по названиям файлов входящих в него. Пользователь открывает magnet-линк в своём торрент-клиенте, тот находит всех раздающих файл и дальше качает как обычно — участия трекера в этой цепочке нет.
Однако не все знают, что уже давно существует альтернатива традиционным трекерам — DHT-сеть, позволяющая организовывать раздачи без трекера. До сих пор она не получила большого распространения из-за невозможности поиска внутри сети — нужный файл можно было скачать только при наличии magnet-линка раздачи. Однако недавно появился первый и уникальный пока поисковый сервис по DHT-сети BTDigg.org.
Сервис с весьма лаконичным дизайном заточен под одну функцию — поиск:

Поисковик по хэшам торрентов
Чтобы снизить зависимость от трекеров, в 2007 году разработчиками протокола bittorrent была принята его модификация на основе DHT-структуры, которая позволяла делать раздачи без трекера.
Что такое DHT-сеть? Фактически, это распределённая сеть торрент-клиентов, которая хранит идентификаторы (хеши) всех публичных раздач — т.н. magnet-link, которые представляют собой 160-битное случайное число. DHT-узлы клиентов отвечают за анонсирование своих торрентов и за поиск запрашиваемых. Благодаря тому, что все современные клиенты поддерживают DHT, можно сказать, что в этой сети есть практические все публичные торренты (приватные торренты сеть «не видит» и не позволяет скачивать). Практически — потому что DHT в клиенте может быть отключен. Поиск идёт по мета-информации, которую содержит в себе торрент-файл — то есть, проще говоря, он ищет по названию торрента и по названиям файлов входящих в него. Пользователь открывает magnet-линк в своём торрент-клиенте, тот находит всех раздающих файл и дальше качает как обычно — участия трекера в этой цепочке нет.
+101
JavaScript F.A.Q: Часть 2
14 min
76K
Около 2-х месяцев назад я и TheShock собирали вопросы по JavaScript в теме FAQ по JavaScript: задавайте вопросы. Первая часть, те вопросы, которые достались мне, появилась буквально через несколько дней JavaScript F.A.Q: Часть 1, а вот вторая часть все не выходит и не выходит. TheShock сейчас переезжает в другую страну и поэтому ему не до ответов. Он попросил меня ответить на его часть. Итак вторая часть ответов — те вопросы, которые достались тоже мне.
+175
Hibernate Envers: аудирование операций
4 min
38KЗачем это надо?
В enterprise-разработке часто бывает необходимо отслеживать процесс редактирования каких-нибудь таблиц.
Скажем, завели у вас документ в системе. Потом кто-то поменял ему серию. Потом номер. Потом сменил тип с паспорта РФ на загран. паспорт Германии. Хотелось бы иметь возможность отследить историю изменений и, скажем, настучать по шапке пользователю, который совершил ошибку.
+27
Текстовые поля: эргономика и дизайн
4 min
13KTranslation

Заполнение текстовых полей относится к числу важных и деликатных моментов работы с веб-сайтами. Нередки случаи, когда пользователи отказываются регистрироваться на сайте, потому что не понимают, как именно нужно правильно заполнять формы регистрации. Учет эргономических аспектов данного элемента интерфейса поможет сделать сайт более удобным и привлекательным для пользователей.
+23
Тестирование в Java. JUnit
8 min
537KTutorial

Сегодня все большую популярность приобретает test-driven development(TDD), техника разработки ПО, при которой сначала пишется тест на определенный функционал, а затем пишется реализация этого функционала. На практике все, конечно же, не настолько идеально, но в результате код не только написан и протестирован, но тесты как бы неявно задают требования к функционалу, а также показывают пример использования этого функционала.
Итак, техника довольно понятна, но встает вопрос, что использовать для написания этих самых тестов? В этой и других статьях я хотел бы поделиться своим опытом в использовании различных инструментов и техник для тестирования кода в Java.
Ну и начну с, пожалуй, самого известного, а потому и самого используемого фреймворка для тестирования — JUnit. Используется он в двух вариантах JUnit 3 и JUnit 4. Рассмотрю обе версии, так как в старых проектах до сих пор используется 3-я, которая поддерживает Java 1.4.
Я не претендую на автора каких-либо оригинальных идей, и возможно многим все, о чем будет рассказано в статье, знакомо. Но если вам все еще интересно, то добро пожаловать под кат.
+44
+40
Эмулятор компьютера с linux на JavaScript
2 min
46KНикакой серверной части. Только JS: полноценный эмулятор компьютера с линуксом на борту.
bellard.org/jslinux
(внимание, только хром и FF4)
Я долго с ним игрался — это не имитация, линукс ведёт себя как настоящий линукс — компилированные программы работают, ошибки в них вызывают segmentation fault, повреждение корневой файловой системы вызывает бурю возмущения в dmesg и т.д.

dd показывает при работе с памятью более чем приличную производительность — более 40 мб/с (не забываем, что это эмулятор, и что это JS в вашем браузере!).
Я никогда не думал, что мы доживём до подобного.
… А теперь начинается оргия:
* С использованием локального хранилища мы можем организовать диски (каждый key-value соответствует одному сектору).
* С использованием web-socket мы можем создать паравиртуализированный драйвер сети с выходом на железный машрутизатор и получить нормальную сеть.
* С использованием существующих технологий (NUMA, DRBD, corosync) можно организовать вычислительный кластер из браузеров.
(Кстати, показывать консоль в этом случае не обязательно — вы запускаете виртуальную машину у клиента в бэкграунде, виртуальная машина присоединяется к кластеру, начинает считать, по её аварийному завершению — закрытию браузера — кластер автоматически переконфигурируется).
Я это пишу как хохму, но в реальности, если у вас есть линукс и есть — у вас есть все возможности для работы чего угодно. Любые сетевые приложения, любые системы синхронизации и управления.
Никто не мешает создать паравиртуализированный драйвер видео с помощью canvas, у вас есть webGL, для которого можно написать свой вариант cuda и получить довольно мощную акселерацию вычислений…
Ну и финал — запуск хрома внутри эмулируемой виртуальной машины.
Итак, эмуляция дошла до браузеров…
bellard.org/jslinux
(внимание, только хром и FF4)
Я долго с ним игрался — это не имитация, линукс ведёт себя как настоящий линукс — компилированные программы работают, ошибки в них вызывают segmentation fault, повреждение корневой файловой системы вызывает бурю возмущения в dmesg и т.д.

dd показывает при работе с памятью более чем приличную производительность — более 40 мб/с (не забываем, что это эмулятор, и что это JS в вашем браузере!).
Я никогда не думал, что мы доживём до подобного.
… А теперь начинается оргия:
* С использованием локального хранилища мы можем организовать диски (каждый key-value соответствует одному сектору).
* С использованием web-socket мы можем создать паравиртуализированный драйвер сети с выходом на железный машрутизатор и получить нормальную сеть.
* С использованием существующих технологий (NUMA, DRBD, corosync) можно организовать вычислительный кластер из браузеров.
(Кстати, показывать консоль в этом случае не обязательно — вы запускаете виртуальную машину у клиента в бэкграунде, виртуальная машина присоединяется к кластеру, начинает считать, по её аварийному завершению — закрытию браузера — кластер автоматически переконфигурируется).
Я это пишу как хохму, но в реальности, если у вас есть линукс и есть — у вас есть все возможности для работы чего угодно. Любые сетевые приложения, любые системы синхронизации и управления.
Никто не мешает создать паравиртуализированный драйвер видео с помощью canvas, у вас есть webGL, для которого можно написать свой вариант cuda и получить довольно мощную акселерацию вычислений…
Ну и финал — запуск хрома внутри эмулируемой виртуальной машины.
Итак, эмуляция дошла до браузеров…
+304
BackupDay по-русски
2 min
665
Поиск по блогам принёс много неожиданностей… Для кого-то в этом, может быть, bнет ничего неожиданного, но я бы не поверил, что каждый день движется такая лавина душуледенящих записей о постиранных вместе с джинсами флешках, случайно затёртых курсовых, братишках и сестрёнках, которые «наводят порядок» на общем компе посредством Shift+Del, что у меня возник резонный вопрос – а существует ли в природе какой-то специальный ресурс, где люди могли бы узнать популярным языком, как сделать бэкап?
И что б вы думали? Такого обнаружить мне не удалось и тогда я понял энтузиазм наших товарищей с reddit — людям нужен бэкап-мотиватор.
+28
Окулографические исследования: что может рассказать взгляд
8 min
22KTranslation

Разговор об айтрекинге невозможен и без обсуждения важных методологических вопросов. С помощью окулографа можно с высокой точностью представить траекторию движения взгляда, зафиксировать зоны повышенного внимания, но может ли это хоть что-то рассказать о том, как испытуемые интерпретируют видимое? Мысли и чувства пользователей невозможно зафиксировать с помощью приборов; результаты исследований смысловой сферы не могут быть подвергнуты экспериментальной проверке. Можно ли (и если можно, то как) выработать такую стратегию исследования человеческого фактора, в которой учет всех субъективных моментов сочетался бы со строгостью методологии и общезначимость результатов?
Мы надеемся, что в обсуждении статьи примут участие представители самых разных областей знания: программисты, дизайнеры, философы, психологи.
+17
Дайте детям поиграть
3 min
13K
Вот у вас есть ребенок? Дошкольник. От годика до семи. А может даже младше года. Какой он или она? И какие они, современные дети? Продвинутые, хорошо разбирающиеся в новейших игрушках, способные дать фору в этом вопросе многим взрослым. Что является их любимым развлечением? Мобильные телефоны, компьютеры, консоли. Ведь и ваш, наверняка, не выпустит из маленьких ручонок iPad, если ему его дать. Главное, чтобы в стенку им ради развлечения не кидался :)
Теперь посмотрим с другой стороны. В психологии существует такое понятие как «ведущий вид деятельности». Это та деятельность, в ходе которой развивается психика ребенка на том или ином этапе своего формирования. Как не трудно догадаться, для детей дошкольного возраста — это, безусловно, игра. Свободно развивающаяся деятельность, предпринимаемая ради удовольствия от самого процесса, а не от результата.
Как сделать, чтобы в процессе игры, не ради обучения, а ради удовольствия (не забываем, что именно это, в первую очередь, мотивирует маленького ребенка играть в конкретную игру), наши малыши получали полезную информацию?
Мы нашли ответ на этот вопрос, наверняка волнующий всех современных родителей, и создали красочное обучающее приложение, разработанное под iPhone и iPad специально для малышей, которые только начинают знакомиться с алфавитом. Букварио — это электронная интерактивная азбука.
+50
+20
Улучшаем интерфейс Java-приложения
27 min
100KTutorial

Достаточно много различной раздробленной информации существует на тему работы со Swing и графикой в просторах интернета, а также на тему интерфейсов Java-приложений. Кто-то твердит о том, что Java морально устарела и десктоп-приложения на Java не имеет смысла писать, кто-то с пеной у рта доказывает обратное. В то же время работа идет, приложения пишутся и встают очередные проблемы. В предыдущей статье я уже привел небольшой список полезных библиотек для исключительных случаев, но нередко бывает так, что никакая сторонняя библиотека не позволяет сделать то, что Вам нужно. Именно в такой момент стоит задуматься о возможной необходимости написания своих компонентов.
Итак, в данном посте я постарался изложить самые важные и значимые на мой взгляд моменты по работе со Swing и графикой — как создавать компоненты, как стилизовать интерфейс, чего делать не стоит и многое другое…
+108
Расширяем возможности Java-приложения
11 min
19KЗдраствуй, Хабражитель!
Вот уже несколько лет проработав над разными десктопными Java-приложениями и в очередной раз копаясь в своих залежах полезных библиотек я понял, что настал момент немного структурировать всю накопившуюся коллекцию и выкинуть лишнее. Заодно, захотелось выделить из нее наиболее редкие экземпляры и дописать небольшие пояснения к ним (что, где и как работает), чтобы при необходимости быстро и легко использовать нужную часть. Собственно информацией о некоторых особо выделяющихся библиотеках из коллекции мне и захотелось поделиться с Вами — вдруг кому-то это окажется интересным или даже полезным.
Итак, сегодня я приведу здесь библиотеки, которые могут Вам помочь решить часто возникающие вопросы вроде «Как сделать это на Java?» по разным узким направлениям разработки.
Сразу скажу, что большая часть приведенных в статье библиотек использует нативные средства, для реализации того или иного функционала. Но это совсем не значит, что от них сразу нужно отказаться. Впрочем, не буду разводить холивар и сразу перейду непосредственно к теме...
Вот уже несколько лет проработав над разными десктопными Java-приложениями и в очередной раз копаясь в своих залежах полезных библиотек я понял, что настал момент немного структурировать всю накопившуюся коллекцию и выкинуть лишнее. Заодно, захотелось выделить из нее наиболее редкие экземпляры и дописать небольшие пояснения к ним (что, где и как работает), чтобы при необходимости быстро и легко использовать нужную часть. Собственно информацией о некоторых особо выделяющихся библиотеках из коллекции мне и захотелось поделиться с Вами — вдруг кому-то это окажется интересным или даже полезным.
Итак, сегодня я приведу здесь библиотеки, которые могут Вам помочь решить часто возникающие вопросы вроде «Как сделать это на Java?» по разным узким направлениям разработки.
Сразу скажу, что большая часть приведенных в статье библиотек использует нативные средства, для реализации того или иного функционала. Но это совсем не значит, что от них сразу нужно отказаться. Впрочем, не буду разводить холивар и сразу перейду непосредственно к теме...
+68
Особенности зарубежной типографики
5 min
18KНесколько месяцев назад я столкнулся с задачей верстки буклета на французском языке. Оказалось, что в рунете тема зарубежной типографики представлена крайне скупо, поэтому необходимую информацию пришлось находить и переводить самостоятельно.
В данной статье я хотел бы рассказать о наиболее примечательных, на мой взгляд, европейских типографических традициях, их сходствах и различиях.

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

+103
Новый синхронизатор Phaser
5 min
58KTutorial
Phaser (Этапщик) — мощная и гибкая реализация паттерна синхронизации Барьер. Включен в JDK 7 в составе пакета java.util.concurrent.
Поскольку в документации, как говорится, без ста грамм не разберешься, опишу тут принцип действия, неочевидные моменты и приведу несколько примеров использования.
Поскольку в документации, как говорится, без ста грамм не разберешься, опишу тут принцип действия, неочевидные моменты и приведу несколько примеров использования.
+36
Google App Engine (GAE) против Amazon Web Services (AWS)
7 min
11KTranslation

Вступление:
Наиболее интересная часть разработки обычно приходится на первые 33% жизненного цикла проекта. А самое интересное — это создание чернового прототипа, демонстрирующего вашу идею. После этого момента возбуждение начинает постепенно снижаться по мере того, как вы начинаете высматривать, что бы подштопать, и стараетесь сделать ваше приложение достаточно масштабируемым, чтобы оно могло выдержать свою успешность. В настоящее время я — актёр-одиночка, так что с одной стороны у меня нет ресурсов, чтобы самому возиться с железом, а с другой — у моих проектов нет потребности в дата-центрах.
Цель моего анализа — сравнить двух основных игроков в мире облачных вычислений, Google App Engine (GAE) и Amazon Web Services (AWS). Оба неслабо разогнались за последние годы, но кто из них больше мне подойдёт? Давайте разбираться.
+58
Опубликован закрытый ключ AirPort Express
2 min
5.8KАмериканский разработчик Джеймс Лейрд (James Laird), помогая своей девушке наладить связь между точкой доступа и базовой станцией AirPort Express, не нашёл другого выхода, как разобрать AirPort Express, считать ROM и провести обратный инжиниринг программы, после чего он смог извлечь закрытый ключ. Этот ключ используется для декодирования пакетов по закрытому протоколу Apple AirPlay (RAOP).
Наладив девушке систему, хакер поделился с общественностью своим открытием. Фактически, теперь можно сделать эмулятор AirPort Express на чём угодно.
Наладив девушке систему, хакер поделился с общественностью своим открытием. Фактически, теперь можно сделать эмулятор AirPort Express на чём угодно.
+82
Сборка проекта без единой глобальной переменной
6 min
4KПредставьте, у вас есть проект, состоящий из нескольких модулей и, например, jQuery или любая другая библиотеки в CDN. У вас есть огромное желание не показывать пользователю ваши глобальные переменные и по возможности не показывать jQuery и $. Ну и, конечно, сделать все без изменения кода проекта.
Причины для сокрытия глобалов могут быть разные: для красоты, из соображений безопасности, для затруднения анализа кода и другие. Пользователь взаимодействует с вашим кодом, используя события, которые он не сможет сломать — больше ему ничего и не нужно.
Самый очевидный способ — создать единственный namespace в который пассивно экспортировать прочие объекты, а jQuery и $ в конце удалить.
После сборки код будет какой-то такой:
Это идеальный вариант, но чаще бывает не так. Посмотрите ваш код, такой ли он?
Под катом универсальное решение, позволяющее собрать любой код без единой глобальной переменной.
Причины для сокрытия глобалов могут быть разные: для красоты, из соображений безопасности, для затруднения анализа кода и другие. Пользователь взаимодействует с вашим кодом, используя события, которые он не сможет сломать — больше ему ничего и не нужно.
Самый очевидный способ — создать единственный namespace в который пассивно экспортировать прочие объекты, а jQuery и $ в конце удалить.
После сборки код будет какой-то такой:
(function(window, undefined){
// include ./js/YourNamespace.js
var YourNamespace = (function () {
// что-то ещё
return {};
}());
// include ./js/YourNamespace/SomeObject.js
YourNamespace.SomeObject = (function () {
// что-то ещё
return function () {
};
}());
// Cleanup
delete window.$;
delete window.jQuery;
}(window));
Это идеальный вариант, но чаще бывает не так. Посмотрите ваш код, такой ли он?
Под катом универсальное решение, позволяющее собрать любой код без единой глобальной переменной.
+42
Information
- Rating
- Does not participate
- Registered
- Activity