Как известно, в Java существуют примитивные типы для чисел (byte, short, int, long, float, double) и объектные обёртки над ними (Byte, Short, Integer, Long, Float, Double). В различных статьях можно встретить диаметрально противоположные рекомендации о том, чем пользоваться. С одной стороны объектные обёртки универсальны: их можно использовать со стандартными коллекциями, которые удобны, инкапсулированы и вообще прекрасны. Но боксинг убивает производительность и ест кучу памяти. Примитивные типы быстры и компактны, но их можно поместить только в массивы, которые и от записи не защитишь, и абстракция на нуле. Если же вам нужно что-то типа Map, для отображения чего-нибудь на числа, то придётся либо мириться с потерей производительности и памяти, либо использовать сторонние библиотеки, реализующие нестандартный интерфейс. Однако в некоторых случаях вам помогут изменяемые (mutable) числа.
Пользователь
Реализация паттерна Компоновщик (Composite pattern) на php
3 мин
8.2KВведение
На определенной стадии изучения серверного программирования мне захотелось написать свой простенький фреймворк. Я рассчитывал, что это поможет более глубоко понять идеологию MVC и Zend Framework в частности. Когда дело дошло до части представления и генерации html я вспомнил о паттерне Компоновщик (Composite pattern). Возможно я несколько исказил его применение, но мысль пошла оттуда.
+8
Несколько интересных приемов и особенностей работы с MySQL
3 мин
88KЯ думаю, что в процессе изучения той или иной СУБД каждый из вас не раз изобретал велосипеды для решения своих задач, не зная о существовании той или иной функции или приема, которые бы могли в разы ускорить выполнение запросов и уменьшить объем кода. В данной статье я хочу поделиться с вами своим опытом работы с очень «добрым» и «отзывчивым» MySQL, часто позволяющему программисту делать вещи, которые другие СУБД переварить бы не смогли. Материал будет полезен скорее тем, кто только решил углубиться в чудесный мир запросов, но возможно и опытные программисты найдут тут что-то интересное.
+100
Платформа для экспериментов на Three.JS и WebGL
6 мин
15KЕсли не играть и не рассматривать фотографии знакомых девушек в контакте, то программирование является моим любимым занятием за компьютером. Особенно мне нравится «быстрое» программирование. Это такое программирование, когда проект небольшой и когда мы не занимаемся фундаментальными изысканиями, а планирование не нуждается в документации. К слову, на работе все проекты не такие, да ещё и ориентированы на закрытую аудиторию. В основном поэтому вы сейчас читаете мою статью, а ещё я желаю попасть на Хабр.
Хочу поделиться с вами результатами проекта моих выходных. Это чисто клиентское javascript/html приложение, которое состоит из редактора исходных кодов на языке Javascript и GLSL-шейдеров, мини-линкера, окна с Three.JS/WebGL и небольшого рантайм-интерфейса. Всё это склеено на jquery, а поверх прикручена галерея с видео. В галерее представлено несколько демонстраций. Можно выбрать понравившуюся демонстрацию и поиграть с её кодом, а также экспортировать и импортировать целые проекты из нескольких файлов через JSON.
Хочу поделиться с вами результатами проекта моих выходных. Это чисто клиентское javascript/html приложение, которое состоит из редактора исходных кодов на языке Javascript и GLSL-шейдеров, мини-линкера, окна с Three.JS/WebGL и небольшого рантайм-интерфейса. Всё это склеено на jquery, а поверх прикручена галерея с видео. В галерее представлено несколько демонстраций. Можно выбрать понравившуюся демонстрацию и поиграть с её кодом, а также экспортировать и импортировать целые проекты из нескольких файлов через JSON.
+18
Лексическая область видимости функций в JavaScript
5 мин
39KПочитав недавние посты для новичков JavaScript, решил написать небольшой топик про один интересный вопрос, которого ни один из авторов пока не касался, а именно, вопрос про область видимости функций в JavaScript.
+43
Ключевое слово this в javascript — учимся определять контекст на практике
4 мин
183KТуториал
По просьбам некоторых читателей решил написать топик про контекст в javascript. Новички javascript часто не понимают значение ключевого слова this в javascript. Данный топик будет интересен не только новичкам, а также тем, кто просто хочет освежить данный аспект в памяти. Посмотрите пример ниже. Если вы затрудняетесь ответить на вопрос «что будет выведено в логе» хотя бы в одном из пунктов или хотите просто посмотреть ответы — добро пожаловать под кат.
var f = function() {
this.x = 5;
(function() {
this.x = 3;
})();
console.log(this.x);
};
var obj = {x: 4, m: function() {
console.log(this.x);
}};
f();
new f();
obj.m();
new obj.m();
f.call(f);
obj.m.call(f);
+105
WPA2-Enterprise, или правильный подход к безопасности Wi-Fi сети
7 мин
329K В последнее время появилось много «разоблачающих» публикаций о взломе какого-либо очередного протокола или технологии, компрометирующего безопасность беспроводных сетей. Так ли это на самом деле, чего стоит бояться, и как сделать, чтобы доступ в вашу сеть был максимально защищен? Слова WEP, WPA, 802.1x, EAP, PKI для вас мало что значат? Этот небольшой обзор поможет свести воедино все применяющиеся технологии шифрования и авторизации радио-доступа. Я попробую показать, что правильно настроенная беспроводная сеть представляет собой непреодолимый барьер для злоумышленника (до известного предела, конечно).
+59
Релиз Firefox 15
2 мин
5.1KКак обычно, релиз стабильной версии Firefox появляется раньше официального анонса, который состоится 28 августа (вторник).
Что нового в этой версии:
Что нового в этой версии:
+65
Путешествия во времени и программирование
16 мин
72KСейчас о путешествиях во времени пишут не только фантасты. После размышлений античных философов, формул общей теории относительности, моделей червоточин продолжают появляться новые теории, и даже проекты. Многие из них, правда, требуют для своей работы черные дыры, бесконечно длинные цилиндры, материю с отрицательной массой и прочие артефакты. Приближает ли все это нас к созданию машины времени? Об этом трудно говорить предметно, не понимая сути вопроса – что такое время. За несколько веков это понимание увеличилось, на самом деле, незначительно. Быть может с приходом программирования ситуация изменится? Ведь именно там нас ожидают многие ответы.
+56
Новый 0day эксплоит для Java. Теперь и в Metasploit
2 мин
9.2KКак следует из официального блога Metasploit, последний апдейт данного продукта имеет в своём арсенале эксплоит под уязвимость нулевого дня (0day) для Java run-time environments (JRE).
Эксплоит кросплатформенный и был успешно протестирован на следующих платформах:
UPD_2
Как сообщается, уязвимости подвержены следующие продукты:
JDK и JRE 7 Update 6 и более ранние
JDK и JRE 6 Update 34 и более ранние
end of UPD_2
Как можно догадаться, раз это 0day, то на настоящий момент патча не существуетОбновление Java 7 update 7 устраняет уязвимость (спасибо Gregy за наводку). Уязвимости также пока что не присвоен номер CVE. Уязвимости присвоен CVE-2012-4681
Эксплоит кросплатформенный и был успешно протестирован на следующих платформах:
- Windows 7 SP1 с установленной Java 7 Update 6
- Mozilla Firefox под Ubuntu Linux 10.04
- Internet Explorer / Mozilla Firefox / Chrome on Windows XP
- Internet Explorer / Mozilla Firefox on Windows Vista
- Internet Explorer / Mozilla Firefox on Windows 7
- Safar под OS X 10.7.4
UPD_2
Как сообщается, уязвимости подвержены следующие продукты:
JDK и JRE 7 Update 6 и более ранние
JDK и JRE 6 Update 34 и более ранние
end of UPD_2
+43
Symfony 2 Internals на практике
9 мин
5.6KПост навеян вот этим вопросом. Будем использовать стандартные эвенты Symfony для переопределения вывода контроллера. Итак, как, в общем, всё это будет работать:
Сразу предупрежу, код не претендует на идеальный, не используется кэширование (позднее скажу об этом), но главная идея, думаю, будет понятной. Также, более подробно почитать о Symfony2 Internals вы можете в официальной документации.
- Создадим аннотацию Ajax для обработки типа контента контроллера
- Будем обрабатывать эту аннотацию через эвенты
- Будем переопределять тип контента в соответствии с выбранным типом в аннотации
Сразу предупрежу, код не претендует на идеальный, не используется кэширование (позднее скажу об этом), но главная идея, думаю, будет понятной. Также, более подробно почитать о Symfony2 Internals вы можете в официальной документации.
+6
Неприятная особенность std::list, о которой не все знают
3 мин
55KДвусвязный список — это фундаментальная структура данных, о которой все знают и повсеместно используют. Все знают почему и в каких случаях он эффективнее вектора, какие операции имеют линейную сложность, а какие — константную…
Хотя постойте, знаете ли вы какова сложность функции size ()?
«Конечно же я знаю — О(1)!», ответят многие из вас, «Что может быть проще?»
Тривиально, эффективно и безопасно, не так ли?
Я бы реализовал эту функцию именно так, большинство из вас сделали бы тоже самое.
Однако, те, кто писал реализацию GNU STL, другого мнения на этот счет.
Хотя постойте, знаете ли вы какова сложность функции size ()?
«Конечно же я знаю — О(1)!», ответят многие из вас, «Что может быть проще?»
size_type size() const
{
return _size;
}
Тривиально, эффективно и безопасно, не так ли?
Я бы реализовал эту функцию именно так, большинство из вас сделали бы тоже самое.
Однако, те, кто писал реализацию GNU STL, другого мнения на этот счет.
+81
Образование — это выбор
5 мин
12KВступление
Статья «Стандартное образование — это обман!» вызвала бурные дискуссии: о необходимости образования в целом, о мнении автора статьи, о наличии достаточного опыта автора. Прочитав статью и комментарии к ней, я понял, что имею достаточно структурированное и доказательное мнение о проблеме, которым хочу поделиться.
Моя статья будет более общей, чем просто порицание или вознесение системы образования, я затрону вопросы необходимости образования вообще, выбора каждым жизненного пути.
+18
Немного огня на чистом CSS (Firefox)
2 мин
6.2KЗайдя на домашнюю страницу браузера Firefox about:home (автономная, в самом браузере), обнаружил там неплохую реализацию пылающего огня, сделанную на не очень тяжёлых анимированных спрайтах, под лицензией LGPL (по крайней мере, в стартовом about-home-Fx.js). Не каждый день встретишь качественный огонь на скриптах в браузере. При ближайшем рассмотрении оказалось, что это даже не скрипты, а целиком анимированный CSS. Небольшой скрипт используется только для старта и останова. Используя эту идею и формат, дизайнеры смогут создать свою реализацию огня, дыма или текущей воды.
Поиск по ключевым словам из кода в интернете результата не дал, поэтому, как и с машиной Тьюринга (Гитхаб), тут же возникло желание освободить скрипт и стили от оков случайности и таинственности. То есть, положить его в читаемом и рабочем виде в открытый стабильный источник. Иначе, закончится Олимпиада — и будут все шансы исчезнуть ему из поля зрения. И вот результат:
github.com/spmbt/flame-animate-css-mozilla
Поиск по ключевым словам из кода в интернете результата не дал, поэтому, как и с машиной Тьюринга (Гитхаб), тут же возникло желание освободить скрипт и стили от оков случайности и таинственности. То есть, положить его в читаемом и рабочем виде в открытый стабильный источник. Иначе, закончится Олимпиада — и будут все шансы исчезнуть ему из поля зрения. И вот результат:
github.com/spmbt/flame-animate-css-mozilla
+16
+32
Программирование в Android — зачем такие сложности?
5 мин
27KВступление
Я программистом не являюсь уже давно, я админ. Но порой надо быстро сделать утилитку анализа логов, какую-нибудь автоматизацию — делаю, если не нахожу ничего похожего в инете за день поиска.
На андроиде моё возмущение сразу вызвали два факта — отсутствие мелодий у групп (ну почему, почему никто кроме Сони не додумался до этого очевидно необходимого функционала?) и невозможность сбакапить мелодии вместе с контактами. В Symbian, которая тогда была эталоном систем для смартов, последняя функция была.
Поиск ничего не дал по второму пункту и почти ничего — по первому. Это были суровые времена перехода с андроид 1.5 на андроид 1.6 и где-то на горизонте маячил Android 2.0.
Ну нет и нет — напишу, не боги горшки обжигают. Начал с более простого, с бакапа установленных на контак мелодий.
В итоге родилась программка, с простейшей функцией — бакапить соответствия имя-контакта = установленный-звонок и потом восстанавливать эти данные (её можно найти в маркете по названию Ringtone Keeper), а вот на каких граблях я постоял в процессе — я тут и опишу.
+13
Монада ContT в картинках (Haskell)
5 мин
4.6KНа хабре уже были статьи про продолжения и монаду ContT. Я решил поделиться своим пониманием этого вопроса и снабдить его соответствующими иллюстрациями. В отличие от приведенной выше статьи, мне бы хотелось больше внимания уделить внутреннему устройству монады ContT и разобраться, как же она работает.
+25
Геометрические объекты и балуны в Рамблер-Картах
4 мин
3.9KТе, кто уже пользовался API карт других разработчиков, думаю, без труда разберутся и с API Рамблер-Карт. Набор классов и методов достаточно стандартный и очевидный.
Документацию можно найти тут: http://maps.rambler.ru/api/docs.
Чтобы на примере разобраться с тем, как придавать геометрическим объектам внешний вид, отличный от дефолтного, решим простую задачку. Создадим карту древних областей Москвы, чтобы при наведении курсора на ту или иную область она выделялась цветным многоугольником, а при левом клике открывался балун с небольшой информацией о ней.
+3
Быстрое индексное умножение по модулю
4 мин
37KВведение
Обычно данный материал приводится с обилием формул и рассчитан больше на математиков. Я постараюсь расписать его наиболее доступно на простых численных примерах с точки зрения применения этого метода в микроэлектронике на аппаратном уровне. В численных примерах для наглядности будет использоваться значение p = 11.
Постановка задачи
Положим, что нам требуется выполнить умножение следующего вида:
res = (a*b) mod p
, где 0 <= a < p
0 <= b < p
p
– простое число.mod p
– операция нахождения остатка по модулю.И выполнить его надо на низком уровне, где нет как таковой операции умножения и операции взятия остатка от деления или же они реализуются достаточно сложно (например, в электронном устройстве).
+40
Руководство по созданию ActiveX-контролов на C++ с помощью ATL
13 мин
29KВ интернете существует множество учебников по использованию ATL, и в частности, по созданию COM-компонентов с его помощью, в том числе и ActiveX/OLE контролов, но большинство из них почему-то описывают процесс тыкания мышкой в разные интересные места Visual Studio, использование графических инструментов последней, и мало какой из них затрагивает нутро сгенерированного средой разработки кода в достаточно глубоком объеме. В русскоязычном сегменте интернета ситуация и того хуже — материалов по ATL крайне мало, практически нет(да и не только по ATL, а и по созданию COM-компонентов вообще), поэтому я решил этот недостаток компенсировать.
+16
Информация
- В рейтинге
- Не участвует
- Зарегистрирован
- Активность