Pull to refresh
14
0
úlfurinn @ulfurinn

User

Send message

Code review: вы делаете это неправильно

Reading time21 min
Views70K

Сегодня очень многие в разработке используют ревью кода. Практика полезная, нужная. Даже если вы не делаете ревью, вы наверняка знаете, что это такое.

На рынке есть куча инструментов для ревью кода с готовыми сценариями использования, рекомендациями и правилами. GitHub, Phabricator, FishEye/ Crucible, GitLab, Bitbucket, Upsource — список можно долго продолжать. Мы в Badoo тоже в своё время с ними работали: в своей предыдущей статье  я рассказывал нашу историю ревью кода и о том, как мы пришли к изобретению собственного «велосипеда» — решения Codeisok.

Информации предостаточно, можно нагуглить кучу статей про ревью кода с реальными примерами, практиками, подходами, рассказывающих о том, как хорошо, как плохо, как нужно делать, а как — не нужно, что стоит учитывать, а что — нет, и т. д. В общем, тема «обсосана до косточек».

Именно поэтому другую часть айсберга можно и не заметить.
Читать дальше →
Total votes 85: ↑71 and ↓14+57
Comments84

Обзор способов и протоколов аутентификации в веб-приложениях

Reading time18 min
Views619K


Я расскажу о применении различных способов аутентификации для веб-приложений, включая аутентификацию по паролю, по сертификатам, по одноразовым паролям, по ключам доступа и по токенам. Коснусь технологии единого входа (Single Sign-On), рассмотрю различные стандарты и протоколы аутентификации.

Перед тем, как перейти к техническим деталям, давайте немного освежим терминологию.

  • Идентификация — это заявление о том, кем вы являетесь. В зависимости от ситуации, это может быть имя, адрес электронной почты, номер учетной записи, итд.
  • Аутентификация — предоставление доказательств, что вы на самом деле есть тот, кем идентифицировались (от слова “authentic” — истинный, подлинный).
  • Авторизация — проверка, что вам разрешен доступ к запрашиваемому ресурсу.


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

Аналогично эти термины применяются в компьютерных системах, где традиционно под идентификацией понимают получение вашей учетной записи (identity) по username или email; под аутентификацией — проверку, что вы знаете пароль от этой учетной записи, а под авторизацией — проверку вашей роли в системе и решение о предоставлении доступа к запрошенной странице или ресурсу.

Однако в современных системах существуют и более сложные схемы аутентификации и авторизации, о которых я расскажу далее. Но начнем с простого и понятного.
Читать дальше →
Total votes 48: ↑48 and ↓0+48
Comments20

Сравнение игр для программистов

Reading time2 min
Views12K
В данном топике я попытаюсь сравнить некоторые из игр для программистов.
  • Colobot
  • CeeBot
  • Terrarium
  • Robocode
  • Evole
  • DarwinBots II
  • breve


Более подробное описание для игр Colobot/CeeBot можно прочитать здесь, про Robocode здесь, про CoreWars здесь.
Ознакомится с сравнением
Total votes 82: ↑77 and ↓5+72
Comments58

Рисоваська под Mac (как собрать Qt-приложение под Mac OS X)

Reading time4 min
Views20K
Upd. Чтобы помочь в тестировании под разные дистрибутивы Linux — подключайтесь в группу «Друзья Рисоваськи»

Еще в начале января я собрал первую работающую версию Рисоваськи под Mac и лишь два дня назад появилась версия, которую не стыдно показывать другим людям. Сначала расскажу почему же портирование на Mac заняло так много времени, а потом — как собрать проект на Qt под Mac OS X

Почему так долго


В команде не было Mac-эксперта

Как-то так получилось, что вся команда Рисоваськи была мало знакома с Mac OS X — использовали Ubuntu и Windows. Мы купили пару Mac Book'ов в прошлом году, но пользовались ими лишь как дополнительными инструментами. И только когда наш давний друг и опытный маковод Валерий Хиора взялся нам помогать, дело сдвинулось с мертвой точки. Особенно неоценимой была его помощь при сборке Universal-версии — я раз пять пытался собрать её наскоком, без глубокого понимания внутренних механизмов, и у меня каждый раз чуть-чуть не получалось. Зато теперь я умею читать config.log :)
Читать дальше →
Total votes 53: ↑44 and ↓9+35
Comments37

Выборочное подключение USB-флешек в Windows XP

Reading time2 min
Views41K
По роду своей деятельности (системное администрирование), приходится мне постоянно решать различные интересные задачи по управлению компьютерами и сетями.

Вот одна из них.

Дано:
  • Компьютер операторов производства (Windows XP SP2)
  • Одобренная начальством USB-флешка для переноса данных с промышленных компьютеров на компьютер операторов

Требуется:
Обеспечить подключение только одной, одобренной начальством USB-флешки, запретив при этом подключение других, неодобренных (смайл).

Ход решения:
Читать дальше →
Total votes 158: ↑153 and ↓5+148
Comments85

Мертвые с косами. И тишина…

Reading time11 min
Views11K
Хочу поделиться опытом сборки бесшумного компьютера для дома.

Недавно я публиковал статью о выборе современного монитора, которую хабрапользователи довольно высоко оценили. Это дало вдохновение для второй части. Как и в прошлый раз, прошу не рассматривать статью как нечто академическое, просто мне хотелось поделиться информацией, на сбор которой ушло много времени.
Я задался целью собрать из комплектующих максимально тихий системный блок, при этом надежный и быстрый, для комфортного кодирования HD-видео. Вот как это было.

Корпус

Компьютерный корпус — это всего лишь коробка, более или менее прилично выглядящая. Однако, если уделить внимание шумоизоляции, удобству сборки и эффективности охлаждения, то все не так очевидно. Для большей гибкости я рассматривал корпуса без блока питания, т.к. уже заранее выбрал один из самых тихих БП (см. ниже).
Сразу скажу, что получилось дорого. Я выбрал корпус Antec P182 (на фото выше). Без блока питания они выпускают несколько моделей. Наиболее известные серии — P182 и P190 (сильно дороже). Есть еще довольно маленький корпус без БП NSK4000, но в небольших корпусах охлаждение менее эффективно и требует более шумных вентиляторов.
Наряду с Antec я почитал про корпуса Lian-Li. Они оригинальны тем, что сделаны из чистого алюминия. Выглядят очень стильно и сделаны с высоким качеством. Но в России распространены еще меньше, чем Antec.
Можно было, конечно, найти много хороших корпусов среди более дешевых. Что мне понравилось в Antec?
Читать дальше →
Total votes 222: ↑214 and ↓8+206
Comments212

Первые, но нелегкие шаги во Flex

Reading time7 min
Views5.7K
Не так давно я начал свое знакомство с Flex Builder 3. Поскольку с программированием я дружу давно и по-всякому, проблем с задачами типа «Hello, world», сортировка массива и «а как сделать, чтобы изображение по кнопке ползало» не было. Однако я встретился с задачами, которые при внешней своей простоте простых решений в среде Flex не имели.

Именно о них и пойдет речь дальше.
Total votes 36: ↑31 and ↓5+26
Comments24

Десять маленьких программ, без которых неуютно жить

Reading time5 min
Views8K
Заменяем диспетчер задач
Управляем автозагрузкой и следим за состоянием системы
Устанавливаем переключение раскладки
Создаем виртуальные рабочие столы
Сохраняем все заметки в одно место, не задумываясь ни о чем, кроме текста
Ускоряем навигацию по винчестеру
Ставим плагины к проводнику Windows и радуемся
Легко и быстро удаляем папки-файлы «занятые другими процессами»
Копируем и перемещаем быстрее и качественнее
Перестаем парится с кодировками, заменив блокнот

и как мы это сделаем?
Total votes 180: ↑139 and ↓41+98
Comments306

Культура сна

Reading time2 min
Views9.7K
Давно еще, пока я учился в школе, меня постоянно мучили мысли о том, что я хоть и высыпаюсь, но встаю мучительно и ничего с утра не хочу. Глубоко в душе я знал, что можно иначе, но как сделать так, чтобы ты с утра буквально вскакивал с кровати и шел воротить горы? Начал во всем разбираться, и вот, что из этого вышло.
Читать дальше →
Total votes 245: ↑230 and ↓15+215
Comments176

RFID от Tikitag — непаханное поле для самоделкиных

Reading time2 min
Views6.4K
Интересная новость обнаружилась на Engadget:

Компания Tikitag (подразделение Alcatel-Lucent) привлекла к себе внимание на конференции DemoFall, показав RFID-набор (ридер и RFID-метки), которые, как заявлено, должны будут появиться в продаже в течение месяца по весьма демократичной цене.

59.23 КБ

Читать дальше →
Total votes 78: ↑71.5 and ↓6.5+65
Comments77

Скрещиваем велотренажер с компьютером

Reading time3 min
Views9.7K
Сломалась у меня однажды компьютерная мышка, и прежде чем ее выбросить, подумал: а не сделать с ней что-нибудь эдакое? Взгляд упал на велотренажер, стоявший рядом, и идея родилась сама собой.

Предыстория: большинство велотренажеров имеют герконовый датчик вращения педалей. При каждом полном обороте датчик замыкается один раз. Велотренажер у меня вот такой:

15.05 КБ

Компьютер на руле съемный, и от датчика к нему идет провод, заканчивающийся стандартным 3,5 мм моно-миниджеком. Вот и подумал, а что если заставить вращением педалей имитировать нажатие кнопки мыши, подключить мышь к компьютеру и написать какой-нибудь софт (игрушку или что-то еще), чтобы сделать кручение педалей более интересным занятием?
Читать дальше →
Total votes 185: ↑175 and ↓10+165
Comments68

Программируем Windows 7: Taskbar. Часть 1 — Progress Bar

Reading time3 min
Views7.9K
Новая операционная система Windows 7 содержит большое количество нововведений и улучшений. Эти улучшения касаются безопасности, производительности, надежности и т.д. Серьезное внимание также уделено и пользовательскому интерфейсу. Для разработчиков ПО на платформе Windows новая ОС также представляет интерес, т.к. в ней содержатся элементы, на которые можно воздействовать программно. В течении нескольких постов мы поговорим об основных нововведениях и программной модели для них.

Читать дальше →
Total votes 122: ↑105 and ↓17+88
Comments75

Redis — высокопроизводительное хранилище данных

Reading time2 min
Views101K
Бодрый день, хаброчеловеки!

Что такое Redis?


Redis — это высокопроизводительное нереляционное распределённое хранилище данных. В отличие от Memcached, который может в любой момент удалить ваши данные, вытесняя старые записи новыми, Redis хранит информацию постоянно, таким образом он похож на MemcacheDB.

Чем Redis отличается от существующих решений?


API для работы с Memcached (MemcacheDB) позволяет хранить массивы, но эти массивы будут сериализованы и сохранены как строки, таким образом атомарные операции над такими массивами не возможны.
Redis позволяет хранить как строки, так и массивы, к которым можно применять атомарные операции pop / push, делать выборки из таких массивов, выполнять сортировку элементов, получать объединения и пересечения массивов.

Производительность


110000 запросов SET в секунду, 81000 запросов GET в секунду на Linux-сервере начального уровня (тесты).

Высокая скорость работы Redis обеспечивается тем, что данные хранятся в оперативной памяти и сохраняются на диск либо через равные промежутки времени, либо при превышении определённого количества не сохранённых запросов. Из этого вытекает, что используя Redis, вы можете потерять результаты нескольких последних запросов, что вполне приемлимо для большинства веб-приложений, учитывая, что обращение к Redis по скорости сравнимо с обращением к оперативной памяти. Тем не менее, потерь можно избежать через избыточность — Redis поддерживает неблокирующую master-slave репликацию.

Sharding


Redis, как и Memcached, может работать как распределённое хранилище на многих физических серверах. Такой функционал реализуется в клиентских библиотеках, и к сожалению, «из коробки» этот функционал реализован пока только в Ruby API, однако это не мешает вам хешировать ключ самостоятельно и получать ID сервера, к которому с этим ключом обращаться.

API


API доступно для следующих языков:
  • Ruby
  • Python
  • PHP
  • Erlang
  • Tcl
  • Perl
  • Lua
  • Java


API для PHP доступно как в виде модуля, написанного на C, так и в виде PHP5 класса, который общается с Redis-сервером через сокеты, таким образом не требуется устанавливать модуль.
Кроме того существует PHP5 класс от отечественного разрабочика (с именем, заслуживающим доверия. Я серьёзно.) — IMemcacheClient. (Спасибо DYPA за наводку)

Перспективы развития


Разработка ведётся очень активно, комиты происходят почти каждый день, сейчас доступна версия Redis 0.900 (1.0 release candidate 1), которая очень скоро станет версией 1.0
В ближайшем будущем авторы обещают внедрить разные интересные фичи, в том числе и сжатие данных.

Лицензия и поддерживаемые платформы


Redis — написан на ANSI C и работает на большинстве POSIX-систем (Linux, MacOS X). Это бесплатное открытое ПО под BSD лицензией =)

Up: Rediska — удобный PHP-клиент для key-value базы Redis. Оф.сайт.
Total votes 79: ↑75 and ↓4+71
Comments126

Смешать и слегка взболтать: Qt, Carbon и Cocoa

Reading time6 min
Views2.5K
Qt можно считать наиболее распространенной кроссплатформенной библиотекой для разработки пользовательских интерфейсов. Carbon (С++) и Cocoa (Objective-C), в свою очередь, являются основными фреймворками, используемыми Apple, что означает гармоничный внешний вид и наилучшую интеграцию с системой при их использовании. Несмотря на попытки создания свободных клонов, в полном объеме они реализованы только в MacOS.

Уверен, что вопросом связи Qt и Cocoa задавались многие, но в условиях отсутствия внятной информации в интернете вряд-ли достигли значимых успехов.
мои результаты
Total votes 52: ↑46 and ↓6+40
Comments24

Пишем апплет для GNOME на Python

Reading time9 min
Views4.7K
Публикую данный пост по просьбе уважаемого VladX, у которого возникло временное недопонимание с кармой.

Апплет — это маленькое приложение, встраиваемое непосредственно в панель GNOME. Обычно апплет выполняет какой-то опеределенный узкий функционал (изменение громкости, монтирование устройств), что выгодно отличает его от громоздкого оконного приложения. На самом деле знающему Python кодеру не составит труда написать собственный апплет, но и для незнающих есть выход: большое количество полезных (и не очень) апплетов лежит на сайте gnomefiles.org, помимо этого, на официальном сайте есть примеры написания апплетов на C.
Поехали!
Total votes 37: ↑34 and ↓3+31
Comments24

vim + psql

Reading time3 min
Views5.1K
Уже пол года как перешели на vim. Работаем с RoR(ruby on rails) и javascript (Dojo).
Vim попищал недельку и стал служить верой и правдой.
Подкупает простота и в тоже время мощь этого редактора, особенно в *nix окружении.

в этой заметке я раскажу как легко подружить vim и psql (postgresql console client).
Читать дальше →
Total votes 30: ↑26 and ↓4+22
Comments23

Задача о назначениях

Reading time12 min
Views80K

Задача о наилучшем распределении некоторого числа работ между таким же числом исполнителей. При ее решении ищут оптимальное назначение из условия максимума общей производительности, которая равна сумме производительности исполнителей. Наиболее эффективным методом ее решения является венгерский метод. Задача о назначениях имеет много интерпретаций: распределение работ между механизмами, распределение целей между огневыми средствами для максимизации математического ожидания числа пораженных целей или среднего ущерба и т.д.

Give us the tools, and we will finish the job
Total votes 60: ↑57 and ↓3+54
Comments34

VirtualBox. Удобное переключение между Host и Guest

Reading time2 min
Views22K
Те, кто работает админом и занимается тех.поддержкой пользователей в крупных конторах, часто сталкиваются с необходимостью держать на рабочей машине Windows наряду с любимой ОС — в данном случае Debian GNU/Linux. Задачи, вынуждающие ставить винду могут быть разными. Средства тоже: кто-то ставит VMWare, кто-то qemu, я пользуюсь VirtualBox. В общем виртуальными машинами сейчас никого не удивить. Я хочу поделиться с людьми небольшим, но очень удобным финтом.
Читать дальше →
Total votes 97: ↑96 and ↓1+95
Comments62

New Relic — полный мониторинг вашего RoR приложения

Reading time2 min
Views40K
Перешел тут недавно на новый VDS для своих сайтов на хостинг webbynode.com. Очень все по-рельсовому сделано. Но сейчас речь не о них.

При регистрации предложили сделать аккаунт в приложении мониторинга RoR сайтов. Называются New Relic. Посмотрел презентации, и надо признаться, очень впечатлило. Как промо акция, там дают недельный gold-account, где можно воспользоваться всеми отчетами. Это, друзья мои, стоит внимания.

Дашборд для лайт версии
New Relic RPM - Overview (color_mondays)
Читать дальше →
Total votes 19: ↑17 and ↓2+15
Comments25

Face Detection на джаве — это просто!

Reading time1 min
Views28K
Спешу поделиться с вами своею радостью :) Столкнулся я тут недавно с задачкой — нужно было определить местонахождения лиц на картинке.

Зачем это нужно — другой вопрос: мне, лично, понадобилось для создания модели распределения внимания по картинке, а кому-то, может быть, нужно для того, чтобы людей как в фейсбуке автоматически на групповой фотографии выделять.

Алгоритмы, в принципе, неплохо известны. Одним из лучших является алгоритм Viola & Jones, но поиск готовых имплементаций результатов не принёс. Было расстроился, но обратил внимание на замечательную нативную библиотеку — OpenCV. Библиотека ценна не только реализацией основных алгоритмов компьютерного зрения, но тем, что встречается решительно на всех платформах.

И что же вы думаете? Одним из первых в гугле выпадает вот такой замечательный проект JNI интерфейса к OpenCV!

Несколько минут закачки, десяток минут чтения документации с установкою программы, и ещё десяток — написание теста. А потом, и вот этими четырьмя строчками, просто берём и распознаём на картинке лица!

OpenCV cv = new OpenCV();
cv.loadImage("test.jpg", 300, 400);
cv.cascade("haarcascade_frontalface_default.xml");
Rectangle bounds[] = cv.detect();

Читать дальше →
Total votes 71: ↑68 and ↓3+65
Comments76

Information

Rating
Does not participate
Location
Vällingby, Stockholms Län, Швеция
Date of birth
Registered
Activity