Как стать автором
Обновить
203
0
Александр Гранин @graninas

Автор книг об архитектуре и дизайне ПО в ФП

Отправить сообщение

Функциональное программирование: дурацкая игрушка, которая убивает производительность труда. Часть 1

Время на прочтение10 мин
Количество просмотров87K
Возможно, вы уже слышали о так называемом «функциональном» программировании. Возможно, вы даже подумываете о том, что вам стоит его как-нибудь попробовать.

Ни в коем случае этого не делайте!



Функциональное программирование полно недочётов, оно не подходит для реальных проектов. Его применение приведёт к резкому падению производительности труда. Почему это так? Давайте выясним.

▍→ Часть 2
Читать дальше →
Всего голосов 168: ↑100 и ↓68+32
Комментарии403

Создание «искусственной жизни» на компьютере

Время на прочтение10 мин
Количество просмотров110K
Всем привет. В статье хочу описать свой эксперимент по созданию «искусственной жизни» на компьютере.

Как это выглядит?

картинка кликабельна

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

Ну а дальше за работу принимается эволюция и естественный отбор.

А мне остаётся только наблюдать за развитием мира.

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

Поведением ботов управляет код, записанный в них.

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

Внутреннее устройство кода — это самое интересное в проекте.

Код должен быть простым и выдерживать различные модификации (случайное изменение любого элемента в коде) над собой без синтаксических ошибок.
Читать дальше →
Всего голосов 214: ↑210 и ↓4+206
Комментарии393

Анатомия науки: преемственность, которой уже нет

Время на прочтение5 мин
Количество просмотров1.7K
image


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

Доброго всем времени суток!

Жаркая дискуссия по поводу Как «Фобос-Грунт» строился со всей очевидностью показывает, что большинство читателей просто не понимает, как устроены передача и развитие знаний в науке и что из того следует. А поскольку большая часть Хабра, как я наблюдаю, очень молодые читатели, не обладающие в необходимом объёме пониманием, как все устроено, позволю небольшое напоминание.

Сначала опишу простые, но, как правило, не очень понятные многим условия в науке:
Читать дальше
Всего голосов 153: ↑144 и ↓9+135
Комментарии238

Р. Фейнман «Характер физических законов» (третья лекция)

Время на прочтение1 мин
Количество просмотров2.6K
Представляю вашему вниманию третью лекцию из семи прочитанных лауреатом нобелевской премии профессором Ричардом Фейнманом в Корнелльском университете в 1964г, которая называлась «Великие законы сохранения».

image

На яндекс видео:
video.yandex.ru/users/ztarlitz/view/5

Список лекций:

Лекция 1 — ПРИМЕР ФИЗИЧЕСКОГО ЗАКОНА — ЗАКОН ТЯГОТЕНИЯ
Лекция 2 — СВЯЗЬ МАТЕМАТИКИ С ФИЗИКОЙ
Лекция 3 — ВЕЛИКИЕ ЗАКОНЫ СОХРАНЕНИЯ
Лекция 4 — СИММЕТРИЯ ФИЗИЧЕСКИХ ЗАКОНОВ
Лекция 5 — РАЗЛИЧИЕ ПРОШЛОГО И БУДУЩЕГО
Лекция 6 — ВЕРОЯТНОСТЬ И НЕОПРЕДЕЛЕННОСТЬ — КВАНТОВОМЕХАНИЧЕСКИЙ ВЗГЛЯД НА ПРИРОДУ
Лекция 7 — В ПОИСКАХ НОВЫХ ЗАКОНОВ


Читать дальше →
Всего голосов 71: ↑68 и ↓3+65
Комментарии18

Р. Фейнман «Характер физических законов» (вторая лекция)

Время на прочтение2 мин
Количество просмотров7.3K
Представляю вашему вниманию вторую лекцию из семи прочитанных лауреатом нобелевской премии профессором Ричардом Фейнманом в Корнелльском университете в 1964г, которая называлась «Связь математики и физики».

image

Я убежден, что не существует популярной науки, есть только популярная ее интерпретация. И это не самый мною любимый жанр, сейчас я практически не читаю научно популярных книг, наука не заслуживает того чтобы скользить вечно по поверхности. Однако какие-то книги я все-таки читал и вам советую, много и восхитительно писали: Бор с Эйнштейном (любой популярный текст, особенно советую их переписку), Паули (переписка), Гейзенберг «Часть и целое» (это уже больше философия в стиле Витгенштейна), сам Витгенштейн, Куайн «Две догмы эмпиризма», Дэвид Дойч «Структура реальности» (с оговорками- совершенно замечательная вещь), по квантовой механике опять же Фейнман «КЭД — удивительное свойство света и вещества», по логике — Хофштадтер GEB (Гедель, Эшер, Бах) — книга моего детства, по биохимии Франк-Каменецкий «Самая главная молекула» — замечательная книга про ДНК, конечно советую Джеймса Уотсона «Двойная спираль. Воспоминания об открытии структуры ДНК».
И еще масса книг, которые я не вспомнил, от всех этих книг захватывает дух, но к сожалению на полках в книжных магазинах они растворились в бестолковом шуме какой-то сомнительной около научной литературы. И я не очень понимаю что собственно читают сейчас люди интересующиеся наукой.
Читать дальше →
Всего голосов 81: ↑77 и ↓4+73
Комментарии48

Как звучит Тау?

Время на прочтение1 мин
Количество просмотров911
Возможно вы помните музыкальную интерпретацию числа Пи, которую Майкл Блэйк представил в этом году незадолго до Дня Пи.
И вот опять он нас удивляет своим видео, в котором наигрывает первые 126 нот константы Тау(равной произведению Пи на 2) на разных инструментах.

Читать дальше →
Всего голосов 60: ↑54 и ↓6+48
Комментарии39

Претендент на теорию всего — Е8 геометрия

Время на прочтение7 мин
Количество просмотров6.7K

Единая геометрическая теория — часть 1


Теории объединения взаимодействий


В самом деле вопрос о теории всего или теории объединения всех фундаментальных взаимодействий (электромагнитное, слабое, сильное, гравитационное, кстати первые три поддаются нынешним теориям объединения) в единую теорию является наверное одним из основных вопросов современной теоретической физики. В этой статье пойдет речь о кандидате на решение данного вопроса, а именно о единой геометрической теории E8. Что же это такое?
Читать дальше →
Всего голосов 57: ↑56 и ↓1+55
Комментарии21

SICP теперь по-русски

Время на прочтение1 мин
Количество просмотров63K
image

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

В качестве эксперимента выкладываю перевод первой из 20 лекций. Если это получит должный отклик, буду переводить дальше.
Читать дальше →
Всего голосов 97: ↑92 и ↓5+87
Комментарии61

Лучший друг айтишника

Время на прочтение1 мин
Количество просмотров3.7K
День рожденья только раз в году

Всем известно (а кому неизвестно — сообщаю), что лучший друг айтишника — не клава, и не мышка, а кошка. Ну или кот.

Теплый ламповый котэ несет возмездие успокаивает расшалившиеся нервы, доставляет (хе-хе) массу положительных эмоций и помогает нам хоть иногда отрываться от монитора.

Этим нашим помощникам по жизни я и посвящаю сей топик.

UPD: Под катом ОГРОМНЕЙШЕЕ количество кототрафика! (более 50 мегабайт фоток. Мой ФФ просто умирает от этой простыни...)
Читать дальше →
Всего голосов 523: ↑373 и ↓150+223
Комментарии997

История Linux. Вкратце о главном

Время на прочтение11 мин
Количество просмотров65K
Корни Linux прослеживаются ещё с 70-х годов 20-го века. Точкой отсчёта можно считать появление операционной системы Unix в 1969-м году в США в фирме Bell Laboratories, дочернем подразделении компании AT&T. Unix стала основной для большого количества операционных систем промышленного класса. Самые основные из них отображены на этой временной шкале:


Читать дальше →
Всего голосов 355: ↑327 и ↓28+299
Комментарии202

Baldur's Gate на Android: эмулятор GemRB в действии

Время на прочтение3 мин
Количество просмотров51K
Hamsters and rangers everywhere, rejoice!!!

Необязательное предисловие о личном

На рубеже веков все прогрессивное человечество вовсю рассекало по Побережью Мечей: от Кэндлкипа до самых Врат Балдура. А я — я отыгрывал правого хавбека во дворовой команде и проц мой был 386-й, а монитор черно-белый. Приобщился к искусству ролевых игр лишь через 9 лет. И легендарная Baldur's Gate мне не покорилась. Мышкой камеру крутить нельзя — неудобно!..

Так и жил бы, стыдясь своей попсовости, кабы не добрые люди — создатели GemRB, свободно распространяемой реализации Bioware Infinity Engine с открытым исходным кодом.

Матчасть

Стараниями петербургского разработчика Дмитрия Матвеева aka Beholder GemRB портирован на Android. Позволяет запускать игры серии Baldur's Gate, а также — с некоторыми ограничениями — Icewind Dale и Planescape: Torment. Требует:
  • Android >= 1.6;
  • VGA, WVGA, HVGA или большее разрешение;
  • 150 мб RAM;
  • наличие ресурсов оригинальной игры и места под них на смартфоне/планшете.

Читать дальше →
Всего голосов 77: ↑69 и ↓8+61
Комментарии62

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

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


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

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

Кооперативные потоки с нуля в 33 строках на Хаскеле

Время на прочтение6 мин
Количество просмотров12K
Хаскель отличает себя от большинства функциональных языков тем, что имеет глубокие культурные корни из области математики и информатики, которые дают обманчивое впечатление, что Хаскель плохо подходит для решения практических задач. Однако, чем больше вы знаете Хаскель, тем больше вы цените то, что теория часто является наиболее практическим решением многих общих проблем программирования. Этой статьёй хочется подчеркнуть эту точку зрения тем, что мы смешаем имеющиеся в наличии теоретические основы и создадим чистую пользовательскую систему потоков.

Читать дальше →
Всего голосов 44: ↑38 и ↓6+32
Комментарии7

Пару слов о распознавании образов

Время на прочтение13 мин
Количество просмотров312K
Давно хотел написать общую статью, содержащую в себе самые основы Image Recognition, некий гайд по базовым методам, рассказывающий, когда их применять, какие задачи они решают, что возможно сделать вечером на коленке, а о чём лучше и не думать, не имея команды человек в 20.
image

Какие-то статьи по Optical Recognition я пишу давненько, так что пару раз в месяц мне пишут различные люди с вопросами по этой тематике. Иногда создаётся ощущение, что живёшь с ними в разных мирах. С одной стороны понимаешь, что человек скорее всего профессионал в смежной теме, но в методах оптического распознавания знает очень мало. И самое обидное, что он пытается применить метод из близрасположенной области знаний, который логичен, но в Image Recognition полностью не работает, но не понимает этого и сильно обижается, если ему начать рассказывать что-нибудь с самых основ. А учитывая, что рассказывать с основ — много времени, которого часто нет, становится всё ещё печальнее.
Распознать
Всего голосов 130: ↑129 и ↓1+128
Комментарии52

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

Время на прочтение5 мин
Количество просмотров67K


Предисловие


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

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

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

Так как же решается эта задача и ещё целый класс подобных?
Всего голосов 145: ↑141 и ↓4+137
Комментарии14

Qt Build System: спасательный круг для сборки

Время на прочтение10 мин
Количество просмотров48K

Примечание(17.06.2013): синтаксис примеров в статье не соответствует последним версиям. Сверяйтесь с документацией. Также в марте был выпущен Qt Creator 2.7 с поддержкой QBS.
Не так давно команда разработчиков Qt представила новую систему сборки — QBS. Разумеется, основной реакцией было «Да чем вас QMAKE не устраивал», «Просто адаптируйте CMAKE», «Ещё одна система сборки [xkcd, стандарты]». Обещанные преимущества новой системы: гибкость, понятный синтаксис для всех разработчиков (QML — javascript-подобный декларативный язык), скорость билдов (чистых и инкрементальных), а также лёгкая расширяемость.
Всё это мы где-то уже слышали, поэтому в данной статье мы попытаемся разобраться, как разработчики пришли к этой системе, рассмотрим простейшие примеры, изучим основные конструкции и посмотрим, какая поддержка на уровне IDE присутствует на настоящий момент.
Let's go!
Всего голосов 47: ↑47 и ↓0+47
Комментарии49

Еще раз про skiplist…

Время на прочтение6 мин
Количество просмотров34K

… или как я получил «Аленку» за консольное приложение


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

Представьте, что ваш коллега-нытик пришел рассказать о своей непростой задаче — ему нужно не просто упорядочить по возрастанию набор целых чисел, а выдать все элементы упорядоченного набора с L-го по R-й включительно!
Вы заявили, что это элементарная задача и, чтобы написать решение на языке C#, вам нужно десять минут. Ну, или час. Или два. Или шоколадка «Алёнка»

Предполагается, что в наборе допускаются дубликаты, и количество элементов будет не больше, чем 10^6.

К оценке решения есть несколько комментариев:

Ваш код будут оценивать и тестировать три программиста:
  • Билл будет запускать ваше решение на тестах размером не больше 10Кб.
  • В тестах Стивена количество запросов будет не больше 10^5, при этом количество запросов на добавление будет не больше 100.
  • В тестах Марка количество запросов будет не больше 10^5.
Решение может быть очень интересным, поэтому я посчитал нужным его описать.
Читать дальше →
Всего голосов 53: ↑49 и ↓4+45
Комментарии27

Кластеризация точек на основе регулярной сети

Время на прочтение4 мин
Количество просмотров17K

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

Читать дальше →
Всего голосов 34: ↑33 и ↓1+32
Комментарии39

Точное вычисление геометрических предикатов

Время на прочтение7 мин
Количество просмотров10K
Доброго вам дня, коллеги. Предлагаю вам прочитать статью о базовом аспекте вычислительной геометрии — точном вычислении предикатов.

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

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

Итак, если вы хотите знать, почему вычислительная геометрия не является «наукой о подборе эпсилонов» и как можно корректно и эффективно реализовать геометрический алгоритм, жмите
Читать дальше →
Всего голосов 51: ↑50 и ↓1+49
Комментарии14

Тонкости реализации кода библиотеки. Часть первая

Время на прочтение2 мин
Количество просмотров6.2K
При написании библиотеки на C++ многие сталкиваются с определенными трудностями при написании и организации кода. У некоторых уже есть готовые решения, у других их нет и они пытаются найти эти решения.

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

Для начала, опишем эти трудности и представим обычные способы решения.

Предположим, что библиотека реализует некоторую сущность some_class, которую она предоставляет пользователю библиотеки. Определение some_class зависит от другой сущности библиотеки detail_class, которая является частью реализации и пользователю не предоставляется. Библиотека поставляется только в виде заголовочных файлов.
Читать дальше →
Всего голосов 30: ↑24 и ↓6+18
Комментарии30

Информация

В рейтинге
Не участвует
Откуда
Новосибирск, Новосибирская обл., Россия
Дата рождения
Зарегистрирован
Активность