Обновить
39
0
sysprg@sysprg

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

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

Button c обведенным(stroke) шрифтом на Android

Время на прочтение5 мин
Охват и читатели13K
image
Понадобился мне для проекта один специфический элемент — кнопка с обведенным шрифтом. Казалось бы, что тут такого — google точно должен был это предусмотреть. Но, как оказалось, стандартными способами это сделать нельзя и нужно покопаться под капотом Button. Начал я свои поиски с тени для шрифта.
Но попытка сделать stroke шрифт таким способом провалится —
во-первых, линия вокруг букв будет размытой тем больше, чем больше вы укажете число в shadowRadius;
во-вторых, нельзя изменить ширину линии.
Немного поразмыслив, я реализовал класс, который делает все что требуется. Кого заинтересовало — прошу под кат.
Читать дальше →

О сортировке контента на основе оценок пользователей: Часть 2

Время на прочтение5 мин
Охват и читатели10K
Прошлая статья привлекла большой интерес. И даже, на некоторое время, стала лучшей за 24 часа. У меня появилось несколько идей и на часть вопросов в комментариях нужно ответить более развернуто.
image

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

АВЛ-деревья

Время на прочтение9 мин
Охват и читатели465K
Если в одном из моих прошлых постов речь шла о довольно современном подходе к построению сбалансированных деревьев поиска, то этот пост посвящен реализации АВЛ-деревьев — наверное, самого первого вида сбалансированных двоичных деревьев поиска, придуманных еще в 1962 году нашими (тогда советскими) учеными Адельсон-Вельским и Ландисом. В сети можно найти много реализаций АВЛ-деревьев (например, тут), но все, что лично я видел, не внушает особенного оптимизма, особенно, если пытаешься разобраться во всем с нуля. Везде утверждается, что АВЛ-деревья проще красно-черных деревьев, но глядя на прилагаемый к этому код, начинаешь сомневаться в данном утверждении. Собственно, желание объяснить на пальцах, как устроены АВЛ-деревья, и послужило мотивацией к написанию данного поста. Изложение иллюстрируется кодом на С++.

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

7 уроков, полученных при создании Reddit

Время на прочтение7 мин
Охват и читатели23K
UPD. Оригинальная статья достаточно старая — 2010 года. Сейчас ситуация выглядит по-другому.

В декабре 2010 у Reddit-а было 829М просмотров и 119 серверов.
В конце 2011 года — 2,07B просмотров и 240 серверов.

Спасибо potomushto за актуализацию.

UPD 2. Поправил схему для людей с проблемами цветовосприятия. Спасибо second_pilot и spiritedflow



Стив Хаффман, один из создателей Reddit, рассказал на презентации, чему они научились, пока строили и развивали Reddit до 7,5 млн пользователей в месяц, 270 миллионов просмотров страниц в месяц и более 20 серверов баз данных.


Стив уточнил, что большинство полученных уроков были очевидными, поэтому в презентации не будет радикально новых идей. Но у Стива огромный опыт, и если он не смог увидеть эти грабли, то возможно, вам стоит обратить внимание на эти «очевидные вещи».


Каждый из 7 уроков будет рассмотрен в соответствующей секции.
  • Падайте часто
  • Разделение сервисов
  • Открытая схема данных
  • Избегайте хранения состояний
  • Memcache
  • Сохраняйте избыточные данные
  • Выполняйте максимум работы в фоновом режиме

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

Как работает сортировка у Реддита

Время на прочтение4 мин
Охват и читатели9.2K
Сейчас на хабре продолжают обсуждать сортировки и рейтингования сущностей (записей, постов, комментов), так что я сам этим заинтересовался и, как раз находясь на реддите, решил узнать как там работает сортировка, и наткнулся на отличную и короткую статью.

Этот пост — продолжение разбора алгоритмов сортировки (в прошлый раз был Hacker News). В этот раз, мы разберем как работает сортировка постов и комментариев на Reddit. Алгоритмы у Реддита достаточно простые, чтобы понять их и реализовать.

Первая часть этой записи будет сфокусирована на сортировке постов, а вторая на сортировке комментариев. Они довольно сильно различаются, и за идеей способа сортировки комментариев стоит Randall Munroe (автор xkcd).

Разбираем сортировку постов

Реддит open-source-ный проект и его код полностью доступен на гитхабе. Он написан на питоне, исходники вы можете увидеть тут. Их алгоритмы сортировки написаны под Pyrex, для дальнейшей компиляции (трансляции) в C-код. Pyrex был выбран из-за производительности. Я переписал их реализации на чистый питон, чтобы они легче читались.
Читать дальше →

Internet Explorer 7-9: выбор инструментов для максимальной поддержки CSS3, HTML5

Время на прочтение3 мин
Охват и читатели20K
Наверное, вы уже слышали о таких вещах как CSS3 Pie, Selectivizr, HTML5 Boilerplate, CSS3 Media queries и т.п. Речь пойдет о том, как использовать все эти инструменты вместе: дело в том, что неоднократно были замечены конфликты между ними. Ну, а если вы не совсем понимаете, зачем вам HTML 5 и CSS 3, тогда не стану навязывать эти технологии; просто скажу, что они позволяют сократить время верстки (хотя, это не единственный плюс).
Читать дальше →

Вывод уведомления об устаревшем браузере с помощью jReject

Время на прочтение3 мин
Охват и читатели31K
Многие веб-сайты выводят предупреждения об устаревших браузерах или и вовсе отправляют пользователя устанавливать новый браузер или Google Chrome Frame.
jReject — специальный плагин для jQuery, позволяющий отображать подобные уведомления с помощью нескольких строчек кода.

jQuery jReject
Применение

О сортировке контента на основе оценок пользователей

Время на прочтение4 мин
Охват и читатели17K
Написать этот пост меня привлекла эта статья. Многие ее помнят по вот этой картинке.
image
Статья затрагивает правильную тему, однако с точки зрения математики и здравого смысла она в корне не верна.
Читать дальше →

Плоская линза создаёт идеальное изображение

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


Физики из Гарвардской школы инженерного дела и прикладных наук (School of Engineering and Applied Sciences, SEAS) создали плоскую линзу диаметром 1 мм и толщиной 60 нм, которая преломляет световые волны так же, как обычная объёмная линза, но без оптических искажений.
Читать дальше →

Уведомление о том, что браузер устарел

Время на прочтение2 мин
Охват и читатели71K
ТизерОни уходят. Ещё вчера мы были вынуждены прикручивать очередной костыль для IE6/IE7, а сейчас в этом уже нет необходимости. В СНГ у IE6 сегодня всего 0.5% трафика, у IE7 — 1.8%. Они действительно уходят. Думаю, большинство верстальщиков давно уже не добивается попиксельного соответствия макету, а кто-то даже не проверяет на работоспособность сайтов в столь старых браузерах. В таком случае не будет лишним предупредить пользователя, что сайт может работать неправильно, и предложить обновиться. Предлагаю готовый комплект из панельки предупреждения и страницы с предложением выбрать новый браузер.
Читать дальше →

Оптимизация алгоритма проверки условия Делоне через уравнение описанной окружности и его применение

Время на прочтение4 мин
Охват и читатели14K
Расскажу секрет о том, как быстро проверить выполнение условия Делоне для двух треугольников.
Собственно сама оптимизация описана немного ниже(см.«Оптимизация алгоритма проверки условия Делоне через уравнение описанной окружности»), но расскажу обо всем по порядку.

В моем случае триангуляция применяется в трассировке изображения, для разбиения плоскости на примитивные сектора (треугольники). Как известно, она делится также на несколько этапов: корректировка, выявление границ, обход границ, заметание контуров. Это в самом общем виде. Я бы хотел остановиться, думаю, на самом сложном этапе: заметание плоскости.
Итак приступим

Подборка CSS3-генераторов для упрощения фронтэнд-разработки

Время на прочтение2 мин
Охват и читатели48K
CSS3 предоставляет много новых возможностей в мире фронтэнд-разработки. Это действительно великолепная вещь, но иногда трудно вспомнить некоторые параметры, особенно, если вы — веб-дизайнер, а не программист. Вот 10 удивительных CSS3-генераторов, которые помогут вам сэкономить время и силы (картинки кликабельны).
Читать дальше →

Энергосберегающий background location + отправка данных на сервер из фона

Время на прочтение5 мин
Охват и читатели14K
Постановка задачи

В приложении необходимо отслеживать местоположение пользователя, когда приложение работает в фоновом режиме (с относительно приемлимой точностью), а также когда приложение активно (с высокой точностью).

Решение

Решение в лоб — использовать данные из коллбеков [CLLocationManagerInstance startUpdatingLocation] как в фоне, так и когда приложение активно. Первый и наиболее критичный недостаток данного решения — высокое энергопотребление (за несколько часов аккумулятор iPhone может полностью сесть). Второй — если приложение будет свернуто и 'убито', никаких апдейтов положения пользователя мы получить не сможем.

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

Эвристика случайного поиска и теплоходы

Время на прочтение3 мин
Охват и читатели4.1K
Когда-то давно я уже писал довольно большую статью об использовании эвристик в программировании, но сегодня я хочу привести небольшой практический пример. Этим летом я плавал на теплоходе по маршруту Москва — Ростов-на-Дону — Москва, и заметил, что каждый вечер директор круиза пытается найти оптимальную рассадку туристических групп по автобусам. Задача не такая сложная, но минимум 15 минут в день на её решение тратится. Разумеется, я попробовал автоматизировать этот процесс.
Читать дальше →

Многопоточный загрузчик файлов на JS (jQuery)

Время на прочтение5 мин
Охват и читатели5.8K
Доброго времени суток, коллеги. В этой статье я опишу опыт создание многопоточного загрузчика файлов (с ограниченной нагрузкой на сервер) на JS (jQuery).

Совсем недавно у меня появилась задача (опытом решения которой я и хочу с вами поделится): сделать, в админке, возможность выбирать и загружать более одного файла за один раз. Задание вроде тривиальное и не сложное, но в итоге мое решение показалось мне довольно таки интересным, так как не было найдено аналогов.
Читать дальше →

Лаборатории Nokia по тестированнию антенн

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


Source: npl.co.uk

Чтобы избежать подобных проблем, каждый производитель мобильных телефонов проводит тщательное тестирование антенн в производящихся аппаратах. Конечно, изначально антенны проектируются вместе с другими деталями телефона, и в лаборатории для тестирования аппарат уже попадает в законченном виде. И, благодаря кропотливым и сложным предварительным рассчетам при проектировании антенны, гарантирующим нормальный приём сигнала, финальное тестирование может показаться формальностью, без его прохождения аппарат никогда не выйдет на рынок.

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

Чёрный цвет — табу, миф или необходимость?

Время на прочтение5 мин
Охват и читатели33K
Прочитав этот топик и запись в блоге, на которой он основан, я подумал в очередной раз о том, как же любят «специалисты по веб-дизайну» (это камень в сторону автора записи в блоге, но не только — всем известны и другие любители этого) выдавать давно известные тезисы за откровение и яро их пропагандировать. Не слишком заботясь о логике того, как эти тезисы переносятся на веб-дизайн и дизайн вообще, и что они изначально значат.

Давайте разберемся, в чем тут реальная проблема.
Читать дальше →

Миллион одновременных соединений на Node.js

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


TL;DR:


  • Node.js v0.8 позволяет обрабатывать 1 млн одновременных HTTP Comet соединений на Intel Core i7 Quad/16 Gb RAM практически без дополнительных настроек.
  • На 1 соединение тратится чуть больше 10 Kb памяти (4.1 Kb Javascript Heap + 2.2 Kb Node.js Native + 3.8 Kb Kernel)..
  • V8 Garbage Collector не рассчитан на управление > ~500Mb памяти. При превышении нужно переходить на альтернативный режим сборки мусора, иначе «отзывчивость» сервера сильно уменьшается.
  • Подобный опыт можно (и нужно!) без особых затрат повторить самому (см. под катом).

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

Zynga. Возможно, худшее еще впереди

Время на прочтение3 мин
Охват и читатели1.9K
Прошлая неделя была достаточно паршивой для Zynga. Сокращение доходов и снижение прогнозов на предстоящий фискальный год вылились в 40% падение акций компании. Это событие активизировало предсказателей-фаталистов.

Составлять некролог для Zynga несколько преждевременно, но компанию практически гарантированно ждет ухудшение ситуации, прежде чем появится свет в конце туннеля.

В попытках исправить текущее положение дел, Zynga сталкивается с огромным количеством препятствий. Рост социальных игра замедляется, и количество игроков в флагманские игры компании падает. Инвесторы в курсе этих событий, и имеют полное право волноваться. Но самая большая надвигающаяся проблема — истечение срока опционов для работников.
Читать дальше →

Зачем на самом деле нужен мозг

Время на прочтение10 мин
Охват и читатели53K
В продолжение предыдущего топика "Как на самом деле работает мозг". На написание данного поста меня побудила, с одной стороны, замечательная книга «Grooming, Gossip, and the Evolution of Language» Робина Данбара (Robin Dunbar), а с другой — очередная порция «полезных» и «умных» советов в GTD и других блогах.

Для затравки — небольшая логическая задачка. Дан набор карточек; на каждой из них на одной стороне написана буква, на другой — цифра.
На столе лежат четыре карточки: «А», «Д», «5» и «6». Вам говорят: если на карточке (из числа лежащих на столе) на одной стороне гласная, то на обороте — чётная цифра. Какие из карточек достаточно перевернуть, чтобы однозначно подтвердить или опровергнуть это утверждение?

Подумайте немного, запишите ответ на бумажке и добро пожаловать под кат.

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

Информация

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