Pull to refresh
3
0
Maruan Al-Shedivat @maruan_a

User

Send message

Python изнутри. Введение

Reading time7 min
Views99K
Boa constrictor1. Введение
2. Объекты. Голова
3. Объекты. Хвост
4. Структуры процесса

Помимо изучения стандартной библиотеки, всегда интересно, а иногда и полезно, знать, как язык устроен изнутри. Андрей Светлов (svetlov), один из разработчиков Python, советует всем интересующимся серию статей об устройстве CPython. Представляю вам перевод первого эпизода.

Мой друг однажды сказал мне: «Знаешь, для некоторых людей язык C — это просто набор макросов, который разворачивается в ассемблерные инструкции». Это было давно (для всезнаек: да, ещё до появления LLVM), но эти слова хорошо мне запомнились. Может быть, когда Керниган и Ритчи смотрят на C-программу, они на самом деле видят ассемблерный код? А Тим Бёрнерс-Ли? Может он сёрфит интернет по-другому, не так, как мы? И что, в конце концов, Киану Ривз видел в том жутком зелёном месиве? Нет, правда, что, чёрт побери, он там видел?! Эм… вернёмся к программам. Что видит Гвидо ван Россум, когда читает программы на Python?
Узнать ответ
Total votes 98: ↑93 and ↓5+88
Comments60

Crossfilter.js, dc.js и D3.js для визуализации Данных

Reading time4 min
Views35K
Приветствую ценителей красивой и функциональной визуализации данных! Предлагаю вашему вниманию небольшой обзор нескольких JavaScript библиотек, которые вкупе с D3.js позволят создать интерактивную визуализацию многомерных данных с возможностью применения фильтрации «на лету».


Заинтересовались, тогда добро пожаловать под кат.
Читать дальше →
Total votes 54: ↑52 and ↓2+50
Comments15

Эллиптическая криптография: теория

Reading time7 min
Views165K

Привет, %username%!
Недавно на хабре была опубликована очень спорная статья под названием «Эксперты призывают готовиться к криптоапокалипсису». Честно говоря, я не согласен с выводами авторов о том, что «голактеко опасносте», все скоро взломают и подорожает гречка. Однако я хочу поговорить не об этом.
В комментариях к той статье я высказал мнение, что кое в чем докладчики правы и переходить на эллиптическую криптографию уже давно пора. Ну в самом деле, кто-нибудь видел в интернете ECDSA сертификат? Хотя стандарту уже без малого 13 лет, мы продолжаем по старинке использовать старый добрый RSA. В общем сказал я это, и как это часто бывает, задумался а так ли необходим переход на «эллиптику»? Да и что это за зверь такой эллиптическая криптография? Какие имеет плюсы, минусы, тонкости. Одним словом, давайте разбираться.
Читать дальше →
Total votes 140: ↑133 and ↓7+126
Comments72

Социальная инженерия: ликбез про метод атаки, который никогда не устаревает

Reading time5 min
Views201K
Как показывает мировая практика успешно проведённых взломов (успешно для атакующих, разумеется), большая часть проблем связана именно с проблемами с людьми. Если быть более точным — дело в их способности выдать любую информацию и совершать совершенно дурацкие действия.

Думаю, IT-примеры вам и так прекрасно знакомы, поэтому напомню пример из книги «Психология влияния»: психологи обзванивали медсестёр в больницах, а затем представлялись врачом и отдавали распоряжение ввести смертельную дозу вещества пациенту. Сестра знала, что делает, но в 95% случаев выполняла команду (её останавливали на входе в палату ассистенты психолога). При этом врач даже не был хоть как-то авторизован. Почему сестра так делала? Просто потому, что она привыкла слушаться авторитета.

Давайте ещё раз: в примере благодаря грамотной социальной инженерии 95% больниц оказались критически уязвимы.
Читать дальше →
Total votes 124: ↑117 and ↓7+110
Comments82

Технология Real Time MapReduce в Яндексе. Как ускорить что-то очень большое

Reading time6 min
Views31K
Некоторое время назад мы рассказывали на Хабре о том, что поиск Яндекса стал более персонализированным. Он учитывает не только постоянные, но и сиюминутные интересы пользователя, ориентируясь на последние несколько запросов и действий.

Сегодня мы хотим рассказать о технологии Real Time MapReduce, благодаря которой всё это стало возможно. Она обеспечивает передачу и обработку огромных объёмов данных, необходимых для этой задачи, и чтобы сделать это, нам даже не пришлось переписывать код для MapReduce, который у нас уже использовался.



Чтобы персонализировать поисковую выдачу, нужно определить круг интересов пользователя, для чего мы сохраняем информацию о его поведении на странице поиска. Данные о действиях пользователя записываются в логи, а затем обрабатываются при помощи специальных алгоритмов, которые позволяют нам составить наиболее релевантную выдачу по запросу для каждого отдельно взятого пользователя. Сначала обработка логов запускалась раз в сутки, для чего очень хорошо подходила технология распределенных вычислений MapReduce. Она прекрасно справляется с анализом значительных объемов данных.
Читать дальше →
Total votes 83: ↑75 and ↓8+67
Comments18

Raytracing render на C

Reading time12 min
Views75K
Имея опыт разработки на одном из высокоуровневых языков программирования, а также интерес к задачам из различных областей информатики, я наконец нашел возможность овладеть еще одним инструментом — языком программирования С. Исходя из собственного опыта — знания лучше усваиваются, если применять их для решения практических задач. Поэтому, было решено реализовать с нуля Ray tracing рендер (поскольку увлекаюсь компьютерной графикой ещё со школьных времен).

В данной статье хочу поделиться собственным подходом и полученными результатами.


Читать дальше →
Total votes 115: ↑109 and ↓6+103
Comments54

Как музыка влияет на продуктивность

Reading time3 min
Views182K


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

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

Когда мы слушаем музыку, активируется часть мозга, называемая nucleus accumbens (центр удовольствия), которая вырабатывает дофамин — гормон, влияющий на настроение. Он располагается в «вентральной области покрышки» (ventral tegmental area, VTA). Все это — часть «системы награждения» (reward system) мозга.
Читать дальше →
Total votes 57: ↑48 and ↓9+39
Comments113

Понимание ООП на джаваскрипте (ES5), часть 2

Reading time12 min
Views44K


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

Для полноты статьи и единого стиля, перевод начинается с вопросов наследования, несмотря на то, что они уже были упомянуты в конце первой части. Далее рассматриваются разнообразные задачи наследования так, как их рассмотрел автор. Надо сказать, что автор широко использует новые конструкции ES5 (объяснив это в конце), которые работают не во всех браузерах и заслоняют от понимания реализацию их на низком уровне языка, на котором они изначально применялись. Для настоящего понимания наследования следует обратиться к более глубокому разбору реализаций или к реализациям методов-обёрток из ES5: Object.create, Object.defineProperty, Function.bind, get и set literals, Object.getOwnPropertyNames, Object.defineProperty, Object.getOwnPropertyDescriptor, Object.getPrototypeOf. Часть их разбирается в статье (Object.create, get и set, Object.defineProperty, bind), но не всегда в порядке появления. Таким образом, статья стремится преподнести не реализацию наследования вообще, а ту реализацию, которую успели формализовать в рабочем черновике стандарта EcmaScript 5. Это лучше, чем ничего, но несколько меньше, чем полное понимание реализаций наследования.

Зато, данная часть статьи в нескольких (4) крупных примерах кода демонстрирует чистейшее прототипное наследование, которому не требуется привлекать понятие конструктора (хотя он там, в .create(), незримо присутствует), о котором много говорят и которое исключительно редко в чистом виде встречается.
Краткое содержание первой части
1. Объекты
  1.1 Что есть объекты? (список свойств)
  1.2 Создание свойств (Object.defineProperty)
  1.3 Описатели свойств (Object.defineProperty)
  1.4 Разбор синтаксиса (bracket notation: object['property'])
  1.5 Доступ к свойствам (через скобочную нотацию)
  1.6 Удаление свойств (оператор delete)
  1.7 Геттеры и сеттеры (методы доступа и записи)
  1.8 Списки свойств (getOwnPropertyNames, keys)
  1.9 Литералы (базовые операторы) объекта
2. Методы
  2.1 Динамический this
  2.2 Как реализован this
    2.2.1 Если вызывается как метод объекта
    2.2.2 При обычном вызове функции (this === global)
    2.2.3 При явном указании контекста (.apply, .call)
  2.3 Привязывание методов к контексту (.bind)
Cодержание части 2
3. Прототипное наследование
  3.1 Прототипы
  3.2 Как работает [[Prototype]]
  3.3 Переопределение свойства
  3.4 Миксины (примеси)
  3.5 Доступ к экранированным ('перезаписанным') свойствам
План части 3
4. Конструкторы
  4.1 Магия оператора new
  4.2 Наследование с конструкторами
5. Соглашения и совместимость
  5.1 Создание объектов
  5.2 Определение свойств
  5.3 Списки свойств
  5.4 Методы связывания
  5.5 Получение [⁣[Prototype]⁣]
  5.6 Библиотеки обратной совместимости
6. Синтаксические обёртки
7. Что читать дальше
8. Благодарности
Примечания

3. Прототипное наследование


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

Далее в игру вступает наследование. Оно лучше разделяет понятия, когда объекты наделяются своими методами на основе методов других объектов.

Прототипное наследование идёт дальше и может избирательно расширять методы, описывать общее поведение и использовать другие занятные приёмы, которых мы коснёмся. Печалит лишь то, что модель наследования в JS немного ограничена, и для обхода трудностей эти приёмы будут временами избыточны выносить мозг.
дальше
Total votes 54: ↑48 and ↓6+42
Comments22

Решение задачи кластеризации методом градиентного спуска

Reading time6 min
Views26K
Привет. В этой статье будет рассмотрен способ кластеризации данных, используя метод градиентного спуска. Честно говоря данный способ носит больше академический характер, нежели практический. Реализация этого метода мне понадобилась в демонстрационных целях для курса по машинному обучению, что бы показать как одинаковые задачи можно решить различными способами. Хотя конечно если вы планируете осуществить кластеризацию данных, используя дифференцируемую метрику, для которой вычислительно труднее найти центроид, нежели подсчитать градиент на некотором наборе данных, то этот метод может быть полезным. Итак если вам интересно как можно решить задачу k-means кластеризации с обобщенной метрикой используя метод градиентного спуска, прошу под кат. Код на языке R.
Читать дальше →
Total votes 50: ↑48 and ↓2+46
Comments8

Часть 3. Как подключить смартфон к авто — читаем данные

Reading time6 min
Views114K
Мы продолжаем цикл статей о том, как подключиться к бортовой системе своего автомобиля (см. Часть 1 и Часть 2 ) и сегодня расскажем как считывать данные.

Предполагается, что к текущему моменту у нас есть машина с диагностическим разъемом, отвечающим OBD-II стандарту, любимое мобильное устройство (ноутбук, смартфон, планшет) и адаптер на базе ELM327, который позволит соединить машину и мобильное устройство.

Как уже говорилось в предыдущей части, независимо от типа связи между мобильным устройством и адаптером (Bluetooth, Wi-Fi, USB) на логическом уровне, — это последовательное соединение. На программном уровне необходимо открыть Socket соединение между компьютером и адаптером поверх имеющегося соединения нижнего уровня. Практическая программная реализация будет зависеть от операционной системы и типа соединения, примеров можно найти массу под все ваши любимые языки программирования. В качестве базового примера можно брать реализацию соединения на примерах чат-программ для Bluetooth или TCP\IP. В данной статье мы не будем останавливаться подробно на реализации такого соединения, для экспериментов нам хватит возможностей имеющихся программ а-ля Telnet, для экспериментов под Андроид и iOS мы встроили простую командную консоль в наше приложение OBD Car Doctor.
Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments6

Настоящий многопоточный веб-сервер на ассемблере под Linux

Reading time7 min
Views74K
Добрый день, хабр!
Сегодня я вам расскажу как написать свой настоящий веб-сервер на асме.

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

Уже только ленивый не писал подобных статей, — сервер на perl, node.js, по-моему даже были попытки на php.

Вот только на ассемблере еще не было, — значит нужно заполнить пробелы.
Читать дальше →
Total votes 195: ↑183 and ↓12+171
Comments91

Скрытые цепи Маркова, алгоритм Баума-Велша

Reading time4 min
Views24K
Скрытые модели/цепи Маркова одни из подходов к представлению данных. Мне очень понравилось как обобщается множество таких подходов в этой статье.

В продолжение же моей предыдущей статьи описания скрытых моделей Маркова, задамся вопросом: откуда взять хорошую модель? Ответ достаточно стандартен, взять неплохую модель и сделать из нее хорошую.

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

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

Знай сложности алгоритмов

Reading time2 min
Views1M
Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
Читать дальше →
Total votes 312: ↑296 and ↓16+280
Comments99

Хроническая усталость, апатия, сезонная «депрессия» и многое другое: тривиальная причина

Reading time8 min
Views684K
На хабре часто публикуют статьи о самоорганизации — нам всем хочется меньше прокрастинировать, и делать больше полезного. Но что если делать полезное мешает дичайшая усталость? Никакая организация задач усталость не уберет.

Казалось бы, работа у IT-шников несложная — вагоны не разгружаем, землю не роем и уставать физически не должны. Однако о дичайшей усталости людей занятых интеллектуальным трудом приходится слышать чаще, чем хотелось бы. После того как я приехал в Москву 3 года назад — я почему-то начал дичайше уставать на совершенно ровном месте, и ни я, ни врачи не могли найти причину. После 2-х лет поисков тривиальная и легко исправимая причина нашлась, и на мой взгляд — в группе риска находятся практически все люди, занимающиеся интеллектуальным трудом. Ситуация усугубляется двумя народными обычаями.

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

1) Летом все ок, а зимой — апатия, ничего не хочется делать. Это любят называть сезонной «депрессией».
2) Утром все ок, а к вечеру на работе — мозги «не варят», ничего не хочется делать — только хабр и reddit листать. Приходите домой — и с дичайшей усталостью падаете в кресло. Сил хватает только лазить в интернете до ночи. Этот пункт — касается и работодателей, есть шанс, что люди вечером перестают работать не из-за своей лени.
3) Даже если вы просыпаетесь без будильника — вы не высыпаетесь.
4) Кофе и прочие стимуляторы — не дают бодрости, лишь делают вас злее.
5) Даже если вы спите «сколько влезет» — сны короткие и не запоминающиеся, или их нет вообще.
6) Вы замечаете, что даже 1 вещь вам иногда трудно удержать в голове. Мы можете забыть что вы сейчас хотели сделать.
7) Вы просыпаетесь уже с дичайшей усталостью
8) Вам кажется, что в комнате темно и все несколько не резкое.
Читать дальше →
Total votes 336: ↑320 and ↓16+304
Comments374

Новое для веб-дизайнера за июль 2013

Reading time2 min
Views35K
Новые полезные инструменты, сервисы, статьи, бесплатности для веб-дизайнеров за июль 2013. Остальные подборки доступны по тегу "новое для веб-дизайнера".

Сервисы




I Want To Use — на сайте можно выбрать CSS-фичи, которые хотите использовать, и будет показан процент пользователей, которые смогут их использовать.
Читать дальше →
Total votes 48: ↑44 and ↓4+40
Comments9

Tolstoy Summer Camp: Яндекс будет учить создавать проекты

Reading time3 min
Views25K
1 июля в московском офисе Яндекса начинает работать летняя мастерская стартапов Tolstoy Summer Camp – эксперимент, который будет длиться 2 месяца. Мы собираем вместе 50-60 молодых, талантливых, амбициозных, добавляем к ним экспертов и ждём результат.

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



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

  • Сергей Белоусов (Runa Capital, Acronis, Parallels),
  • Esther Dyson из EDventure,
  • Илья iseg Сегалович (Яндекс),
  • Jennifer Hicks (Forbes),
  • Григорий bobuk Бакунов (Яндекс),
  • Игорь Мацанюк (Farminers, Games Insight)
  • Илья Красинский (LinguaLeo) и многие другие.

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

Так как никакой проект не может состояться без разработчиков и дизайнеров, мы ждем у себя не только менеджеров, но и людей, которые умеют писать хороший код и рисовать красивые интерфейсы. Для них мы также организуем специальную программу, куда постараемся пригласить только лучших из лучших с рассказами о последних тенденциях в дизайне, mobile, big data, open source и т.д. Об этой программе мы расскажем отдельно.

Мы принимаем заявки до 31 мая. Подробности — дальше.
Читать дальше →
Total votes 76: ↑65 and ↓11+54
Comments49

Сравнение Open Source лицензий от GitHub

Reading time1 min
Views26K


Команда GitHub запустила новый проект — Choose A License, который поможет выбрать нужную Open Source лицензию для вашего проекта. На главной странице кратко представлены самые популярные — MIT License, Apache License и GPL.
Читать дальше →
Total votes 35: ↑29 and ↓6+23
Comments7

Vim-airline — новая строка статуса для Vim

Reading time2 min
Views27K


Известно что строку статуса в Vim можно легко кастомизировать в соответствии с вашими пожеланиями: вывести информацию о текущем файле, позиции курсора, текущей vcs-ветке. Есть также отдельные плагины, которые полностью заменяют строку статуса, самым используемым из которых является vim-powerline. В данной статье я хочу познакомить вас с одним из таких плагинов, vim-airline, который я с недавнего времени использую вместо vim-powerline.
Читать дальше →
Total votes 46: ↑44 and ↓2+42
Comments9

Python: декорируем декораторы. Снова

Reading time5 min
Views34K
В прошлом году на Хабре уже была очень развёрнутая статья в двух частях о декораторах. Цель этой новой статьи — cut to the chase и сразу заняться интересными, осмысленными примерами, чтобы успеть затем разобраться в примерах ещё более мудрёных, чем в предыдущих статьях.
Целевая аудитория — программисты, уже знакомые (например по C#) с функциями высшего порядка и с замыканиями, но привыкшие, что аннотации у функций — это «метаинформация», проявляющаяся только при рефлексии. Особенность Питона, сразу же бросающаяся в глаза таким программистам — то, что присутствие декоратора перед объявлением функции позволяет изменить поведение этой функции:



Как это работает?
Читать дальше →
Total votes 31: ↑27 and ↓4+23
Comments16

Юзабилити-лаборатория: опыты на людях и для людей

Reading time4 min
Views22K


Что это? Указатель лазерного прицела? Программа, погружающая пользователя в гипноз? Ответ под катом…
Пятый этаж, небольшой кабинет. Перед монитором сидит молодая девушка, облепленная датчиками. Все ее действия фиксирует камера, а в соседней комнате за происходящим следят несколько наблюдателей. Она напряжена. Впрочем, похоже, ее не смущает пристальное внимание. Дело в другом: на мониторе разворачиваются боевые действия, в которых она — один из главных участников. Обстановка накаляется…

Читать дальше →
Total votes 50: ↑43 and ↓7+36
Comments27

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity