Обновить
15
0
Алексей@Toseter

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

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

java.util.concurrent. Часть первая: Зачем и почему?

Время на прочтение4 мин
Охват и читатели29K
Часть первая, в которой множеством слов раскрывается смысл существования этого API
Эта статья, хоть и не является прямым переводом, основана на статье Брайана Гетца Concurrency in JDK 5.0

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

Где спряталась логика?

Время на прочтение4 мин
Охват и читатели4.5K

Вопрос


Очень часто при обсуждении программ употребляется термин «логика» или «бизнес-логика».
Например:
  • (о юнит-тестах) не обязательно добиваться стопроцентного покрытия кода тестами, достаточно тестировать лишь логику.
  • (о веб-приложениях) контроллер не должен содержать никакой бизнес-логики, а должен только вызывать методы других классов
  • В слое VIEW (то есть в JSP-файлах) не должно быть бизнес-логики


Так вот, кто скажет мне, что такое «логика»? Надо ли понимать под этим любой IF в коде? Но разве бывает код без IF'ов? Или (бизнес-)«логика» означает любую информацию, которая исходит от клиента? Но разве можем мы на деньги клиента делать что-то, чего он не заказывал? Не можем. Стало быть, весь наш код — это целиком «бизнес-логика» от клиента. Вот поэтому я никогда не мог понять, что же такое эта чёртова логика.

Ответ:

История одной оптимизации

Время на прочтение5 мин
Охват и читатели19K


Аннотация


Статья раскрывает особенности высокоуровневых оптимизаций вычислительных алгоритмов на Java на примере кубического алгоритма перемножения матриц.

Шаг 0. Установи точку отсчета!


Определимся с окружением:
  • Hardware: 1-socket/2-cores Intel Core 2 Duo T7300 2GHz, 2Gb ram;
  • Java: HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing);

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

JNA: callbacks to Java

Время на прочтение2 мин
Охват и читатели25K
Мне понадобилось подключить наш проект на Яве к старой библиотеке на C. Одной из проблем было, что эта библиотека требует регистрации колбеков (callbacks), которые вызывает по ходу работы, и которые, я хотел бы имплементировать на стороне Явы.

JNI позволяет это всё делать, но муторно. Есть прекрасная библиотека JNA как замена JNI я хотел воспользоваться ей.
К сожалению сайт JNA сейчас пуст — они переезжают с сервера на сервер, статьи по JNA не показывают пример callbacks, поэтому пришлось повозиться немного, чтобы сделать работающий пример.

Этот пример и хочу показать — может кому то приходится.

Начинаем со стороны C:

my.h
typedef  void (*callback)(char *, char*);

int myfunc(char *);

void registerCallback(callback myc);


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

Сериализация в Java

Время на прочтение7 мин
Охват и читатели379K
Сериализация это процесс сохранения состояния объекта в последовательность байт; десериализация это процесс восстановления объекта, из этих байт. Java Serialization API предоставляет стандартный механизм для создания сериализуемых объектов. В этой статье вы увидите как сериализовать объект, и почему сериализация иногда необходима. Вы узнаете об алгоритме сериализации используемом в Java и увидите пример, который иллюстрирует сериализованый формат объекта. В конце у вас должно сложиться чёткое представление о том, как работает алгоритм сериализации, а так же каким образом представлены части объекта в сериализованном виде.
Читать дальше →

12 навыков создания защищенных веб-приложений

Время на прочтение8 мин
Охват и читатели22K
Данная статья не содержит никаких откровений. В первую очередь информация о типовых уязвимостях и методах их решения будет полезна начинающим. Опытные разработчики все это знают, или должны знать, если считают себя таковыми.

Большинство примеров кода не привязаны к какому-либо конкретному языку программирования, но для наглядности я буду использовать PHP.

Итак, поехали.

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

Пишем первое приложение для Android

Время на прочтение8 мин
Охват и читатели571K
В любом деле самое сложное — это начало. Часто бывает тяжело войти в контекст, с чем столкнулся и я, решив разработать свое первое Android-приложение. Настоящая статья для тех, кто хочет начать, но не знает с чего.

Статья затронет весь цикл разработки приложения. Вместе мы напишем простенькую игру “Крестики-Нолики” с одним экраном (в ОС Android это называется Activity).

Отсутствие опыта разработки на языке Java не должно стать препятствием в освоении Android. Так, в примерах не будут использоваться специфичные для Java конструкции (или они будет минимизированы на столько, на сколько это возможно). Если Вы пишете, например, на PHP и знакомы с основополагающими принципами в разработке ПО, эта статья будет вам наиболее полезна. В свою очередь так как, я не являюсь экспертом по разработке на Java, можно предположить, что исходный код не претендует на лейбл “лучшие практики разработки на Java”.

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

Неортогональная БИНС для малых БПЛА

Время на прочтение7 мин
Охват и читатели35K
БИНС
По правилам сокращений в заголовке не должно быть, но расписав сокращения я превратил бы заголовок в аннотацию. Так что вот…
  • БИНС — бесплатформенная инерциальная навигационная система
  • БПЛА — беспилотный летательный аппарат
  • ОЧ — ось чувствительности датчика

Речь в статье пойдет о навигационной системе, в которой ОЧ датчиков ориентированы неортогонально, т.е. расположены под некоторым, ненулевым, углом к осям системы координат, связанной с БПЛА. Особенность таких БИНС в том, что по информации от каждого из датчиков можно получить значения всех трех компонент угловой скорости (для гироскопов) и линейного ускорения (для линейных акселерометров) объекта.
Статья написана как дополнение к Строим мультикоптер, часть вторая. Целью является описание одного из способов борьбы с дрейфом нуля в дешевых датчиках.
Для чего нужна избыточность читать тут...

Ищем быстро, еще быстрее

Время на прочтение3 мин
Охват и читатели23K
Натолкнулся в разделе QA на интересный вопрос. Ответ на него заставил написать эту статью как бОлее полный ответ на вопрос «как организовать поиск по множеству параметров, как в Яндекс-маркете, например».

Я знаю, что на Хабре, да и вообще есть много сторонников noSQL решений (сам не без греха), но все же я сторонник сначала подумать, а уже потом выбирать решение.

Итак, что имеем в «ДАНО»
  • Имеем 120 чекбоксов — вариант 1/0
  • Имеем 30 «радио» с выбором «да/нет/не важно»
  • Имеем 2-3 слайдера для указания диапазона цен/размера чего нить
  • Имеем самое главное: 12 млн записей в БД.
  • Имеем Select * From tovar Where (wifi=true) and (led=false) and (type=3) and ….остальные параметры …; со временем выполнения близкому к истерике клиента.

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

TOP'ай сюда

Время на прочтение5 мин
Охват и читатели191K
Обзор практически всех *top утилит под linux (atop, iotop, htop, foobartop и т.д.).

top

Все мы знаем top — самую простую и самую распространённую утилиту из этого списка. Показывает примерно то же, что утилита vmstat, плюс рейтинг процессов по потреблению памяти или процессора. Совсем ничего не знает про загрузку сети или дисков. Позволяет минимальный набор операций с процессом: renice, kill (в смысле отправки сигнала, убийство — частный случай). По имени top суффикс "-top" получили и все остальные подобные утилиты в этом обзоре.

atop


Atop имеет два режима работы — сбор статистики и наблюдение за системой в реальном времени. В режиме сбора статистики atop запускается как демон и раз в N времени (обычно 10 мин) скидывает состояние в двоичный журнал. Потом по этому журналу atop'ом же (ключ -r и имя лог-файла) можно бегать вперёд-назад кнопками T и t, наблюдая показания atop'а с усреднением за 10 минут в любой интересный момент времени.

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

Незаменимое средство для поиска источников лагов на сервере, так как сохраняет не только статистику загрузки системы, но и показатели каждого процесса — то есть «долистав» до нужного момента времени можно увидеть, кто этот счастливый момент с LA > 30 создал. И что именно было причиной — IO программ, своп (нехватка памяти), процесор или что-то ещё. Помимо большего количества информации ещё способен двумя цветами подсказывать, какие параметры выходят за разумные пределы.
Читать дальше →

8 полезных сервисов для веб-разработчика и дизайнера

Время на прочтение2 мин
Охват и читатели37K
Под катом — описание восьми сервисов, которые могут заметно облегчить жизнь веб-разработчика, верстальщика или дизайнера.
Читать дальше →

Java Logging: история кошмара

Время на прочтение13 мин
Охват и читатели135K

Вступление


Тернист и извилист путь Java-платформы к правильному способу записи строчек в лог-файлы. История logging в Java довольно познавательна в плане изучения особенностей Open Source, в том числе его взаимодействия с корпорациями и единичными программистами. Я собираюсь рассказать столько, сколько возможно, об истории развития Java logging, а также о том, к чему все пришло и как жить дальше.
Вперед и с песней!

Новый пуленепробиваемый синтаксис @font-face

Время на прочтение3 мин
Охват и читатели71K
С самого начала «вебошрифтовой революции» мы полагались на неизящные хаки деклараций @font-face, чтобы шрифты из Паутины загружались во всех браузерах. Может ли существовать лучший путь? Вполне изящный и совместимый с будущими браузерами?

Вкратце об истории вопроса


В сентябре 2009 года Пол Айриш (Paul Irish) огласил пуленепробиваемый синтаксис для записи деклараций @font-face. Синтаксис был компактным и в то время действовал во всех браузерах. Недавно стали поступать, со временем усиливаясь, жалобы на отказ шрифтов загружаться в Android — поэтому мы стали вместо того рекомендовать синтаксис «Mo' Bulletproofer», сочинённый Ричардом Финком (Richard Fink). К сожалению, синтаксису «Mo' Bulletproofer» требуется двойная запись деклараций, так что поддержка его сложнее.

Синтаксис Fontspring @Font-Face


А вот таким этому коду следовало бы быть с самого начала. Чистым, ясным и простым:
@font-face {
	font-family: 'MyFontFamily';
	src: url('myfont-webfont.eot?') format('eot'), 
	     url('myfont-webfont.woff') format('woff'), 
	     url('myfont-webfont.ttf')  format('truetype'),
	     url('myfont-webfont.svg#svgFontName') format('svg');
	}

Что? Я не понял.


Хак Трюк, заставляющий этот код заработать — символ «?» вслед за именем файла EOT. Без шуток.

Как это срабатывает


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

jPlayer — плагин для проигрывания аудио и видео

Время на прочтение2 мин
Охват и читатели58K
imageЯ уже писал про скрипт audio.js, позволяющий проигрывать аудио файлы использую возможности html5 и flash. Пост был встречен хорошо, поэтому сейчас я хочу рассказать про jPlayer — jQuery плагин для проигрывания аудио и видео.
Читать дальше →

Эмуляция старых (и не только) консолей в GNU/Linux

Время на прочтение3 мин
Охват и читатели27K
image
Еще в детстве у меня была мечта иметь кучу катриджей к своим Sega и Dendy, чтобы переиграть во все игры. Теперь возможно не только это. К сожалению, многие консоли так и не попали на территорию России. Под катом находятся описания эмуляторов Dendy, Sega, SNes, Mame и ссылки на эмуляторы остальных более-менее известных консолей.

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

Amazon наступает: Amazon Elastic Beanstalk

Время на прочтение3 мин
Охват и читатели13K
Долгое время многие сравнивали Amazon AWS и Google Apps Engine как облачные решение — хотя сравнения были не совсем корректны — так как все-таки это решения разных «весовых категорий». Если Амазон предлагал Infrastructure as a Service (IaaS), то GAE это чистой воды Platform as a Service.
И вот Amazon перешел в наступление — сегодня анонсирован Amazon Elastic Beanstalk.
image
Читать дальше →

Вопросы по продвижению приложений для Android

Время на прочтение5 мин
Охват и читатели9.9K
Недавно мой знакомый попросил меня ответить на несколько вопросов по продвижению приложений для Android. Мы договорлись, что я напишу пост. За последний год у меня сложилось определенное впечатление о работе на рынке Android Market. С удовольствием поделюсь своим мнением. Надеюсь, что мой опыт будет полезен разработчикам. Буду рад, если пост породит конструктивную дискуссию.
Читать дальше →

Рекомендации к стилю кода

Время на прочтение9 мин
Охват и читатели178K

Правила языка Java


Мы следуем стандартным соглашениям по оформлению кода на Java. Мы добавили к ним некоторые правила:
  1. Исключения: никогда не перехватывайте и не игнорируйте их без объяснения.
  2. Исключения: не используйте обобщенные исключения, кроме кода в библиотеках, в корне стека.
  3. Финализаторы: не используйте их.
  4. Импорты: полностью уточняйте импорты.

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

Хакер продемонстрировал «облачный» софт для взлома WiFi-сетей на конференции Black Hat

Время на прочтение2 мин
Охват и читатели23K
Похоже на то, что Amazon Web Services (AWS) в умелых руках может стать очень мощным средством для взлома самых защищенных беспроводных сетей. В принципе, это и так понятно, но на днях эксперт по сетевой безопасности по имени Томас Рот на конференции Black Hat представил широкой общественности созданное им программное обеспечение, «заточенное» под Amazon Web Services и предназначенное для взлома защищенных WiFi-сетей. К слову, защищенная WiFi сеть WPA-PSK соседней с компанией Тома организации была им взломана за 20 минут.

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

Настройка PPPoE с шейпингом трафика для небольшой сети

Время на прочтение19 мин
Охват и читатели43K
Однажды возникла задача настроить раздачу интернета на пару десятков компьютеров (офисные и домашние). Коробочные решения оказались либо платными, либо достаточно сложно настраиваемыми, поэтому было принято решение использовать собственное на базе Debian Linux. Опытом его поднятия я хочу поделиться с вами в этом посте, но приведенные здесь версии могли немного устареть с момента написания мануала «для себя», так что нужно проявить некоторую внимательность. Также, нужно учитывать, что приведенное решение далеко от идеального и профессионального. Оно поможет скорее тем, кому нужно быстро поднять у себя сервер, раздающий интернет. В конце у нас будет раздача интернета через PPPoE с назначением внутренних IP клиентам, шейпинг трафика, DNS сервер и простой мониторинг текущих сессий из консоли.
Читать дальше →

Информация

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