Search
Write a publication
Pull to refresh
0
0

Пользователь

Send message

Монады с точки зрения теории категорий

Reading time9 min
Views36K

Введение

Кажется, монады в программировании стали загадкой века. И для этого есть две причины:
  • недостаточное знание теории категорий;
  • многие авторы стараюстся не упоминать категории вообще.
Это как говорить об электричестве не используя мат. анализ. Достаточно для замены предохранителя, не хватит, чтобы спроектировать усилитель.

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

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

Содержание

  1. Категория
  2. Функтор
  3. Естественное преобразование
  4. Монада
  5. Монады исключения и состояния
  6. Монады в программировании
  7. Ссылки
Читать дальше →

Асинхронная загрузка изображений в скрытом iframe: подводные камни

Reading time3 min
Views7.8K
Недавно пришлось делать загрузчик фотографий на сервер. Поскольку опыт использования сторонних скриптов уже был, а время на их доработку часто было больше времени на разработку скрипта с нуля, то было принято решение сделать загрузчик самостоятельно.

При обращению к гуглу выдаёт много статей по загрузке файлов через iframe. Алгоритм в общем сводится к:
1) Создаём скрытый фрейм (обычно просто обнуляется ширина и высота через HTML и CSS свойства)
2) Устанавливаем action формы в имя фрейма.
3) Отправляем файл. Радуемся.

Для удобства использования отдельная кнопка «Начать загрузку» не создавалась, а был повешен обработчик onChange для файлового input'a.

Читать дальше →

Новая версия Менеджера устройств ONVIF

Reading time4 min
Views85K
Менеджер устройств ONVIF (ONVIF Device Manager — onvifdm) — открытая реализация клиента (приемной части) системы охранного видеонаблюдения на базе международного стандарта ONVIF. В состав приложения входит библиотека ONVIF, которая позволяет взаимодействовать с сетевыми устройствами, такими как IP-камеры, видеоэнкодеры, считыватели ключей, турникеты, датчики дыма. Менеджер устройств ONVIF и библиотека могут быть использованы при разработке коммерческого или любительского ПО, например, для удаленного наблюдения за коттеджем, определения длины очереди в магазине, фотографирования птиц.

Менеджер устройств ONVIF
Читать дальше →

metabus — платформа для построения тематических поисковых систем

Reading time7 min
Views1.7K
Всё началось с того, что в какой-то момент я понял: искать в интернете товары, услуги и места «реальной» жизни достаточно сложно. Да, практически всё можно найти через популярные интернет-поисковики, но когда начинаешь искать что-то из реальной жизни, привязанное к физическому адресу, то становится сложнее. А когда еще надо уточнить запрос, задать ряд характеристик, время работы, местоположение или цену товара, то становится еще сложнее. В итоге поиск сводится к ручному перебору множества страниц и массе потраченного времени. На каждую тематику есть свои ресурсы. Мы ищем киносеанс — идём на Афишу, электронику — выбираем на Маркете. Далее кто-то заказывает через интернет, а кто-то идет в ближайший магазин и покупает выбранное. Ищем банкомат — часто это приложение на твоем телефоне. В итоге получается множество сервисов, суть которых сводится к одному — поиску товаров, услуг и мест в реальной жизни. В тот момент мне захотелось единого, удобного сервиса, который бы всё это делал.

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

metafind — пример такого поиска


Поиск начинается с единой строки поиска. В запросе можно указать адрес в свободной форме. Если адрес не указан, то будет произведена попытка геолокации. В результатах поиска выводятся сгруппированные по месту продажи товары, их цены, телефоны, адреса, время работы и специфичные для искомой тематики характеристики. Также в результатах содержатся карта и фильтр для уточнения запроса. Для примера, вот как выглядит поиск лекарств:


Читать дальше →

Dataflow-архитектуры. Часть 2

Reading time8 min
Views11K

В первой части статьи мы рассмотрели основные отличия архитектуры потока данных (dataflow) от архитектуры потока управления (controlflow), совершили экскурсию в 1970-е, когда появились первые аппаратные dataflow-машины и сравнили статическую и динамическую потоковые модели вычислений. Сегодня я продолжу вас знакомить с dataflow-архитектурами. Добро пожаловать под кат!

Читать дальше →

Push + ActiveMQ — ZendFramework =… или история одного драйвового проекта

Reading time11 min
Views5.9K

Одним прекрасным утром к нам в офис забежал молодой парень, с амбициозной идеей и “средствами для реализации” в кармане. “Заходишь на сайт, а там — телевизор. К нему можно подключиться через свою web-камеру. Одновременно может вещать только один человек, остальные — ждут своей очереди (но можно посмотреть скриншоты с их вебкамер). Задача каждого — удержаться в эфире, как можно дольше. Если выступающий нравится публике — все жмут “Cool!”, если подкачал — “Go away!”. И человек заменяется на следующего в очереди. Ну и можно в чат писать”.

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

Осторожно! Эта шняга может убить ваш сервер! Кстати, если вы вдруг решите написать высконагруженный скандинавский аукцион – истина и веселые картинки где-то рядом, под катом.

Читать дальше →

Запуск и работа с Hadoop в Windows Azure

Reading time5 min
Views5.7K

imageimage 



Возможно ли развернуть кластер Hadoop в Windows Azure? Конечно же, да, и как вы сможете убедиться, это совсем нетрудно.



В этой статье я продемонстрирую порядок того, как создать типовой кластер с серверами Name Node, Job Tracker и управляемым числом Slave-серверов. Вы сможете динамически изменять число Slave-серверов с помощью портала Azure Management Portal. Описание механики этого управления я оставлю на следующий пост.



Следуйте следующим шагам для того, чтобы создать пакет Azure для вашего кластера Hadoop с нуля:



Читать дальше →

Базовые алгоритмы нахождения кратчайших путей во взвешенных графах

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

Сформулируем определения и задачу.
Графом будем называть несколько точек (вершин), некоторые пары которых соединены отрезками (рёбрами). Граф связный, если от каждой вершины можно дойти до любой другой по этим отрезкам. Циклом назовём какой-то путь по рёбрам графа, начинающегося и заканчивающегося в одной и той же вершине. И ещё граф называется взвешенным, если каждому ребру соответствует какое-то число (вес). Не может быть двух рёбер, соединяющих одни и те же вершины.
Каждый из алгоритмов будет решать какую-то задачу о кратчайших путях на взвешенном связном. Кратчайший путь из одной вершины в другую — это такой путь по рёбрам, что сумма весов рёбер, по которым мы прошли будет минимальна.
Для ясности приведу пример такой задачи в реальной жизни. Пусть, в стране есть несколько городов и дорог, соединяющих эти города. При этом у каждой дороги есть длина. Вы хотите попасть из одного города в другой, проехав как можно меньший путь.
Читать дальше →

Инвесторы — естественные враги стартапов

Reading time7 min
Views3.6K
В живой природе естественное равновесие поддерживают хищники. В среде стартапов такими хищниками являются венчурные инвесторы (бизнес-ангелы, венчурные фонды и пр.). Они ограничивают размер популяции и оздоравливают её, поедая слабых и больных (понятно, что в большинстве случаев у «слабых и больных» на этот процесс есть своя точка зрения, но факты — упрямая вещь).

Я вот уже два года пытаюсь поднять собственный стартап, за это время встречался и разговаривал с десятками потенциальных инвесторов, поэтому надеюсь, что моё видение проблемы взаимоотношений инвесторов и основателей стартапов может кому-то оказаться полезным. Понятно, что многие живущие в этом мире стартаперы знают обо всём этом не меньше (а то и гораздо больше) меня, но начинающим или потенциальным бизнесменам от высоких технологий, надеюсь, моё (исключительно субъективное) мнение поможет реальнее смотреть на вещи.
Читать дальше →

Apache Hadoop (Доклад Владимира Климонтовича на ADD-2010)

Reading time17 min
Views8.7K
Представляем вашему вниманию доклад Владимира Климонтовича, сделанный им на конференции Application Developer Days, в котором он поделился своим опытом обработки ОЧЕНЬ БОЛЬШИХ объемов данных, и использование для этого NOSQL-подходов, в частности Apache Hadoop.



Ниже представлены текстовая версия доклада + видео + аудио и слайды презентации. Спасибо belonesox за работу над подготовкой материалов доклада.

Читать дальше →

Многокамерная видеоаналитика

Reading time5 min
Views24K
В первой публикации Хабросообществу мы хотим рассказать об интереснейшем направлении работы компании «Синезис» — многокамерном видеоанализе, точнее, многокамерном алгоритме сопровождения объектов.
Многокамерное сопровождение человека
Наш коллектив занимается прикладными исследованиями в области видеоаналитики и разрабатывает быстродействующие алгоритмы машинного зрения для автоматической классификации ситуаций по данным поточного видео. Самые интересные результаты мы планируем освещать в корпоративном блоге. Будем благодарны за идеи и критику.

Читать дальше →

Пример использование DSL (Domain Specific Languages) в реальном проекте

Reading time3 min
Views22K
DSL (Domain Specific Languages) — языки, специфичные для решения задач какой-либо предметной области (в противовес языкам общего назначения типа Java или C#). Более подробное описание и примеры есть на википедии, я же хочу написать про то, как довольно легко встроить в приложение (C#) свой собственный DSL на базе языка Boo.
Читать дальше →

Хранение и шифрование паролей Microsoft Windows

Reading time7 min
Views92K
Про взлом паролей windows было написано немало статей, но все они сводились к использованию какого-либо софта, либо поверхностно описывали способы шифрования LM и NT, и совсем поверхностно описывали syskey. Я попытаюсь исправить этот неодостаток, описав все подробности о том где находятся пароли, в каком виде, и как их преобразует утилита syskey.

Читать дальше →

ASP.NET MVC: Привязка данных модели, которые содержат изображения

Reading time5 min
Views9.2K
Привязка данных(binding) является достаточно удобным средством ASP.NET MVC. Удобно оно в первую очередь тем, что позволяет скрыть реализацию преобразования данных между данными из модели и данными HTTP запроса.
В своих проектах я часто сталкиваюсь с необходимостью сохранять различные данные типа blob и image. В этой статье я бы хотел показать, как можно легко организовать и использовать привязку данных из модели, которые содержат различные изображения. Для примера я взял учебный проект MVC Music Store и решил его подправить — добавить возможность изменять изображение обложки музыкального альбома. При написании данной статьи, я использовал версию APS.NET MVC 3 и Razor.
Читать дальше →

Рецепт нагрузочного тестирования на JMeter

Reading time4 min
Views37K

Стоит ли вообще браться за JMeter


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

Составление сценария


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

Китай: как заказывать производство или поставку

Reading time7 min
Views188K
Его зовут Плюштой У китайцев можно заказать всё, что угодно: от электронных компонентов до корпуса к устройству или хендмейд-штук. При правильном подходе это дешево, качественно и позволяет реализовывать любые заказы, которые часто сложно разместить на территории СНГ.

В топике — основы аутсорсинга производства в Китай:
  • Как выбрать производителя и сделать заказ
  • Как убедиться, что сделают именно то, что вам нужно
  • Про предоплату, документы, гарантии
  • Как наиболее выгодно доставить
  • Что делать с потерянными поставками
  • Грабли в ассортименте

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

Читать дальше →

B-tree

Reading time6 min
Views215K

Введение


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

Основные операции в деревьях выполняются за время пропорциональное его высоте. Сбалансированные деревья минимизируют свою высоту (к примеру, высота бинарного сбалансированного дерева с n узлами равна log n). Большинство знакомо с такими сбалансированными деревьями, как «красно-черное дерево», «AVL-дерево», «Декартово дерево», поэтому не будем углубляться.

В чем же проблема этих стандартных деревьев поиска? Рассмотрим огромную базу данных, представленную в виде одного из упомянутых деревьев. Очевидно, что мы не можем хранить всё это дерево в оперативной памяти => в ней храним лишь часть информации, остальное же хранится на стороннем носителе (допустим, на жестком диске, скорость доступа к которому гораздо медленнее). Такие деревья как красно-черное или Декартово будут требовать от нас log n обращений к стороннему носителю. При больших n это очень много. Как раз эту проблему и призваны решить B-деревья!

B-деревья также представляют собой сбалансированные деревья, поэтому время выполнения стандартных операций в них пропорционально высоте. Но, в отличие от остальных деревьев, они созданы специально для эффективной работы с дисковой памятью (в предыдущем примере – сторонним носителем), а точнее — они минимизируют обращения типа ввода-вывода.
Читать дальше →

Знакомьтесь — Linux From Scratch

Reading time4 min
Views50K

Вместо вступления


Tux Construction.С самого раннего детства я интересовался компьютерами. Интерес этот произрастал из игр под MS-DOS в детсадовском возрасте, заканчивая всевозможными олимпиадами по программированию к окончанию школы. Не удивительно, что после школы пошел учиться в технический институт на программиста. Самое странное, что все эти годы я был абсолютно далек от такой замечательной операционной системы, как GNU/Linux. Но полтора года назад, в самом начале первого семестра, я познакомился с парнем (он был незначительно старше меня и поступил в институт уже после техникума — имея опыт работы), который во время одного из разговоров сказал:
«Хочешь начать изучать GNU/Linux? Начни с Linux From Scratch.»


Единственный бумажный дистрибутив


LFS (здесь и далее аббревиатура от Linux From Scratch) – книга, написанная Герардом Бикмансом, описывающая процесс сборки минимального рабочего варианта GNU/Linux из исходных кодов. Почему бумажный? В свое время книгу можно было купить в твердом переплете, что делает «дистрибутив» несколько необычным, не правда-ли? Помимо самой книги, для сборки конечно-же понадобится интернет (или заранее загруженные исходные коды), свободный раздел на жестком диске, и любая операционная система на базе ядра Linux, имеющая компилятор. Лично я всегда использую либо уже собранный дистрибутив LFS, либо полную установку Slackware – в нем есть все необходимое, чего не скажешь про (например) Ubuntu. Конечно, всегда можно загрузить нехватающие пакеты, но ведь мы хотим только-только научиться линуксу? А Slackware даже в своей базовой установке и без конфигурирования предоставляет требуемый инструментарий.
Читать дальше →

Async в C#

Reading time4 min
Views96K
Продолжение по ссылкам: часть II и часть III.

На PDC2010 Хейсберг объявил, что следующая версия C# будет поддерживать примитивы для удобной организации асинхронных вычислений, кроме анонса была представлена CTP версия расширения для студии (скачать), которая позволяет попробовать улучшенное асинхронное программирование уже сейчас.

Улучшение создано, чтобы облегчить комбинацию асинхронных операций, а так же для того, чтобы асинхронных код выглядел максимально приближенно к синхронному. Учитывая, что Silverlight версия .NET Framework содержит только асинхронную модель для работы с сетью, данное улучшение очень уместно.

Не смотря на то, что упрошенное асинхронное программирование является нововведением в C#, сам подход нельзя назвать инновационным, так как реализация async на основе монад есть в Haskell, F# и Nemerle. На самом деле поддержка языком монад позволяет реализовать даже большее, поэтому я был немного удивлен, когда посмотрел презентацию Хейсберга и понял, что в язык был встроен только частный случай.
Под катом описание async и await

Information

Rating
Does not participate
Location
Sydney, New South Wales, Австралия
Date of birth
Registered
Activity