Pull to refresh
3
0

User

Send message

Сюрприз от неизвестного: доверие к расширениям Chrome

Reading time4 min
Views64K
16 января Amit Agarwal, разработчик расширения Add to Feedly опубликовал заметку в блоге, в которой признал, что его расширение было продано неизвестному за сумму в несколько тысяч долларов («предложение из четырёх цифр»).

Add to Feedly — это расширение, которое добавляло удобную кнопку подписки на RSS канал текущей страницы через сервис Feedly (популярная альтернатива почившему Google Reader). Расширение было сделано Амитом за час и набрало 30 000 пользователей в магазине Chrome. Расширение было продано, деньги получены через PayPal, и Амит передал права на расширение другому аккаунту Google.

Через месяц новые владельцы отправили обновление в магазин Chrome. Никаких новых фич, никаких исправлений багов. Только добавление рекламы на все страницы, которые просматривает пользователь. Все ссылки на каждом сайте превратились в реферальные, по которым выкидывалась реклама. Кроме того, новые хозяева получили возможность отслеживать все переходы пользователей. Проще говоря, автообновление Chrome загрузило вредоносный код напрямую в 30 000 аккаунтов, а синхронизация Chrome Sync распространила это по каждому подключённому компьютеру с установленными Google Chrome, Chromium или Chrome OS.
Читать дальше →
Total votes 66: ↑65 and ↓1+64
Comments48

Введение в оптимизацию. Имитация отжига

Reading time10 min
Views185K
В этой статье я постараюсь максимально доходчиво рассказать о таком простом, но эффективном методе оптимизации, как имитация отжига (simulated annealing). А чтобы не быть причисленным к далёким от практики любителям теоретизировать, я покажу как применить этот метод для решения задачи коммивояжёра.

Для понимания статьи Вам понадобятся минимальные навыки программирования и владение математикой на уровне 9 класса средней школы. Статья рассчитана на людей не знакомых с методами оптимизации или только делающих первые шаги в этом направлении.

image


Читать дальше →
Total votes 148: ↑138 and ↓10+128
Comments37

Программист вспоминает свои заблуждения

Reading time6 min
Views36K
Давайте попробуем разобраться в ряде популярных заблуждений людей, начинающих свой бизнес: боязнь рассказать о своей идее, обязательное патентование, знание рынка до выхода на него и перфекционизм при разработке на начальном этапе. Буду рад рассказать вам об опыте борьбы с подобными «страхами», которые, не буду скрывать, и меня одолевали, когда только зарождался наш проект.

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

Как только я опишу идею, у меня её украдут, либо реализуют конкуренты


image

  • Одна и та же идея приходит сразу к множеству людей в актуальный момент. Это можно увидеть даже на примере почти одновременных открытий одних и тех же законов физики в разных странах.
  • Идея без реализации не стоит ничего. Предыдущий и этот тезис подтверждается комментаторами в предыдущей статье, которые говорят, что схожая идея была, но было как-то не до неё.
  • Пока Вы будете пилить понемногу что-то сами, кто-то уже запустит проект на рынок, т.к. он был сфокусирован и рисковал. У меня также был ряд идей, которые я воспринимал, как слишком сложные для самостоятельного запуска, а спустя полгода-год я встречал сырой, но работающий стартап, который успешно её реализовал.
Читать дальше →
Total votes 71: ↑62 and ↓9+53
Comments21

Движение внимания на основе непрерывно накапливаемого опыта восприятия, как основа предлагаемого подхода к проектированию сильного ИИ

Reading time3 min
Views17K

Направленное движение внимания — как основная функция сознания


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

Рассмотрим, пожалуй, одну из самых известных иллюстраций к тому, как работает зрение, исследуя зрительные объекты



Мы видим, что зрительное внимание подвижно.
А что если, само движение внимания и есть ключ к его пониманию?

Мы выдвинули гипотезу о том, что сознание направляет движение внимания, и представили себе следующий образ алгоритма сознательного зрительного восприятия



Как мог бы работать такой алгоритм?
Читать дальше →
Total votes 36: ↑26 and ↓10+16
Comments19

Атака с помощью вашего сервера времени: NTP amplification attack (CVE-2013-5211)

Reading time2 min
Views60K
13 января Компьютерная команда экстренной готовности США (US-CERT) выпустила предупреждение о новом способе DDoS-атак. Зараженные компьютеры отправляют запрос monlist с поддельным IP-адресом отправителя к NTP-серверу. Запрос monlist возвращает список из последних 600 клиентов ntpd. Таким образом, небольшим запросом от зараженного компьютера к жертве отправляется большой поток UDP. В этом и заключается сущность амплификации.

Незащищенный NTP-сервер становится невольным промежуточным звеном атаки.
Атаке подвержены версии ntpd до 4.2.7p26 (стабильная сейчас 4.2.6p5).

Проверить свой сервер на уязвимость можно выполнив команду
ntpdc -c monlist адрес_сервера
Если команда выдает список клиентов (а не «timed out, nothing received»), значит система уязвима.
Как бороться
Total votes 37: ↑36 and ↓1+35
Comments40

Крайне простой способ создать мультизагрузочную флешку под Debian/Ubuntu

Reading time4 min
Views263K
  • Под рукой есть лишняя флешка?
  • Есть желание заиметь удобный инструмент для борьбы с компьютерно-системными болезнями?
  • Не хочется таскать стопку дисков?
  • Пользуетесь Debian или его внучкой Ubuntu, или, может, они есть на виртуалке, заботливо созданой заранее?
  • Любите GUI там, где они действительно уместны?


Расскажу-ка я о LiveUSB Multiboot. Это опен-сорс программа (под GPLv3), которая даёт возможность легко и просто создать загрузочную флешку и кинуть пару образов со всем самым нужным, чтобы при случае запуститься с неё и не мучаться с ношением и записью дисков.
Читать дальше →
Total votes 29: ↑17 and ↓12+5
Comments22

Монады в Scala

Reading time4 min
Views50K
На Хабре много статей по монады с примерами для Haskell (http://habrahabr.ru/post/183150, http://habrahabr.ru/post/127556), но не так много статей, которые описывают, что такое монады с примерами на Scala. По сколько большинство разработчиков на Scala пришли из мира объектно ориентированного программирования, то для них, по началу, сложно понять что такое монады и для чего они нужны, эта статья как раз для таких разработчиков. В этой статье я хочу показать, что это такое и навести примеры использования монады Option, в следующих статьях будут описаны монады Try и Future.
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments15

CBOR — новый бинарный формат представления данных

Reading time9 min
Views62K
Concise Binary Object Representation (сжатое бинарное представление объекта) — формат данных, который был спроектирован таким образом, чтобы обеспечить максимально простой код реализации, формирования компактных выходных данных и возможность расширения формата без необходимости обмена информацией о версии.

Стандарт формата CBOR был официально анонсирован комитетом IETF в октябре 2013 года в новом документе RFC 7049, авторами которого являются Carsten Bormann и Paul Hoffman. Взглянув на имя первого автора, можно предположить другую причину происхождения аббревиатуры для названия формата, но возможно это просто совпадение. Формат CBOR получил MIME-тип application/cbor.

На данный момент существует, вероятно, сотни всевозможных бинарных форматов для представления структурированных данных, ряд которых стандартизирован, популярен и широко применяется (например, BER и DER для ASN.1, MessagePack и BSON). Все существующие стандарты решают поставленные перед ними задачи, и CBOR здесь не исключение. К формату было предъявлено семь важных требований, и, поскольку ни один из существующих форматов в полной мере не мог им удовлетворить, был создан новый (да, тут напрашивается картинка ).

Читать дальше →
Total votes 100: ↑100 and ↓0+100
Comments39

Опубликован исходный код Light Table

Reading time1 min
Views55K


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

Собрав необходимую сумму на Кикстартере, американский разработчик Крис Грэнджер сдержал слово — реализовал поддержку Python и опубликовал исходный код Light Table на Github.
Читать дальше →
Total votes 115: ↑107 and ↓8+99
Comments101

Всемирная база паролей к сетям Wi-Fi на вашем мобильнике

Reading time3 min
Views195K
Те из нас, кто много путешествует, наверняка не раз оказывались вот в такой ситуации: в городе, в который вы приехали, много беспроводных сетей, но все они с паролями (которых вы не знаете). Местной SIM-карты у вас нет, а интернет в роуминге у вас стоит как двигатель самолёта, на котором вы прилетели.

А вот здорово бы было, если бы хотя бы некоторые из этих паролей были бы вам известны. Давайте рассмотрим, как именно подобная система могла бы работать.
Читать дальше →
Total votes 63: ↑54 and ↓9+45
Comments72

Все технологии туннелирования IPv6 понятным языком

Reading time4 min
Views73K
Ура-ура, появился хаб IPv6!
В этой статье я хотел бы рассмотреть все актуальные способы туннелирования IPv6 через готовую IPv4-инфраструктуру, описанные в RFC 7059. Один из немногих RFC, написанных понятным человеческим языком, кстати.
Вы все еще сомневаетесь, нужен ли вам IPv6?
  • У всех устройств белый IP. Никаких NAT, никаких пробросов портов
  • Выше скорость скачивания торрентов за счет пиров, имеющих IPv6-адрес, но с «серым» IPv4.
  • В некоторых случаях, выше скорость доступа к сайтам (YouTube через IPv6 не тормозит по вечерам)
  • Доступ к сайтам, заблокированным в РФ, имеющим IPv6-адрес (nnm-club, например)
Но это еще не все. Представьте ситуацию, когда у вас сломался DHCP-сервер, а на компьютер в этой сети нужно побыстрее бы зайти. Он не получает IP-адрес, вы не можете на него зайти. Беда. Однако, если у вас был просто включен IPv6 — даже не настроен — то вы можете просто пропинговать магический адрес ff02::1, получить ответ от этого компьютера (т.к. у него в любом случае будет link-local IPv6-адрес!) и зайти на него.

Ну да ладно, перейдем к туннелированию.

6in4
Один из самых старых способов туннелирования, придуманный аж в 1996 году, и до сих пор очень популярный. Такие крупные туннель-брокеры, как Hurricane Electric, gogo6 и SIXXS используют его. Использует протокол 41 (не путайте с портом!) и не работает через NAT. Поддерживается всеми современными ОС из коробки.
Читать дальше →
Total votes 44: ↑42 and ↓2+40
Comments24

Как заставить себя работать?

Reading time6 min
Views416K
В понедельник утром за неделю до Нового Года этот вопрос, думаю, актуален для многих.

Есть куча статей на эту тему. Вот основные советы:
  • Начинайте с самой сложной задачи
  • Сделайте первый шаг — продолжать будет уже легче
  • Составьте план и неукоснительно ему следуйте
  • Занимайтесь любимым делом
  • Не отвлекайтесь

Всё просто. Закройте Хабр и приступайте к работе!

Только почему-то на меня все эти советы не действуют. Вроде правильные вещи люди говорят, но — не работает. Кстати, на тему «Почему не получается заставить себя работать?» тоже есть статьи. В них проблема описывается с точки зрения психологии и предлагаются решения вроде «избавьтесь от внутренних противоречий и страха перед неудачей». Наверное, если это сделать, то всё получится, но где найти эту волшебную кнопку «Избавиться от...»?
Читать дальше →
Total votes 143: ↑123 and ↓20+103
Comments112

Понимаем декораторы в Python'e, шаг за шагом. Шаг 2

Reading time12 min
Views230K

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


Итак, в первой части данной статьи мы совершили базовое знакомство с декораторами, принципами их работы и даже написали свой вручную.
Однако, все декораторы, которые мы до этого рассматривали не имели одного очень важного функционала — передачи аргументов декорируемой функции.
Что ж, исправим это недоразумение!
Читать дальше →
Total votes 73: ↑67 and ↓6+61
Comments25

Понимаем декораторы в Python'e, шаг за шагом. Шаг 1

Reading time6 min
Views439K

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

Итак, что же такое «декоратор»?


Впереди достаточно длинная статья, так что, если кто-то спешит — вот пример того, как работают декораторы:
def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped
 
def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped
 
@makebold
@makeitalic
def hello():
    return "hello habr"
 
print hello() ## выведет <b><i>hello habr</i></b>

Те же из вас, кто готов потратить немного времени, приглашаются прочесть длиииинный пост
Total votes 119: ↑106 and ↓13+93
Comments39

Производящие функции — туда и обратно

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

Введение


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

Идея производящих функций достаточно проста: сопоставим некоторой последовательности <g0, g1, g2, ..., gn> — дискретному объекту, степенной ряд g0 + g1z + g2z2 +… + gnzn +… — объект непрерывный, тем самым мы подключаем к решению задачи целый арсенал средств математического анализа. Обычно говорят, последовательность генерируется, порождается производящей функцией. Важно понимать, что это символьная конструкция, то есть вместо символа z может быть любой объект, для которого определены операции сложения и умножения.
Читать дальше →
Total votes 73: ↑70 and ↓3+67
Comments36

Прелюдия или как полюбить Haskell

Reading time3 min
Views30K
Добрый дня, уважаемые хабровчане. Всегда трудно начинать. Трудно начать писать статью, трудно начать отношения с человеком. Очень трудно, бывает, начать изучать новый язык программирования, особенно, если этот язык рушит все представления и устои, которые у вас были, если он противоречит привычной картине мира и пытается сломать вам мозг. Пример такого языка — Haskell.
Полюбить Haskell
Total votes 78: ↑57 and ↓21+36
Comments107

Однозначный tty для USB-устройств в FreeBSD

Reading time2 min
Views8.7K
Несколько лет назад пришлось решать следующую задачу. К хосту под управлением FreeBSD подключается несколько однотипных USB-устройств. Программное обеспечение хоста работает с ними через файлы символьных устройств. Понятно, что при произвольном переключении шнурков USB или при перезагрузке хоста, файлы символьных устройств нумеруются (в общем случае) совсем не в том порядке, как при первом подключении. В моем случае USB-устройства — конвертеры интерфейсов на которых висят шины RS-485 с приборами. Никаких возможностей автоматически определить по приборам в шине, какие шины повисли на каком порту нет. Таким образом непонятно, какие файлы символьных устройств каким физическим устройствам соответствуют в данный момент. Кому интересно решение, прошу под кат. Несмотря на специфичность задачи, способ универсальный.
Читать дальше →
Total votes 8: ↑6 and ↓2+4
Comments2

Простыми словами о преобразовании Фурье

Level of difficultyMedium
Reading time14 min
Views1.1M
Я полагаю что все в общих чертах знают о существовании такого замечательного математического инструмента как преобразование Фурье. Однако в ВУЗах его почему-то преподают настолько плохо, что понимают как это преобразование работает и как им правильно следует пользоваться сравнительно немного людей. Между тем математика данного преобразования на удивление красива, проста и изящна. Я предлагаю всем желающим узнать немного больше о преобразовании Фурье и близкой ему теме того как аналоговые сигналы удается эффективно превращать для вычислительной обработки в цифровые.

image (с) xkcd

Без использования сложных формул и матлаба я постараюсь ответить на следующие вопросы:
  • FT, DTF, DTFT — в чем отличия и как совершенно разные казалось бы формулы дают столь концептуально похожие результаты?
  • Как правильно интерпретировать результаты быстрого преобразования Фурье (FFT)
  • Что делать если дан сигнал из 179 сэмплов а БПФ требует на вход последовательность по длине равную степени двойки
  • Почему при попытке получить с помощью Фурье спектр синусоиды вместо ожидаемой одиночной “палки” на графике вылезает странная загогулина и что с этим можно сделать
  • Зачем перед АЦП и после ЦАП ставят аналоговые фильтры
  • Можно ли оцифровать АЦП сигнал с частотой выше половины частоты дискретизации (школьный ответ неверен, правильный ответ — можно)
  • Как по цифровой последовательности восстанавливают исходный сигнал


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

Итак, приступим?
Total votes 203: ↑192 and ↓11+181
Comments190

Алгоритм Х или что общего между деревянной головоломкой и танцующим Линком?

Reading time5 min
Views67K


Предисловие


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

Не можешь сам — заставь компьютер. Сказано — сделано. В результате написанному по наитию алгоритму пришлось работать всю ночь, чтобы найти все 4 уникальных решения. В процессе гугления решений для сравнения, я нашёл программу Burr Tools, которая справилась с этой задачей за 3 минуты на моём ноутбуке.

Такая разница в скорости заставила меня разобраться, как решается эта задача и ещё целый класс подобных.

Так как же решается эта задача и ещё целый класс подобных?
Total votes 145: ↑141 and ↓4+137
Comments14

Об одной изящной конструкции

Level of difficultyMedium
Reading time7 min
Views76K

Введение


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

Распечатать в порядке возрастания все несократимые дроби, знаменатель которых не превосходит заданного числа $n, \, n \le 100$.

Когда я прочитал условие задачи до конца, она не показалась мне сложной (она таковой и не является). Первое, что пришло мне в голову — это просто перебрать все знаменатели от $2$ до $n$ и для каждого знаменателя перебрать числители от $1$ до знаменателя, при условии, что числитель и знаменатель взаимно просты. Ну, а затем остается отсортировать их по возрастанию.

Такое решение верное, и задача прошла все назначенные ей тесты. Однако мой преподаватель сказал, что задачу можно решить намного красивее. Так я и познакомился с замечательной конструкцией: деревом Штерна — Броко.
Читать дальше →
Total votes 178: ↑172 and ↓6+166
Comments36

Information

Rating
Does not participate
Registered
Activity