Как стать автором
Обновить
0
0

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

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

Изменяемые числовые объекты

Время на прочтение2 мин
Количество просмотров14K
Как известно, в Java существуют примитивные типы для чисел (byte, short, int, long, float, double) и объектные обёртки над ними (Byte, Short, Integer, Long, Float, Double). В различных статьях можно встретить диаметрально противоположные рекомендации о том, чем пользоваться. С одной стороны объектные обёртки универсальны: их можно использовать со стандартными коллекциями, которые удобны, инкапсулированы и вообще прекрасны. Но боксинг убивает производительность и ест кучу памяти. Примитивные типы быстры и компактны, но их можно поместить только в массивы, которые и от записи не защитишь, и абстракция на нуле. Если же вам нужно что-то типа Map, для отображения чего-нибудь на числа, то придётся либо мириться с потерей производительности и памяти, либо использовать сторонние библиотеки, реализующие нестандартный интерфейс. Однако в некоторых случаях вам помогут изменяемые (mutable) числа.
Читать дальше →
Всего голосов 23: ↑18 и ↓5+13
Комментарии54

Реализация паттерна Компоновщик (Composite pattern) на php

Время на прочтение3 мин
Количество просмотров8.2K

Введение


На определенной стадии изучения серверного программирования мне захотелось написать свой простенький фреймворк. Я рассчитывал, что это поможет более глубоко понять идеологию MVC и Zend Framework в частности. Когда дело дошло до части представления и генерации html я вспомнил о паттерне Компоновщик (Composite pattern). Возможно я несколько исказил его применение, но мысль пошла оттуда.
Читать дальше →
Всего голосов 24: ↑16 и ↓8+8
Комментарии29

Несколько интересных приемов и особенностей работы с MySQL

Время на прочтение3 мин
Количество просмотров88K
Я думаю, что в процессе изучения той или иной СУБД каждый из вас не раз изобретал велосипеды для решения своих задач, не зная о существовании той или иной функции или приема, которые бы могли в разы ускорить выполнение запросов и уменьшить объем кода. В данной статье я хочу поделиться с вами своим опытом работы с очень «добрым» и «отзывчивым» MySQL, часто позволяющему программисту делать вещи, которые другие СУБД переварить бы не смогли. Материал будет полезен скорее тем, кто только решил углубиться в чудесный мир запросов, но возможно и опытные программисты найдут тут что-то интересное.
Читать дальше →
Всего голосов 132: ↑116 и ↓16+100
Комментарии83

Платформа для экспериментов на Three.JS и WebGL

Время на прочтение6 мин
Количество просмотров15K
Если не играть и не рассматривать фотографии знакомых девушек в контакте, то программирование является моим любимым занятием за компьютером. Особенно мне нравится «быстрое» программирование. Это такое программирование, когда проект небольшой и когда мы не занимаемся фундаментальными изысканиями, а планирование не нуждается в документации. К слову, на работе все проекты не такие, да ещё и ориентированы на закрытую аудиторию. В основном поэтому вы сейчас читаете мою статью, а ещё я желаю попасть на Хабр.

Хочу поделиться с вами результатами проекта моих выходных. Это чисто клиентское javascript/html приложение, которое состоит из редактора исходных кодов на языке Javascript и GLSL-шейдеров, мини-линкера, окна с Three.JS/WebGL и небольшого рантайм-интерфейса. Всё это склеено на jquery, а поверх прикручена галерея с видео. В галерее представлено несколько демонстраций. Можно выбрать понравившуюся демонстрацию и поиграть с её кодом, а также экспортировать и импортировать целые проекты из нескольких файлов через JSON.
Читать дальше →
Всего голосов 22: ↑20 и ↓2+18
Комментарии9

Лексическая область видимости функций в JavaScript

Время на прочтение5 мин
Количество просмотров39K
Почитав недавние посты для новичков JavaScript, решил написать небольшой топик про один интересный вопрос, которого ни один из авторов пока не касался, а именно, вопрос про область видимости функций в JavaScript.
Читать дальше →
Всего голосов 65: ↑54 и ↓11+43
Комментарии49

Ключевое слово 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);

Читать дальше →
Всего голосов 111: ↑108 и ↓3+105
Комментарии122

WPA2-Enterprise, или правильный подход к безопасности Wi-Fi сети

Время на прочтение7 мин
Количество просмотров329K
В последнее время появилось много «разоблачающих» публикаций о взломе какого-либо очередного протокола или технологии, компрометирующего безопасность беспроводных сетей. Так ли это на самом деле, чего стоит бояться, и как сделать, чтобы доступ в вашу сеть был максимально защищен? Слова WEP, WPA, 802.1x, EAP, PKI для вас мало что значат? Этот небольшой обзор поможет свести воедино все применяющиеся технологии шифрования и авторизации радио-доступа. Я попробую показать, что правильно настроенная беспроводная сеть представляет собой непреодолимый барьер для злоумышленника (до известного предела, конечно).

Читать дальше →
Всего голосов 63: ↑61 и ↓2+59
Комментарии52

Релиз Firefox 15

Время на прочтение2 мин
Количество просмотров5.1K
Как обычно, релиз стабильной версии Firefox появляется раньше официального анонса, который состоится 28 августа (вторник).
Что нового в этой версии:
Читать дальше →
Всего голосов 89: ↑77 и ↓12+65
Комментарии110

Путешествия во времени и программирование

Время на прочтение16 мин
Количество просмотров72K

Сейчас о путешествиях во времени пишут не только фантасты. После размышлений античных философов, формул общей теории относительности, моделей червоточин продолжают появляться новые теории, и даже проекты. Многие из них, правда, требуют для своей работы черные дыры, бесконечно длинные цилиндры, материю с отрицательной массой и прочие артефакты. Приближает ли все это нас к созданию машины времени? Об этом трудно говорить предметно, не понимая сути вопроса – что такое время. За несколько веков это понимание увеличилось, на самом деле, незначительно. Быть может с приходом программирования ситуация изменится? Ведь именно там нас ожидают многие ответы.
Читать дальше →
Всего голосов 122: ↑89 и ↓33+56
Комментарии149

Новый 0day эксплоит для Java. Теперь и в Metasploit

Время на прочтение2 мин
Количество просмотров9.2K
Как следует из официального блога Metasploit, последний апдейт данного продукта имеет в своём арсенале эксплоит под уязвимость нулевого дня (0day) для Java run-time environments (JRE).

Эксплоит кросплатформенный и был успешно протестирован на следующих платформах:

  • 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

Как можно догадаться, раз это 0day, то на настоящий момент патча не существуетОбновление Java 7 update 7 устраняет уязвимость (спасибо Gregy за наводку). Уязвимости также пока что не присвоен номер CVE. Уязвимости присвоен CVE-2012-4681
Читать дальше →
Всего голосов 55: ↑49 и ↓6+43
Комментарии63

Symfony 2 Internals на практике

Время на прочтение9 мин
Количество просмотров5.6K
Пост навеян вот этим вопросом. Будем использовать стандартные эвенты Symfony для переопределения вывода контроллера. Итак, как, в общем, всё это будет работать:
  1. Создадим аннотацию Ajax для обработки типа контента контроллера
  2. Будем обрабатывать эту аннотацию через эвенты
  3. Будем переопределять тип контента в соответствии с выбранным типом в аннотации

Сразу предупрежу, код не претендует на идеальный, не используется кэширование (позднее скажу об этом), но главная идея, думаю, будет понятной. Также, более подробно почитать о Symfony2 Internals вы можете в официальной документации.
Читать дальше →
Всего голосов 8: ↑7 и ↓1+6
Комментарии6

Неприятная особенность std::list, о которой не все знают

Время на прочтение3 мин
Количество просмотров55K
Двусвязный список — это фундаментальная структура данных, о которой все знают и повсеместно используют. Все знают почему и в каких случаях он эффективнее вектора, какие операции имеют линейную сложность, а какие — константную…

Хотя постойте, знаете ли вы какова сложность функции size ()?
«Конечно же я знаю — О(1)!», ответят многие из вас, «Что может быть проще?»

size_type  size() const                             
{
       return _size;
}


Тривиально, эффективно и безопасно, не так ли?
Я бы реализовал эту функцию именно так, большинство из вас сделали бы тоже самое.

Однако, те, кто писал реализацию GNU STL, другого мнения на этот счет.
Читать дальше →
Всего голосов 111: ↑96 и ↓15+81
Комментарии92

Образование — это выбор

Время на прочтение5 мин
Количество просмотров12K

Вступление


Статья «Стандартное образование — это обман!» вызвала бурные дискуссии: о необходимости образования в целом, о мнении автора статьи, о наличии достаточного опыта автора. Прочитав статью и комментарии к ней, я понял, что имею достаточно структурированное и доказательное мнение о проблеме, которым хочу поделиться.

Моя статья будет более общей, чем просто порицание или вознесение системы образования, я затрону вопросы необходимости образования вообще, выбора каждым жизненного пути.
Читать дальше →
Всего голосов 62: ↑40 и ↓22+18
Комментарии73

Немного огня на чистом CSS (Firefox)

Время на прочтение2 мин
Количество просмотров6.2K
Зайдя на домашнюю страницу браузера Firefox about:home (автономная, в самом браузере), обнаружил там неплохую реализацию пылающего огня, сделанную на не очень тяжёлых анимированных спрайтах, под лицензией LGPL (по крайней мере, в стартовом about-home-Fx.js). Не каждый день встретишь качественный огонь на скриптах в браузере. При ближайшем рассмотрении оказалось, что это даже не скрипты, а целиком анимированный CSS. Небольшой скрипт используется только для старта и останова. Используя эту идею и формат, дизайнеры смогут создать свою реализацию огня, дыма или текущей воды.

Поиск по ключевым словам из кода в интернете результата не дал, поэтому, как и с машиной Тьюринга (Гитхаб), тут же возникло желание освободить скрипт и стили от оков случайности и таинственности. То есть, положить его в читаемом и рабочем виде в открытый стабильный источник. Иначе, закончится Олимпиада — и будут все шансы исчезнуть ему из поля зрения. И вот результат:
github.com/spmbt/flame-animate-css-mozilla
Немного подробностей
Всего голосов 28: ↑22 и ↓6+16
Комментарии20

SQLite — замечательная встраиваемая БД (часть 2)

Время на прочтение4 мин
Количество просмотров175K
Часть 1
Часть 3

В этой части будут затронуты непростые вопросы использования SQLite через работу с его программным интерфейсом (API).

Читать дальше →
Всего голосов 48: ↑40 и ↓8+32
Комментарии34

Программирование в Android — зачем такие сложности?

Время на прочтение5 мин
Количество просмотров27K
Вступление

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

На андроиде моё возмущение сразу вызвали два факта — отсутствие мелодий у групп (ну почему, почему никто кроме Сони не додумался до этого очевидно необходимого функционала?) и невозможность сбакапить мелодии вместе с контактами. В Symbian, которая тогда была эталоном систем для смартов, последняя функция была.

Поиск ничего не дал по второму пункту и почти ничего — по первому. Это были суровые времена перехода с андроид 1.5 на андроид 1.6 и где-то на горизонте маячил Android 2.0.

Ну нет и нет — напишу, не боги горшки обжигают. Начал с более простого, с бакапа установленных на контак мелодий.

В итоге родилась программка, с простейшей функцией — бакапить соответствия имя-контакта = установленный-звонок и потом восстанавливать эти данные (её можно найти в маркете по названию Ringtone Keeper), а вот на каких граблях я постоял в процессе — я тут и опишу.
Читать дальше →
Всего голосов 69: ↑41 и ↓28+13
Комментарии49

Монада ContT в картинках (Haskell)

Время на прочтение5 мин
Количество просмотров4.6K
На хабре уже были статьи про продолжения и монаду ContT. Я решил поделиться своим пониманием этого вопроса и снабдить его соответствующими иллюстрациями. В отличие от приведенной выше статьи, мне бы хотелось больше внимания уделить внутреннему устройству монады ContT и разобраться, как же она работает.
Читать дальше →
Всего голосов 31: ↑28 и ↓3+25
Комментарии10

Геометрические объекты и балуны в Рамблер-Картах

Время на прочтение4 мин
Количество просмотров3.9K


Те, кто уже пользовался API карт других разработчиков, думаю, без труда разберутся и с API Рамблер-Карт. Набор классов и методов достаточно стандартный и очевидный.

Документацию можно найти тут: http://maps.rambler.ru/api/docs.

Чтобы на примере разобраться с тем, как придавать геометрическим объектам внешний вид, отличный от дефолтного, решим простую задачку. Создадим карту древних областей Москвы, чтобы при наведении курсора на ту или иную область она выделялась цветным многоугольником, а при левом клике открывался балун с небольшой информацией о ней.
Читать дальше →
Всего голосов 13: ↑8 и ↓5+3
Комментарии12

Быстрое индексное умножение по модулю

Время на прочтение4 мин
Количество просмотров37K

Введение


Обычно данный материал приводится с обилием формул и рассчитан больше на математиков. Я постараюсь расписать его наиболее доступно на простых численных примерах с точки зрения применения этого метода в микроэлектронике на аппаратном уровне. В численных примерах для наглядности будет использоваться значение p = 11.

Постановка задачи


Положим, что нам требуется выполнить умножение следующего вида: res = (a*b) mod p, где
0 <= a < p
0 <= b < p
p – простое число.
mod p – операция нахождения остатка по модулю.
И выполнить его надо на низком уровне, где нет как таковой операции умножения и операции взятия остатка от деления или же они реализуются достаточно сложно (например, в электронном устройстве).
Подробности
Всего голосов 42: ↑41 и ↓1+40
Комментарии23

Руководство по созданию ActiveX-контролов на C++ с помощью ATL

Время на прочтение13 мин
Количество просмотров29K
В интернете существует множество учебников по использованию ATL, и в частности, по созданию COM-компонентов с его помощью, в том числе и ActiveX/OLE контролов, но большинство из них почему-то описывают процесс тыкания мышкой в разные интересные места Visual Studio, использование графических инструментов последней, и мало какой из них затрагивает нутро сгенерированного средой разработки кода в достаточно глубоком объеме. В русскоязычном сегменте интернета ситуация и того хуже — материалов по ATL крайне мало, практически нет(да и не только по ATL, а и по созданию COM-компонентов вообще), поэтому я решил этот недостаток компенсировать.
Читать дальше →
Всего голосов 40: ↑28 и ↓12+16
Комментарии43

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность