Pull to refresh
1
0
Виктор @JmAbuDabi

User

Send message

Безопасность OAuth2 и Facebook Connect уязвимости

Reading time3 min
Views11K
Это — сиквел моей сногсшибательной первой статьи.

Готов поспорить что каждый веб разработчик сталкивался с фейсбук коннектом или вконтакте логином или аутенфикацией через твиттер. Все это по сути построено на основе OAuth1/2.

Мое мнение заключается в том что мы все ступили не на ту дорожку. OAuth это дорожка в ад (к слову, Эран Хаммер сейчас работает над заменой oauth — oz).

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

image
Читать дальше →
Total votes 90: ↑80 and ↓10+70
Comments27

Правильный подход к использованию API Вконтакте

Reading time5 min
Views99K
Привет, Хабр!

В своё время, бороздя просторы интернета на предмет рационального использования API Вконтакте, я не смог найти чего-то вразумительного, единственные библиотеки, которые были найдены мной были реализованы без использования каких-либо общепринятых практик и без красивого кода. Я решил исправить, сложившееся недоразумение и написал свою библиотеку для работы с API Вконтакте.
Животрепещущие подробности и подходы под хабракатом.
Читать дальше →
Total votes 33: ↑26 and ↓7+19
Comments21

Няш-меш

Reading time5 min
Views95K
Судя по сообщению в «Российской газете», вчера на официальном портале правовой информации появился подписанный Путиным так называемый «закон о блоггерах», который повелевает популярным «блоггерам» пройти официальную регистрацию в России и соблюдать закон о СМИ под страхом блокировки.

Я ставлю «блоггер» в кавычки, потому что это слово — фиговый листок. Всякий может скачать PDF закона и убедиться в том, что статья 10² начинается так: «Владелец сайта и (или) страницы сайта в сети «Интернет», на которых размещается общедоступная информация и доступ к которым в течение суток составляет более трёх тысяч пользователей сети «Интернет» (далее — блогер), при размещении и использовании указанной информации, в том числе при размещении указанной информации на данных сайте или странице сайта иными пользователями сети «Интернет», обязан обеспечивать соблюдение законодательства Российской Федерации…».

Стало быть, это не только блогосферы касается. Такими страницами являются, например, не только все мои блогозаписи на Хабрахабре в этом году (кроме одного малопосещаемого перевода, не дотянувшего до 3000), но также, например, и описание API jQuery, и даже файл README.md в репозитории модуля node-sqlite3, который (в составе npm-пакета) подвергается десяткам тысяч скачиваний ежемесячно:

[информация о модуле]

Кроме того, таковы и вообще все-все сколько-нибудь популярные зарубежные сайты (репозитории, магазины, библиотеки, галереи, пособия, СМИ, блоги, игры…) и отдельные страницы, владельцы которых уж конечно не побегут, задрав штаны, регистрироваться в России — и, более того, бережно хранить итоги полугода пристального слежения за всеми своими посетителями для предоставления в органы.

Закон начинает действовать 1 августа. Осталось 86 дней до превращения ситуации с Интернетом в России в ситуацию совершенно северокорейскую. То есть, хотя во второй половине прошлого года я сравнивал положение дел с Кувейтом ([1], [2], [3]) — простите, был не прав: даже Кувейт для нас ещё очень долго (может быть, даже вечно, вечно!…) будет недосягаемым оазисом относительной свободы Интернета.

Читать дальше →
Total votes 274: ↑201 and ↓73+128
Comments190

Становимся лучше: тернистый путь программиста. Часть 1

Reading time5 min
Views25K
Эта статья — вольный перевод статьи «The hardest and easiest way to be a better coder» портала medium.com.
В ней выражена идея, которую обычно не принято озвучивать в индустрии разработки программ.
Эта идея о том, что программисты тоже люди. Но люди, живущие в культуре, отрицающей эмоции в общении.
Автор отличненько описывает нам важный путь развития. И это совсем не вкачивание технических навыков или GTD.

Часть 1. Даже у программистов есть чувства!
Total votes 27: ↑16 and ↓11+5
Comments18

Gource — визуализируем историю работы над проектом

Reading time1 min
Views22K
Спешу рассказать хабрасообществу о, относительно новом, дьявольски завораживающем проекте Gource которое еще не упоминалось. Это приложение позволяет визуализировать историю изменений в системе контроля версии. Отрисовывает невероятно красиво при помощи OpenGL.


Читать дальше →
Total votes 65: ↑61 and ↓4+57
Comments51

Реализация алгоритма BFS на GPU

Reading time8 min
Views12K

Аннотация


В данной статье хочу рассказать как можно эффективно распараллелить алгоритм BFS — поиск в ширину в графе с использованием графических ускорителей. В статье будет приведен подробный анализ полученного алгоритма. Вычисления выполнялись на одном GPU GTX Titan архитектуры Kepler.

Введение


В последнее время все большую роль играют графические ускорители (GPU) в не графических вычислениях. Потребность их использования обусловлена их относительно высокой производительностью и более низкой стоимостью. Как известно, на GPU хорошо решаются задачи на структурных сетках, где параллелизм так или иначе легко выделяется. Но есть задачи, которые требуют больших мощностей и используют неструктурные сетки. Примером такой задачи является Single Shortest Source Path problem (SSSP) – задача поиска кратчайших путей от заданной вершины до всех остальных во взвешенном графе. Решение данной задачи рассмотрено мной в этой статье. Вторым примером задачи на неструктурных сетках является задача Breadth First Search (BFS) — поиска в ширину в неориентированном графе. Данная задача является основной в ряде алгоритмов на графах. Также она немного проще, чем поиск кратчайшего пути. На данный момент алгоритм BFS используется как основной тест для рейтинга Graph500. Далее рассмотрим, как можно использовать идеи решения задачи SSSP в задаче BFS. Про архитектуру GPU компании Nvidia и об упомянутых алгоритмах уже много написано, поэтому в этой статье я не стану дополнительно писать про это. Так же, надеюсь, что понятия warp, cuda блок, SMX, и прочие базовые вещи, связанные с CUDA читателю знакомы.
Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments7

Задача про стеклянные шары — решение в общем случае

Reading time10 min
Views28K
Шар на ладониЗадача про стоэтажный дом и два стеклянных шара давно будоражит интернет-сообщество (Хабрахабр, ЖЖ, форумы). Пытливые умы непременно задаются вопросом: что делать в общем случае, когда у нас n этажей и k шаров?

Скажем, сколько бросков (хотя бы примерно), потребуется в случае n = 240, k = 10?

Объединив найденные на просторах сети сведения и собственные наработки, хочу представить вам пост о ключевых идеях решения этой задачи, а также об основных результатах и интересных наблюдениях, полученных в ходе исследования.
Читать дальше →
Total votes 43: ↑41 and ↓2+39
Comments27

Как собрать бинарный deb пакет: подробное HowTo

Reading time15 min
Views225K
Сегодня я расскажу на абстрактном примере как правильно создать *.deb пакет для Ubuntu/Debian. Пакет мы будем делать бинарный. Пакеты, компилирующие бинарники из исходников здесь не рассматриваются: осилив изложенные ниже знания, в дальнейшем по готовым примерам можно понять суть и действовать по аналогии :)

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

В качестве бонуса в конце статьи будет пример быстрого создания собственного локального репозитория: установка пакетов из репозитория позволяет автоматически отслеживать зависимости, и конечно же! — устанавливать всё одной консольной командой на нескольких машинах :)

Для тех, кто не хочет вдаваться в мощную систему установки софта в Linux, рекомендую посетить сайт проги CheckInstall: она автоматически создаёт deb-пакет из команды «make install» ;) А мы вместе с любопытными —
поехали дальше!
Total votes 73: ↑63 and ↓10+53
Comments40

Управление временем на личном примере: 10 тезисов

Reading time10 min
Views202K
Одним из самых дорогих и невосполнимых ресурсов, которым обладаем мы все, является время. В среднем у нас есть 66,29 лет, что эквивалентно 24212 дням, или 34865280 минутам, или 2091916800 секундам. Учитывая, что треть времени человек тратит на сон, а у большинства читателей этой статьи целая треть этого ресурса уже потрачена, драгоценного времени не так уж и много остаётся, чтобы им разбрасываться. Время — это деньги, время — это жизнь.

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



Читать дальше →
Total votes 68: ↑55 and ↓13+42
Comments37

Обновления ядра в Ubuntu с помощью Bash

Reading time5 min
Views20K
Часто бывает так, что поставив новую стабильную систему, да ещё и отмеченную как LTS, вам всё равно хочется установить новое ядро (в котором, например, улучшено энергосбережение и наконец-то заработает ваш новый планшет Genius).

Патчить и собирать ядро из исходников — игра, конечно, интересная, но для ленивых пользователей Ubuntu существует готовый репозиторий. Одна беда — скачивать пакеты и следить за обновлениями придётся вручную.

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

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

Поэтому я решил сделать паузу и вспомнить как же это делалось раньше, когда деревья были большими, а иногда даже бинарными.
Читать дальше →
Total votes 28: ↑19 and ↓9+10
Comments26

10 шагов до top paid 25 overall в App Store

Reading time5 min
Views5.3K
Привет, хабровчане! Недавно мы выпустили игру Gemibears для айфона и айпада (специально никаких ссылок на игру, пост не про саморекламу) и за несколько дней добрались до топ-25 в платном чарте по Америке.

Это было непросто, но интересно, и мы многому научились. Я хочу поделиться с вами шагами, которые привели нас к такому результату.
Читать дальше →
Total votes 72: ↑60 and ↓12+48
Comments55

Экспорт избранного Хабра в FB2

Reading time2 min
Views9.5K
Ненавижу длинные вступления
И поэтому не буду писать их даже под спойлером.

  • Зачем?
    • Для оффлайнового просмотра на читалках.
  • Моя читалка не поддерживает FB2!
  • Хочу!
    1. Обзаводимся Python 2.7+. Тестировалось на Python 2.7.3.
    2. Ставим библиотеку BeautifulSoup 4. Вкратце варианты:
      • apt-get install python-beautifulsoup4
      • easy_install beautifulsoup4
      • pip install beautifulsoup4
      • Исходники и python setup.py install
    3. Качаем код из репозитория (прямая ссылка на последнюю версию).
    4. Открываем файл habrafav.py и в строке username = ... прописываем свой логин.
    5. python habrafav.py (или просто habrafav.py под Windows)
    6. Ждём. У меня с кэшированными данными экспорт ~150 статей занимает около 6 минут и 600 Мб оперативной памяти.
    7. Забираем habrahabr_favorites.fb2. Мой занимает примерно 62 Мб.

Читать дальше →
Total votes 88: ↑81 and ↓7+74
Comments50

Изучить Github за 15 минут

Reading time1 min
Views127K
TryGit — интерактивный обучающий курс по Github в стиле Codecademy. Курс состоит из 25 мини-уроков, которые знакомят пользователя с базовыми понятиями и основными командами git, при этом ученик своими руками вводит команды в консоль, смотрит результат и читает сопровождающие надписи с объяснением происходящего.



Вот таким в будущем должно стать обучение в школах!

Конечно, 15-минутное введение не заменит полноценного учебника. Для обучения можно рекомендовать бесплатную книгу Pro Git и видеокурс Getting Git.
Total votes 173: ↑155 and ↓18+137
Comments56

Как доделать игру

Reading time9 min
Views28K
На блоге одного из создателей Aquaria и Spelunky есть любопытный пост с советами для тех, кто испытывает проблемы с доведением до конца своих игровых проектов. Этот список советов оказался для меня своего рода «зеркалом», в котором отражены многие проблемы, с которыми сталкивался я сам, и я был удивлен тем, насколько хорошо автору удалось уловить суть этих проблем и предложить свои решения, зачастую бескомпромисные.
image
Приближаясь к заключительной стадии разработки моей игры, я много думал о том, как завершать выполнение проектов в целом. Я заметил, что вокруг много действительно талантливых разработчиков, у которых возникают проблемы с доведением до конца игровых проектов. По правде говоря, я и сам оставил позади себя ряд незавершенных игр… Думаю, у многих та же ситуация. Не всякий проект удается, по разным причинам. Однако если вы стали замечать, что постоянно забрасываете проекты, которые имеют неплохой потенциал, вероятно, стоит оглянуться назад и изучить тому причины.
Читать дальше →
Total votes 142: ↑135 and ↓7+128
Comments54

Легкий FPV-трикоптер: разработка, сборка, конфигурация

Reading time10 min
Views172K
Пару месяцев назад я здесь писал про свой тяжелый квад: раз, два. Спасибо всем, кто читал и комментировал — я нe ожидал, что мои скромные труды привлекут такое количество читателей. Нo раз данная тема, судя по всему, интересует аудиторию Хабра, то поведаю вам о своем последнем проекте: легком FPV-трикоптере, который я завершил буквально на днях.



Поставленная задача


Для этого коптера я поставил себe следующие задачи:

  • Высокая маневренность: хотя мой квад неповоротливым назвать не получается, но тем не менее, при весе в 2.2кг и с дорогой камерой на относительно хрупком подвесе спереди исполнять на нем фигуры высшего пилотажа как-то рука не поднимается. Хотелось коптер, на котором можно будет крутить бочки и петли вокруг деревьев без задних мыслей.
  • Удароустойчивость: требование непосредственно связано с первым. Долго чинить коптер после каждой неожиданной посадки в дерево — не дело, аппарат должен держать удар.
  • Время полета: хотя бы 10-15 минут, менять аккумуляторы чаще — ужe неинтересно.
  • Легкий вес: данное требование исходит из трех предыдущих. Чем легче коптер, тем проще ему менять направление полета, тем меньше энергия столкновения с чем-либо, и тем дольше он провисит в воздухе на одной батарейке.
  • Компактность: хотелось аппарат, который помещается в рюкзак, чтобы можно было его без проблем брать с собой в общественном транспорте и при пеших походах.

Исходя из этих требований, я опять сел за LibreCad, и нарисовал вот что:
Под катом - много текста, картинок и видео
Total votes 156: ↑156 and ↓0+156
Comments127

Алгоритм сортировки Timsort

Reading time6 min
Views154K
Timsort, в отличии от всяких там «пузырьков» и «вставок», штука относительно новая — изобретен был в 2002 году Тимом Петерсом (в честь него и назван). С тех пор он уже стал стандартным алгоритмом сортировки в Python, OpenJDK 7 и Android JDK 1.5. А чтобы понять почему — достаточно взглянуть на вот эту табличку из Википедии.



Среди, на первый взгляд, огромного выбора в таблице есть всего 7 адекватных алгоритмов (со сложностью O(n logn) в среднем и худшем случае), среди которых только 2 могут похвастаться стабильностью и сложностью O(n) в лучшем случае. Один из этих двух — это давно и хорошо всем известная «Сортировка с помощью двоичного дерева». А вот второй как-раз таки Timsort.

Алгоритм построен на той идее, что в реальном мире сортируемый массив данных часто содержат в себе упорядоченные (не важно, по возрастанию или по убыванию) подмассивы. Это и вправду часто так. На таких данных Timsort рвёт в клочья все остальные алгоритмы.
Читать дальше →
Total votes 292: ↑285 and ↓7+278
Comments63

Джефф Дин из компании Google — это Чак Норрис нашего времени

Reading time4 min
Views224K
«Джефф Дин компилирует и запускает свой код перед коммитом, но только чтобы проверить на баги компилятор и CPU», — вот один из множества шуточных фактов о Джеффе Дине.

Джефф Дин считается кем-то вроде Чака Норриса. Отличие только в том, что он вовсе не герой боевиков, а инженер-программист компании Google.

Шутки о нём впервые появились на 1 апреля шесть лет назад. Один из коллег Дина по имени Кентон Варда открыл страничку, куда каждый мог добавлять факты о Джеффе Дине. Идею с энтузиазмом подхватили другие разработчики — и вскоре наполнили страничку множеством таких «фактов».
Читать дальше →
Total votes 395: ↑364 and ↓31+333
Comments123

Псевдоскоп, или что если поменять глаза местами

Reading time8 min
Views384K

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

Привычный ход повседневных событий перестал успокаивать своей завершённостью. Всё, что когда-то наполняло смыслом мою жизнь, стало лишь бледным фоном для опухшей мысли, перманентно отнимающей ресурсы моего мозга; второстепенным мусором перед вопросом, ставшим на тот момент центром моего существования — «Как? Каково это — посмотреть в такую конструкцию? Что увидит человек?» (надеюсь, никто не заметил, что вопроса здесь три). Я определённо захотел собрать эту конструкцию и узнать ответ на вопрос.

графоманское словоблудие с обилием картинок, фотографий и даже схем
Total votes 294: ↑283 and ↓11+272
Comments162

Что можно узнать о кандидате по тестовому заданию

Reading time9 min
Views87K
Какое-то время назад по Хабру прокатилась волна статей о поиске работы и прохождению собеседований. Многократно высказались и работодатели и соискатели. Но, к сожалению, не была в достаточной степени затронута тема тестовых заданий.

Ведь, тестовое задание не ограничивается категориями «выполнил» и «не выполнил». Внимательно наблюдая за процессом и изучая финальный результат, можно в итоге многое сказать о человеке ни дня с ним вместе не поработав. А порой, и научиться чему-то новому.

Предлагаю вашему вниманию тестовое задание, которое я уже довольно давно даю кандидатам в компании, где я работаю:

На экране есть сетка M на N из цветных квадратиков. Нужно реализовать на этой сетке следующий эффект — по клику слева направо со скоростью V пробегает волна, меняя цвет квадратиков на другой (единый для всей волны). Эффект должен работать при любых значениях M, N, V. Волна начинается всегда у левой стенки. Одновременно может идти несколько волн разного цвета.
Анимационный пример: http://dl.dropbox.com/u/3601116/wave.swf (покликать по флэшке).


Я не сомневаюсь, что это задание с легкостью сделают все программисты посетители Хабра.

А у меня получилась следующая статистика:

  1. В итоге, задание взяли чуть больше 20 человек.
  2. Пара человек ничего не сделали.
  3. Половина из оставшихся (по моим критериям) с ним не справились.
  4. Кандидаты четко разделились на весьма интересные группы.

Подумайте немного, как бы вы выполнили это задание, и заходите под кат, где я расскажу обо всем подробнее.
Читать дальше →
Total votes 198: ↑135 and ↓63+72
Comments260

Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install

Reading time5 min
Views173K
К написанию сей заметки меня сподвигло то, что я устал делать развёрнутые замечания на эту тему в комментариях к статьям, где в качестве части инструкции по сборке и настройке чего-либо для конкретного дистра предлагают выполнить make install.
Суть сводится к тому, что эту команду в виде «make install» или «sudo make install» использовать в современных дистрибутивах нельзя.

Но ведь авторы программ в руководствах по установке пишут, что нужно использовать эту команду, возможно, скажете вы. Да, пишут. Но это лишь означает, что они не знают, какой у вас дистрибутив, и дистрибутив ли это вообще, может, вы вступили в секту и обкурилисьчитались LFS и теперь решили под свою хтоническую систему скомпилять их творение. А make install является универсальным, хоть и зачастую неправильным способом это сделать.

Читать дальше →
Total votes 385: ↑339 and ↓46+293
Comments186

Information

Rating
Does not participate
Location
Васильковка, Днепропетровская обл., Украина
Date of birth
Registered
Activity