Pull to refresh
26
0
Тимур Козьменко @Timrael

User

Send message

Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в степень

Reading time20 min
Views84K
Пусть мы хотим вычислить десятимиллионное число Фибоначчи программой на Python. Функция, использующая тривиальный алгоритм, на моём компьютере будет производить вычисления более 25 минут. Но если применить к функции специальный оптимизирующий декоратор, функция вычислит ответ всего за 18 секунд (в 85 раз быстрее):


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

Эта статья расскажет о том, в каких случаях и каким образом декоратору удаётся делать подобные оптимизации. Также вы сможете сами скачать и протестировать библиотеку cpmoptimize, содержащую данный декоратор.
Читать дальше →
Total votes 216: ↑213 and ↓3+210
Comments43

Freemium или Free Trial — какую бизнес модель выбрать при продаже софта?

Reading time10 min
Views34K


Модель монетизации – это именно тот пунктик в стратегии каждого проекта, как облачного сервиса, так и оффлайнового бизнеса, который в конечном итоге определяет его успешность. Правильная модель монетизации — своеобразный ключ от квартиры, где деньги лежат. Если же он не подходит, то вряд ли этот стартап превратится в реальный бизнес. Для облачных сервисов последнее время популярны различные вариации бесплатных версий или пробного периода. В связи с этим мы хотим поделиться статьей Линкольна Мёрфи, которая может помочь подобрать правильный «ключ» к успешному бизнесу, и ответит на вопросы, что лучше – freemium или бесплатный пробный период – free trial. Статья написана от первого лица.
Читать дальше →
Total votes 27: ↑22 and ↓5+17
Comments9

Настоящее модульное тестирование в AngularJS

Reading time12 min
Views42K
AngularJS молод и горяч, когда дело доходит до современной веб разработки. Его уникальный подход к компиляции HTML и двусторонней привязки данных делает его эффективным инструментом для создания клиентских веб приложений. Когда я узнал что Quick Left (студия в которой работает автор. прим. пер.) будет использовать его для создания приложения для одного из наших клиентов, я был взволнован и постарался узнать о angular столько сколько мог. Я обошел весь интернет, каждый урок и руководство, которые смог найти в Google. Они были реально полезны в понимании работы директив, шаблонов, компиляции и цикла обработки событий (digest), но когда дело дошло до тестирования, я обнаружил что эта тема была просто упущена.

Я обучался подходу TDD (Разработка через тестирование) и я чувствую себя не в своей тарелке без подхода «Красный-Зеленый-Рефакторинг». Так как мы все еще разбирались что к чему в тестировании в Angular, команде иногда приходилось полагаться на подход «тестирование-после». Это начало нервировать меня, поэтому я решил сосредоточится на тестировании. Я потратил на это недели, и в скором времени покрытие тестами поднялось с 40% до 86% (Кстати, если вы еще этого не делали, можете попробовать Istabul для проверки покрытия кода в вашем JS приложении).

Читать дальше →
Total votes 38: ↑36 and ↓2+34
Comments1

Обзор 7 самых популярных кроссплатформенных мобильных фреймворков

Reading time10 min
Views113K

На работе меня попросили сделать сравнительную характеристику нескольких продуктов для создания кроссплатформенных мобильных приложений: Appcelerator Titanium, Kony Platform, Adobe PhoneGap, IBM Worklight, Telerik Platform, Verivo Akula, Xamarin. Потратил немало времени, поэтому решил, что лучше поделиться с хабрасообществом полученными данными, вдруг кому покажется полезным. Сразу скажу, что кроме PhoneGap я до этого не сталкивался и не работал ни с каким из этих фреймворков, поэтому уверен, что что-то упустил, где-то, возможно, не так понял, а в чем-то оказался не прав. Но в комментариях надеюсь услышать ваше мнение и исправить недочеты.

В конце статьи поместил несколько опросов, которые помогут понять популярность и рейтинг этих фреймворков.
Здорово, хочу дальше
Total votes 55: ↑48 and ↓7+41
Comments53

Работа с геолокациями в режиме highload

Reading time6 min
Views59K
При разработке ПО часто возникают интересные задачи. Одна из таких: работа с гео-координатами пользователей. Если вашим сервисом пользуются миллионы пользователей и запросы к РСУБД происходят часто, то выбор алгоритма играет важную роль. О том как оптимально обрабатывать большое количество запросов и искать ближайшие гео-позиции рассказано под катом.

image
Читать дальше →
Total votes 37: ↑35 and ↓2+33
Comments12

ANGULARJS + REQUIREJS

Reading time5 min
Views55K

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

Итак, опишем наш взгляд на решение проблемы.

Для чего?

Работая с AngularJs вы обязательно задумаетесь о правильной организации кода. Конечно уже существуют отличные примеры решения проблемы. Например можно изучить теоретический пост Брайана Форда или практическое руководство Клиффа Мейерса. Я же поделюсь способом организации кода в приложениях AngularJs с использованием RequireJs.

Данный подход будет полезен, если вы хотите:

  • перестать беспокоиться о подключении скриптов в правильном порядке;
  • загружать javascript код асинхронно;
  • иметь возможность скомпилировать код в один минифицированный JS-файл;
Читать дальше →
Total votes 34: ↑34 and ↓0+34
Comments66

Дайджест статей по анализу данных и big data

Reading time2 min
Views33K
Частенько читаю Хабр и заметил что в последнее время появились Дайджесты новостей по многим тематикам, таким как веб-разработка на php, разработка на Python, мобильные приложения, но не встретил ни одного подборки по популярному сейчас направлению, а именно анализу данных и big data.

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

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

Читать дальше →
Total votes 45: ↑42 and ↓3+39
Comments15

Дизайн и архитектура в ФП. Часть 3

Reading time21 min
Views13K
Свойства и законы. Сценарии. Inversion of Control в Haskell.

Совсем немного теории

В прошлой части мы убедились, что очень легко запутаться в плохо спроектированном коде. К счастью, с древних времен нам известен принцип “разделяй и властвуй”, — он широко применяется при построении архитектуры и дизайна больших систем. Мы знаем разные воплощения этого принципа, как-то: разделение на компоненты, уменьшение зависимости между модулями, интерфейсы взаимодействия, абстрагирование от деталей, выделение специфических языков. Это хорошо работает для императивных языков, и надо полагать, что будет работать в функциональных, за тем исключением, что средства реализации будут другими. Какими же?
Читать дальше →
Total votes 20: ↑17 and ↓3+14
Comments6

Введение в анализ сложности алгоритмов (часть 1)

Reading time10 min
Views385K
От переводчика: данный текст даётся с незначительными сокращениями по причине местами излишней «разжёванности» материала. Автор абсолютно справедливо предупреждает, что отдельные темы покажутся чересчур простыми или общеизвестными. Тем не менее, лично мне этот текст помог упорядочить имеющиеся знания по анализу сложности алгоритмов. Надеюсь, что он будет полезен и кому-то ещё.
Из-за большого объёма оригинальной статьи я разбила её на части, которых в общей сложности будет четыре.
Я (как всегда) буду крайне признательна за любые замечания в личку по улучшению качества перевода.


Введение


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

Тем не менее, знание теории тоже имеет свои преимущества и может оказаться весьма полезным. В этой статье, предназначенной для программистов, которые являются хорошими практиками, но имеют слабое представление о теории, я представлю один из наиболее прагматичных программистских инструментов: нотацию «большое О» и анализ сложности алгоритмов. Как человек, который работал как в области академической науки, так и над созданием коммерческого ПО, я считаю эти инструменты по-настоящему полезными на практике. Надеюсь, что после прочтения этой статьи вы сможете применить их к собственному коду, чтобы сделать его ещё лучше. Также этот пост принесёт с собой понимание таких общих терминов, используемых теоретиками информатики, как «большое О», «асимптотическое поведение», «анализ наиболее неблагоприятного случая» и т.п.
Читать дальше →
Total votes 106: ↑98 and ↓8+90
Comments27

Не заставляйте (не)равенства в JavaScript выглядеть хуже, чем они есть

Reading time3 min
Views27K
Время от времени я встречаю публикации, где рассказывается о том, какие из значений оператора == эквивалентны (как, например, здесь). Часто при этом оговаривается, что приведённые в таблице данные не очень хорошо организованы.

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



Кошмар, товарищи!.. Как по мне, так здесь бóльший беспорядок в очерёдности строк/столбцов.
Читать дальше →
Total votes 72: ↑65 and ↓7+58
Comments67

Лёгкий способ писать iOS приложения на вебе

Reading time9 min
Views84K
Всем привет. Не так давно Габриель подарил нам игру 2048. Это тот самый удивительный случай, когда клон игры становится более популярный, чем оригинал. Не малая часть успеха Габриеля — открытый код и, вуаля, MIT лицензия. Набрав чуть больше 20к очков, захотелось поделиться результатом с друзьями, кроме как сделать скриншот не получилось. Глянул аппстор на наличие клона с геймцентром или чем-то подобным — пусто. И тут подумал, почему бы нет?
Забегая вперёд, на создание приложения и всех «ништяков» к нему ушло 4 дня. На выходе универсальный код, который от части работает и в вебе и легко портируется на иос/андроид. Однако, давайте по порядку.


Читать дальше →
Total votes 78: ↑65 and ↓13+52
Comments41

Diff-алгоритм React

Reading time5 min
Views28K
React — это JavaScript библиотека для создания пользовательских интерфейсов от Facebook. Она была разработана «с нуля», с упором на производительность. В этой статье я расскажу вам о diff-алгоритме и механизме рендеринга, который использует React, что позволит вам оптимизировать ваши приложения.

Diff Алгоритм


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

var MyComponent = React.createClass({
  render: function() {
    if (this.props.first) {
      return <div className="first"><span>A Span</span></div>;
    } else {
      return <div className="second"><p>A Paragraph</p></div>;
    }
  }
});

В любой момент времени вы можете описать, как будет выглядеть ваш UI. Важно понимать, что результат рендеринга не является фактическим DOM деревом. Это всего лишь легковесные JS объекты, которые мы называем «виртуальный DOM».
Читать дальше →
Total votes 49: ↑48 and ↓1+47
Comments4

Концепт AngularJS service для именованных соединений socket.io

Reading time5 min
Views13K
Доброго времени суток, друзья!

В процессе работы над одним сервисом, фронтенд которого построен на AngularJS, возникла необходимость общаться с сервером socket.io по разным логическим каналам. При этом было желание обойтись всего одним реальным физическим соединением с сервером и иметь в коде приложения отдельные объекты подключений для каждого канала. Что из этого получилось, можно посмотреть под катом.


Читать дальше →
Total votes 22: ↑16 and ↓6+10
Comments4

Логика мышления. Часть 1. Нейрон

Reading time10 min
Views316K


Года полтора назад я выкладывал на Хабр цикл видеолекций с моим видением того как работает мозг и каковы возможные пути создания искусственного интеллекта. За прошедшее с тех пор время удалось существенно продвинуться вперед. Что-то получилось глубже понять, что-то удалось смоделировать на компьютере. Что приятно, появились единомышленники, активно участвующие в работе над проектом.

В настоящем цикле статей планируется рассказать о той концепции интеллекта над которой мы сейчас работаем и продемонстрировать некоторые решения, являющиеся принципиально новыми в сфере моделирования работы мозга. Но чтобы повествование было понятным и последовательным оно будет содержать не только описание новых идей, но и рассказ о работе мозга вообще. Какие-то вещи, особенно в начале, возможно покажутся простыми и общеизвестными, но я бы советовал не пропускать их, так как они во многом определяют общую доказательность повествования.
Читать дальше →
Total votes 62: ↑53 and ↓9+44
Comments23

Искусственный интеллект для программистов

Reading time5 min
Views89K
Как случилось, что искусственный интеллект успешно развивается, а «правильного» определения для него до сих пор нет? Почему не оправдались надежды, возлагавшиеся на нейрокомпьютеры, и в чем заключаются три главные задачи, стоящие перед создателем искусственного интеллекта?

На эти и другие вопросы вы найдете ответ в статье под катом, написанной на основе выступления Константина Анисимовича, директора департамента разработки технологий ABBYY, одного из ведущих экспертов страны в сфере искусственного интеллекта.
При его личном участии были созданы технологии распознавания документов, которые применяются в продуктах ABBYY FineReader и ABBYY FormReader. Константин рассказал об истории и основах разработки AI на одном из мастер-классов для студентов Технопарка Mail.Ru. Материал мастер-класса и стал базой для цикла статей.

Всего в цикле будет три поста:
Искусственный интеллект для программистов
Применение знаний: алгоритмы поиска в пространстве состояний
• Получение знаний: инженерия знаний и машинное обучение
Читать дальше →
Total votes 93: ↑72 and ↓21+51
Comments26

Бесплатные скринкасты для изучения Go

Reading time1 min
Views9.7K
На сайте GoCasts.io опубликована небольшая подборка скринкастов, обучающих программированию на языке Go. Всего опубликовано три скринкаста от Алана Харпера. Приятно, что в качестве примеров выбраны не абстрактные, а самые практичные примеры из реальной жизни.

#1 – HTTP Get
Как осуществить простой HTTP-запрос с использованием пакета net/http в стандартной библиотеке Go.
Читать дальше →
Total votes 33: ↑31 and ↓2+29
Comments3

Machine Learning. Курс от Яндекса для тех, кто хочет провести новогодние каникулы с пользой

Reading time8 min
Views265K
Новогодние каникулы – хорошее время не только для отдыха, но и для самообразования. Можно отвлечься от повседневных задач и посвятить несколько дней тому, чтобы научиться чему-нибудь новому, что будет помогать вам весь год (а может и не один). Поэтому мы решили в эти выходные опубликовать серию постов с лекциями курсов первого семестра Школы анализа данных.

Сегодня — о самом важном. Современный анализ данных без него представить невозможно. В рамках курса рассматриваются основные задачи обучения по прецедентам: классификация, кластеризация, регрессия, понижение размерности. Изучаются методы их решения, как классические, так и новые, созданные за последние 10–15 лет. Упор делается на глубокое понимание математических основ, взаимосвязей, достоинств и ограничений рассматриваемых методов. Отдельные теоремы приводятся с доказательствами.



Читает курс лекций Константин Вячеславович Воронцов, старший научный сотрудник Вычислительного центра РАН. Заместитель директора по науке ЗАО «Форексис». Заместитель заведующего кафедрой «Интеллектуальные системы» ФУПМ МФТИ. Доцент кафедры «Математические методы прогнозирования» ВМиК МГУ. Эксперт компании «Яндекс». Доктор физико-математических наук.
Содержание и видео всех лекций курса
Total votes 172: ↑166 and ↓6+160
Comments47

Google Photon. Обработка данных со скоростью света*

Reading time9 min
Views18K
Photon – масштабируемая, отказоустойчивая и географически распределенная система обработки потоковых данных в режиме реального времени. Система является внутренним продуктом Google и используется в Google Advertising System. Research paper [5], описывающие базовые принципы и архитектуру Photon, был представлен на научной конференции ACM SIGMOD в 2013 году.

В paper [5] заявлено, что пиковая нагрузка на систему может составлять миллионы событий в минуту со средней end-to-end задержкой менее 10 секунд.
* 'Скорость света' в заголовке — наглая ложь гипербола.


Читать дальше →
Total votes 39: ↑33 and ↓6+27
Comments14

Как оптимизировать процессы Unicorn в Ruby on Rails приложении

Reading time5 min
Views14K

Если вы являетесь rails-разработчиком, то вы наверняка слышали про Unicorn, http-сервер, способный одновременно обрабатывать множество запросов.

Для обеспечения параллельности Unicorn использует создание множества процессов. Т.к. созданные (форкнутые) процессы являются копиями друг друга, это значит, что rails-приложение должно быть потокобезопасным.

Это здорово, т.к. нам тяжело быть уверенными, что наш код является потокобезопасным. Если мы не можем быть уверены в этом, то ни о параллельных веб-серверах, таких как Puma, ни даже об альтернативных реализациях Ruby, реализующих параллелизм, таких как JRuby и Rubinius, не может быть и речи.

Поэтому Unicorn предоставляет нашим rails-приложениям параллельность даже если они не потокобезопасны. Однако, это требует определенной платы. Rails-приложения, запускаемые на Unicorn’е требуют гораздо больше памяти. Не обращая никакого внимания на потребление памяти вашим приложением, вы можете в итоге обнаружить, что ваш облачный сервер перегружен.

В этой статье мы рассмотрим несколько способов использования параллельности Unicorn'а, при этом контролируя количество потребляемой памяти.
Читать дальше →
Total votes 22: ↑18 and ↓4+14
Comments24

Ruby on Rails и Nginx: эффективно отдаем большие файлы

Reading time2 min
Views10K
В этом посте я расскажу, как правильно настроить Nginx для максимально эффективной отдачи больших файлов из вашего rails приложения. К своему удивлению, на русском языке я такой информации не нашел. Есть статьи про использование X-Accel-Redirect совместно с php, а вот чтобы про рельсы да на родном языке что-то не густо… Вобщем, постараюсь восполнить этот пробел.

Задача


Итак, исходные данные следующие:
  • мы используем Ruby on Rails, запросы пользователей проходят через Nginx;
  • нам нужно отдавать большие файлы;
  • файлы должны быть недоступны для прямого скачивания, решение об отдаче файла принимает rails приложение.

Читать дальше →
Total votes 34: ↑30 and ↓4+26
Comments12

Information

Rating
Does not participate
Location
Владивосток, Приморский край, Россия
Date of birth
Registered
Activity