Обновить
0
0
kem@kem

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

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

Как поднять свой уровень в искусстве программирования. План из шести шагов

Время на прочтение2 мин
Охват и читатели21K

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

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

Время на прочтение9 мин
Охват и читатели37K

Введение

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

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

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

Содержание

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

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

Время на прочтение3 мин
Охват и читатели7.9K
Недавно пришлось делать загрузчик фотографий на сервер. Поскольку опыт использования сторонних скриптов уже был, а время на их доработку часто было больше времени на разработку скрипта с нуля, то было принято решение сделать загрузчик самостоятельно.

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

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

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

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

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

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

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

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

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

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


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


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

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

Время на прочтение8 мин
Охват и читатели12K

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

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

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

Время на прочтение11 мин
Охват и читатели6K

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

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

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

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

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

Время на прочтение5 мин
Охват и читатели5.8K

imageimage 



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



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



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



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

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

Время на прочтение5 мин
Охват и читатели274K
Наверняка многим из гейм-девелоперов (или просто людям, увлекающимися програмировагнием) будет интересно услышать эти четыре важнейших алгоритма, решающих задачи о кратчайших путях.

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

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

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

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

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

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



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

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

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

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

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

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

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

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

Время на прочтение7 мин
Охват и читатели95K
Про взлом паролей windows было написано немало статей, но все они сводились к использованию какого-либо софта, либо поверхностно описывали способы шифрования LM и NT, и совсем поверхностно описывали syskey. Я попытаюсь исправить этот неодостаток, описав все подробности о том где находятся пароли, в каком виде, и как их преобразует утилита syskey.

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

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

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

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

Время на прочтение4 мин
Охват и читатели38K

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


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

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


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

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

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

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

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

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

B-tree

Время на прочтение6 мин
Охват и читатели227K

Введение


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

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

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

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

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

Время на прочтение4 мин
Охват и читатели53K

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


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


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


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

Async в C#

Время на прочтение4 мин
Охват и читатели96K
Продолжение по ссылкам: часть II и часть III.

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

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

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

Информация

В рейтинге
Не участвует
Откуда
Sydney, New South Wales, Австралия
Дата рождения
Зарегистрирован
Активность