Несколько раз читал какие-то (как тогда казалось) небылицы о поддержке продуктов компании Logitech: мол присылают новые девайсы вместо старых, причём просто по факту обращения с проблемой и демонстрации фото. Были упоминания, что старый девайс нужно было каким-то образом привести в негодность, причём соблюдая определённый порядок действий, ещё какие-то пляски с бубном, а в итоге — бесплатное новое устройство. Как-то это всё походило на байки и где-то может далеко (тысячи так на три километров западнее места моего проживания) приближенные к реальности, причём наверняка немного приукрашенные в рассказах. Короче говоря — не верил я в бесплатный сыр. Недавно обрёл собственный опыт взаимодействия со службой поддержки компании Logitech, и, надо сказать, — был просто поражён!
Результат превзошел ожидания
Сайтов с адаптивной разметкой с каждым месяцем становится все больше, заказчики кроме кроссбраузерности все чаще требуют адаптивность, но многие разработчики не спешат обучаться новым техникам. Но адаптивный дизайн — это просто! В этой статье представлено 5 примеров адаптивной разметки различных элементов веб-страниц.
Читать дальше →

В то время как наши корабли, теперь уже оснащенные современными беспроводными технологиями, продолжают бороздить просторы Большого Театра, менее мобильные и более активные потребители трафика данных по-прежнему пользуются старым добрым Ethernet, который, в своей нынешней 10-гигабитной ипостаси, способен удовлетворить большинство их потребностей. В этой заметке мы дадим практический обзор технологий десятигигабитного Ethernet (10Gbe) в целом и сетевых адаптеров 10Gbe Intel в частности.
Читать дальше →
В 2007-м Стив Джобс представил iPhone, который произвел революцию в высокотехнологичной индустрии и изменил наш подход к работе и ведению бизнеса. Сейчас 2012-й и все больше и больше сайтов предлагают нативные iOS и Android клиенты для своих сервисов. Между тем не все стартапы обладают финансами для разработки приложений в дополнение к основному продукту. Для увеличения популярности своего продукта эти компании предлагают открытые API, которыми могут воспользоваться сторонние разработчики. Пожалуй Twitter был первым в этой сфере и теперь число компаний, последовавших этой стратегии, растет стремительно. Это действительно отличный способ создать привлекательную экосистему вокруг своего продукта.
Читать дальше →

По своей программистской природе я очень не люблю неоптимальность и избыточность в коде. И вот, читая в очередной раз на работе исходный код Mail.Ru Агента, вновь наткнулся на одну особенность в способе реализации перевода строк продукта на разные языки.
Локализация здесь осуществляется довольно нехитро. Все строки, требующие перевода, оборачиваются в макрос
_TR():
wprintf(L"%s\n", _TR("Some translating string"));
Макрос возвращает нужную версию текста в зависимости от текущего используемого языка. Определён он следующим образом:
#define _TR(x) g_Translator.Translate(x)
Здесь происходит обращение к глобальному объекту
g_Translator, который в функции
Translate() считает в рантайме crc32 от указанной строки, ищет в своей xml-базе перевод с совпадающей контрольной суммой и возвращает его.
Не буду судить насколько такое решение оправдано, но оно проверено временем и показало себя достаточно надёжным. И всё бы ничего, но такое решение не лишено недостатков: по сути, функция делает лишнюю работу — контрольные суммы можно было бы подсчитать один раз на этапе компиляции, и использовать в дальнейшем уже готовые числовые значения. Это также избавило бы от необходимости хранить в исполняемом образе дублирующиеся строки, ведь они уже есть во внешнем xml-файле с переводами.
Немного погуглив по запросу «compile-time crc32» я быстро понял, что задача это не самая тривиальная, а готовых решений мне найти так и не удалось.
Читать дальше →
После прочтения этой
статьи с ужасом для себя понял, что мы никак не защищены от такой атаки. И легко можем попасть на 10-20 тысяч рублей в день. Решил это дело исправить. Накидал на коленке защитный скриптик — возможно кому-то пригодится…
Читать дальше →
Примечание переводчика: данный пост является логическим развитием, а точнее «предысторией» поста Вникаем в include и extend и был подсказан в комментариях к нему пользователем murr, за что ему большое спасибо.
Классы и объекты в Ruby связаны между собой достаточно затейливо и не сразу можно понять что к чему. Из-за особого назначения классов очень легко потерять из вида тот факт, что классы — это тоже объекты Ruby. От «обычных» объектов их отличает два вещи: они служат образцом для создания новых объектов и они являются частью иерархии классов. Все верно, классы могут иметь экземпляры себя (объекты), суперклассы (родителей) и подклассы (детей).
Если классы — это объекты, то у них должен быть свой собственный класс. Классом всех классов (как объектов) в Ruby является класс
Class:
# один из способов создать новый класс
Dog = Class.new
# общепринятый способ создания класса
class Dog
# какая-то реализация собачьего поведения
end
Dog.class
=> Class
Читать дальше →
Вступление

Еще с появления скриптов
для отображения PDF,
извлечения информации с MP3 и
декодировки H.264 меня очень заинтересовала тема чтения и работы с бинарными данными в JavaScript.
В этом посте хотелось бы рассказать про свои эксперименты и рассмотреть эти возможности на относительно простом примере «ручного» парсинга и отображения BMP-файлов (а заодно и освежить память о школьных временах работы с BMP на Паскале :) ).
Сразу хочу предупредить, что речь будет идти именно о написании JavaScript самостоятельно, а не его генерации с исходных кодов других языков с помощью какого-либо транслятора типа Emscripten.
Читать дальше →
Знания о том, как сделать хорошую landing page помогут увеличить количество желаемых действий, совершаемых пользователями на Вашем сайте. В статье приводится обзор элементов дизайна хорошей landing page.
Читать дальше →