Мне было интересно, какие коллекции сколько съедают дополнительной памяти при хранении объектов. Я провёл замеры накладных расходов для популярных коллекций, предполагающих хранение однотипных элементов (то есть списки и множества) и свёл результаты на общий график. Вот картинка для 64-битной Hotspot JVM (Java 1.6):

Читать полностью »
Рубрика «Программирование» - 1027
Ликбез по типизации в языках программирования
2012-12-03 в 16:46, admin, рубрики: Программирование, типизация, языки программирования, метки: Программирование, типизация, языки программирования 
Эта статья содержит необходимый минимум тех вещей, которые просто необходимо знать о типизации, чтобы не называть динамическую типизацию злом, Lisp — бестиповым языком, а C — языком со строгой типизацией.
В полной версии находится подробное описание всех видов типизации, приправленное примерами кода, ссылками на популярные языки программирования и показательными картинками.
Читать полностью »
Простейшая триангуляция на Java
2012-12-03 в 16:16, admin, рубрики: java, Алгоритмы, Программирование, триангуляция, метки: c++, java, Алгоритмы, Программирование, триангуляция Все доброго времени суток!
Хочу рассказать об одной интересной проблеме и ее решении, которое я применил в одном из своих проектов.
Суть проблемы такова:
Есть несколько детекторов сигнала (допустим, базовые станции GSM). И эти детекторы присылают на сервер уровень сигнала для некоего источника. Необходимо вычислить и отобразить на карте координаты источника
Если вам интересно, как это сделать, добро пожаловать под кат.
Читать полностью »
Книги, которые должен прочитать Java программист: от новичка до профессионала
2012-12-03 в 12:55, admin, рубрики: java, junior, middle, век учись - дураком помрешь, вечный студент, образование, переводы, Программирование, программистКниги, которые должен прочитать Java программист: от новичка до профессионала
[Примечание переводчика: термины градации «профессионализма» оставлены англоязычные в связи с трудностью их адекватного перевода на русский и несовпадением с привычными Junior-Middle-Senior-Lead. Перевод достаточно вольный — если знаний языка хватает, то лучше читать оригинал, как и советует автор. Оба языка для меня не родные, так что про ошибки сообщайте в личку — исправим. Здесь и далее в квадратных скобках примечания переводчика]
Я заметил, что в последние месяцы я рекомендую одни и те же книги как новичкам, так и опытным разработчикам. Поэтому я решил составить список этих книг. Они составили мне неплохую компанию в процессе моего роста от новичка до сегодняшнего уровня (какой-бы он не был :) )Читать полностью »
Новое в рефлексии для .NET 4.5
2012-12-03 в 8:27, admin, рубрики: .net, .net 4.5, reflection, Программирование
.NET 4.5 включает в себя некоторые изменения к System.Reflection. Самое значительно из них это то, что Type теперь разделён на два отдельных класса: Type и TypeInfo. Объект TypeInfo хранит в себе полное определение, а сам Type теперь хранит только общие данные. Если вы используете рефлексию из вашего десктопного или веб-приложения под NET 4.5, то старое API до сих пор тоже доступно наряду с новыми методами рефлексии. Сегодня я сфокусируюсь на том, как использовать некоторые из основных функций нового API.Читать полностью »
Декартовы деревья по неявному ключу + сжатие пространства
2012-12-03 в 8:21, admin, рубрики: Алгоритмы, Песочница, Программирование, структуры данных, метки: Алгоритмы, структуры данных Прежде чем читать эту статью, нужно понимать, что такое декартово дерево по неявному ключу (это тема не одной статьи, поэтому об этом лучше почитать тут). Сжатие пространста — метод, используемый для сжатия на отрезке данных. Например, вместо того, чтобы хранить множество {1, 1, 1, 2, 2, 2, 3, 1, 1} будем хранить {1 x 3, 2 x 3, 3 x 1, 1 x 2}.
Теперь попробуем сжимать пространство с помощью такого метода и иметь возможность выполнять онлайн операции с любым отрезком.
Читать полностью »
О компонентах и интерфейсах. Java
2012-12-03 в 7:48, admin, рубрики: java, интерфейсы, компоненты, Программирование, Проектирование и рефакторинг, проектирование интерфейсов, метки: java, интерфейсы, компоненты, проектирование интерфейсовВступление
В предыдущей статье я написал о разных способах оформления интерфейсов к компонентам и сокрытия их реализации в C++.
В этой статье расскажу вкратце, как в Java отделить интерфейс от реализации, а реализацию скрыть.
Я не буду рассматривать компоненты разных там Java EE, я рассмотрю самые обычные jar-ники-библиотеки.
Итак.
Читать полностью »
Алгоритм аннотирования иллюстраций или почему бы программисту не быть немного дизайнером?
2012-12-03 в 0:07, admin, рубрики: Алгоритмы, Инфографика, Программирование, метки: Алгоритмы, инфографика, ПрограммированиеХочу представить вашему вниманию одну любопытную задачу и несколько способов ее решения. Изначально задача появилась на stackoverflow, но перед тем как перейти к сути хочу подчеркнуть отсутствие какого бы то ни было желания навязать свою точку зрения.
Итак, задача: есть серия изображений и набор пояснительных меток к каждому изображению, необходимо оптимальным образом расставить метки, избежав пересечения связывающих линий и сохранив общую читабельность.

Читать полностью »
Как заставить компилятор C/C++ генерировать плохой код
2012-12-02 в 8:03, admin, рубрики: c++, компиляция, оптимизация, Программирование, Си, метки: c++, компиляция, оптимизация, СиЭто перевод статьи «How to trick C/C++ compilers into generating terrible code?», автор оригинала — Aater Suleman.
На курсе архитектуры ЭВМ мне сказали, что процессор похож на машину. Руль и педали — это ISA, двигатель — микроархитектура, а программа — водитель. Продолжая эту аналогию, скажу, что использование компьютера похоже на управление машиной через пульт дистанционного управления. Пульт — это клёвая вещь, но в то же время важно понимать, как он работает. Даже в профессиональном ПО я видел много примеров кода, который может смутить даже самый умный компилятор. В этой статье я расскажу об основных методах запутывания компиляторов.
Прецизионный поворот растрового изображения на произвольный угол
2012-12-02 в 4:55, admin, рубрики: Алгоритмы, обработка изображений, поворот изображений, Программирование, метки: поворот изображенийПоворот растрового изображения на углы, кратные 90°, относительно геометрического центра изображения – задача тривиальная и решается без потери качества простым преобразованием координат каждого пикселя.
Для поворота растрового изображения на произвольный угол разработаны быстрые но не оптимальные алгоритмы, дающие приемлемую для практических целей аппроксимацию с потерей качества (например, этот).
Довольно давно, из чисто спортивного интереса, меня заинтересовала задача максимально точного поворота растрового изображения на произвольный угол. К сожалению, мне нигде не удалось найти готовый алгоритм, поэтому пришлось делать его собственноручно. Даже если в итоге я «изобрёл велосипед», результат, как мне кажется, получился достаточно интересным, чтобы им можно было поделиться.
Ниже мы рассмотрим алгоритм прецизионного поворота растрового изображения на произвольный угол относительно произвольного центра с минимальными потерями.
Выражаю благодарность Харченко Владиславу Владимировичу за оказанную помощь.
Читать полностью »
