понедельник, 24 января 2011 г.

Хабрахабр

КупиКупон - скидки от 50% до 90%

Хабрахабр:

В продолжение вчерашнего обсуждения. В прошлый раз остановились на том, чтобы объяснить как работают алгоритмы унификации и фильтрации на конкретном примере. Сам пример был построен особым образом, чтобы проверить определенные свойства алгоритмов. Для дальнейшего обсуждения я написал небольшой unit-тест, который оперирует формулой из примера. Unit-тест нужен для того, чтобы пропустить шаг алгоритма Романова, где происходит декомпозиция исходной формулы на множество CTF. Вместо этого декомпозиция предлагается изначально автором вопроса. Unit-тест и подробный лог работы приложения я выложил здесь: gist.github.com/791064 Предлагаю по возможности ссылаться туда по номерам строк (там не совсем удобно, что нельзя дать прямую ссылку на номер строки, придется искать ее вручную; если кто-то предложит более удобный сервис, я перенесу лог туда). Как видно из лога работы, тест заканчивается ситуацией, когда на очередном шаге построения гиперструктуры базисный граф оказался пустым множеством, что согласно алгоритму означает, что формула не выполнима (пункт 2b внизу страницы 11 в тексте статьи). Чтобы не переписывать здесь еще раз статью, предлагаю в обсуждении задавать вопросы, которые требуют дополнительных разъяснений.


Добрый вечер. В этом посте я разберу задачу B ?Дубы? с практического тура городской олимпиады школьников Санкт-Петербурга по информатике. Задача эта на динамическое программирование по подотрезкам и идея решения интересна тем, что удобнее посчитать две динамики вместо одной. Если вас заинтересовало (незнание динамики не освобождает, но будет труднее) ? добро пожаловать. Читать дальше →


В последние несколько дней появились слухи о новом проекте под названием ?Music Bay?. Четыре года назад команда Pirate Bay зарегистрировала доменное имя themusicbay.org. На нём планировалось разместить наиболее эффективную систему обмена музыкой из когда-либо созданных, однако из-за занятости другими проектами эти планы были отложены. На днях же появилась информация о том, что домен ?Музыкальной бухты? в конце концов начнёт использоваться. В настоящее время он перенаправляет на ?Пиратскую бухту?, но этой весной на нём может появиться большой сюрприз для музыкальной индустрии. Читать дальше →


Собственный аркадный кабинет (деревянный ящик для видеоигр) мечта любого гика "за 30". Реализовать ее легко, сложнее разместить этот раритет в типовой квартире. Промежуточным вариантом является DIY нано-кабинет. Главным объектом фетиша остается устройство ввода, то есть джойстик или геймпад. Вот тут никаких компромиссов быть не может! По ссылке рабочий пример сопряжения джойстика SNES и хенд-хелда Dingoo A320 (будущей основы для самодельного кабинета) на основе контроллера Arduino.


Сейчас поиск людей на сайтах знакомств, по эффективности сравним с работой золотоискателя на заброшенном месторождении. Может быть в этом и есть сермяжная правда ? ценится то, что достается нелегко, да и рекламных показов больше. Но вот с пользовательской точки зрения, очень нужны инструменты группировки по сходным признакам. Например: 1. Инструмент с циничным названием ?С этой девушкой выбирают также:? ?Не сложилось? Посмотрите эти анкеты:?. Берем тех парней, кто написал этой девушке и показываем других девушек, которым они писали за последние пару дней. Предполагается, что людям нравится определенный типаж. Для слишком популярных анкет вводим понижающий коэффициент, чтобы не было засилья людей с модельной внешностью. 2. Интересы и группировка по степени совпадения в процентах, как музыкальные вкусы на last.fm. Собственно здесь, могут быть те же музыкальные или киношные вкусы. Не только на сайтах знакомств, например, в ЖЖ очень не хватает такой группировки по интересам. Общая цель сводится к тому, чтобы пользователь находился в своем сегменте, в своем кругу общения, интересов и предпочтений. Как и в реальной жизни, только круг общения будет включать в себя значительно больше участников.


Попытка улучшить алгоритмы растеризации шрифтов, пользуясь исключительно общедоступной информацией. От переводчика В первый раз я столкнулся с этой статьей в 2008 году, и ещё тогда поразился изяществом алгоритма растеризации шрифтов, предложенного автором. С тех пор меня регулярно посещали мысли сделать перевод, пока ссылка на статью не всплыла на Хабре в обсуждении топика ?Сглаживание шрифтов, анти-алиасинг, и субпиксельный рендеринг?. С тех пор я несколько раз откладывал перевод, который требовал определенных знаний в области экранной типографики, но, наконец-таки, собрался его опубликовать. Читать дальше →



Наверное, все, кто сталкивался с разработкой более или менее серьезных приложений, знают, что выбор формата хранения настроек скрипта или приложения ? достаточно ответственное дело. Конфиги должны быть легко читаемыми, легко модифицируемыми, легко переносимыми, и так далее ? список можно продолжать и продолжать. Так как серверные PHP-скрипты выполняются, бывает, много раз в секунду, скорость загрузки конфигов ? достаточно важный параметр. Хотя ему, порой, уделяется не очень много внимания. Давайте сравним различные варианты хранения настроек для PHP-скриптов с точки зрения скорости их работы. Ну и коснемся вкратце их удобства. Читать дальше →



Очень часто возникают проблемы при сетевой печати на принтеры, подключенные например, к компьютеру с Windows XP на компьютере с установленной ОС Window 7,ненаVista,2003,2008 Суть проблемы часто заключается в том, что под эти ?современные? системы производители ?устаревших? моделей принтеров не удосуживаются выпускать драйверы. Вот и у меня сложилась такая ситуация: Знакомый попросил настроить печать в офисе со свежекупленного ноутбука. 1. Конечно же ? ноутбук был с операционной Windows 7 2. Конечно же ? Home (см. ниже в чем проблема) 3. Конечно же ? она (система) была 64-х разрядной. 4. Конечно же ? принтеры в оффисе были не новые: HP1320 и Canon MFxxxx 5. Конечно же ? принтеры были подключены и ?расшарены? на машинках с WinXP. 6. И никто не будет менять структуру сети ради одного ноутбука Читать дальше →


Что у каждого гика под руками? Правильно ? клавиатура На днях ingeniarius попросил заценить одно из своих творений. Чтобы я смогла полностью проникнуться приложением вручил мне вот такой девайс. Симпатичная, правда? Всю силу привычки я ощутила после первых минут работы с TypeMatrix: печатаю как обычно, но текст при этом совсем не тот, что ожидаю. Постоянно промахиваюсь. Казалось бы, 5 миллиметров (отсутствие небольшого смещения), а все годы тренировок на смарку. При этом мне мега нравится эта клава. Она меньше чем обычная, клавиши одна над другой ровными рядами, разделенные на две руки, большие бекспейсы и энтеры, приятный ход клавиш? Мечта ? а не клава. Смотрю на нее и хочется печатать, сажусь и хочется только смотреть на нее. Читать дальше →


За 2 с небольшим года команда StartupPoint организовала уже почти 50 встреч в 15 городах России и Украины. Презентовано около 450 проектов. Более 20 проектов привлекли на встречах инвестиции. Завершающим этапом регионального развития сообщества StartupPoint будет Сибирь. 27 и 28 января в Новосибирске и Томске соответственно состоятся Поинты (встречи сообщества). 50-ая встреча состоится как раз в Томске. Приглашаем сибиряков принять участие в Поинтах в роли предпринимателя с презентацией стартапа, эксперта с советами для стартапа, инвестора с деньгами для стартапов и зрителя с вниманием для стартапов. Эксперты и инвесторы, пожалуйста, пишите на support [собака] startuppoint.ru у нас для вас индивидуальные предложения и возможности. Участие в Поинтах бесплатное, но регистрация (кнопка ?Я пойду?) на странице анонса обязательная. Также очень скоро Поинты пройдут в Ростове и Нижнем Новгороде.


Решив учитывать собственное время, я быстро обнаружил, что оно уходит впустую в тех случаях, когда приходится постоянно переключаться с одного вида деятельности на другой. Я не говорю здесь о переключении каждый час или два ? напротив, это повышает производительность труда. Я скорее имею в виду многократную смену деятельности в течение 15-30 минут. Действительно, представьте, что вы захотели проверить почту, но быстро переключились в браузере на ваш любимый блог, а затем и вовсе углубились в переписку с друзьями в Facebook и выполнение заданий в Mafia Wars. Вскоре вы обнаружите, что толком ничего не сделали. Вы посетили множество мест, многое узнали и многое потрогали, но потеряли кучу времени. Потери времени начинаются уже на этапе проверки почты. Вы заходите в почтовый ящик, и там лежат десятки писем. Вы скользите по ним взглядом, и видите три уведомлялки из Facebook, одну из Twitter, пять рассылок от авторов программ, которые вы когда-то скачали или сервисов, в которых зарегистрировались. Из дюжины писем хорошо если одно написано живым человеком, который ждет ответа. Мне ежедневно приходит до сотни писем ? в основном, обезличенные сообщения от пресс-служб или администраций различных сайтов. До начала учета времени я не осознавал, что каждый раз при проверке почты теряю до получаса на разгребание этих завалов. Хуже того, а не осознавал и другого: человек не может с одного просмотра вычленить одно важное сообщение из пятидесяти. Ну и, конечно, третьего ? я заходил не проверить почту, а взглянуть, нет ли личных писем от моих друзей и знакомых. Читать дальше →



Приветствую, Хабрахабр. Сегодня я хочу, в своём обычном стиле, устроить сообществу небольшой ликбез по структурам данных. Только на этот раз он будет гораздо более всеобъемлющ, а его применения и практичность ? простираться далеко в самые разнообразные области программирования. Самые красивые применения, я, конечно же, покажу и опишу непосредственно в статье. Нам понадобится капелька абстрактного мышления, знание какого-нибудь сбалансированного дерева поиска (например, описанного мною ранее декартова дерева), умение читать простой код на C#, и желание применить полученные знания. Итак, на повестке сегодняшнего дня ? моноиды и их основное применение для кеширования вычислений в деревьях. Моноид как концепция Представьте себе множество чего угодно, множество, состоящее из объектов, которыми мы собираемся манипулировать. Назовём его M. На этом множестве мы вводим бинарную операцию, то есть функцию, которая паре элементов множества ставит в соответствие новый элемент. Здесь и далее эту абстрактную операцию мы будем обозначать "?", и записывать выражения в инфиксной форме: если a и b ? элементы множества, то c = a ? b ? тоже какой-то элемент этого множества. Например, рассмотрим все строки, существующие на свете. И рассмотрим операцию конкатенации строк, традиционно обозначаемую в математике "?", а в большинстве языков программирования "+": "John" ? "Doe" = "JohnDoe". Здесь множество M ? строки, а "?" выступает в качестве операции "?". Или другой пример ? функция fst, известная в функциональных языках при манипуляции с кортежами. Из двух своих аргументов она возвращает в качестве результата первый по порядку. Так, fst(5, 2) = 5; fst("foo", "bar") = "foo". Безразлично, на каком множестве рассматривать эту бинарную операцию, так что в вашей воле выбрать любое. Далее мы на нашу операцию "?" накладываем ограничение ассоциативности. Это значит, что от неё требуется следующее: если с помощью "?" комбинируют последовательность объектов, то результат должен оставаться одинаковым вне зависимости от порядка применения "?". Более строго, для любых трёх объектов a, b и c должно иметь место: (a ? b) ? c = a ? (b ? c) Легко увидеть, что конкатенация строк ассоциативна: не важно, какое склеивание в последовательности строк выполнять раньше, а какое позже, в итоге все равно получится общая склейка всех строк в последовательности. То же касается и функции fst, ибо: fst(fst(a, b), c) = a fst(a, fst(b, c)) = a Цепочка применений fst к последовательности в любом порядке всё равно выдаст её головной элемент. И последнее, что мы потребуем: в множестве M по отношению к операции должен существовать нейтральный элемент, или единица операции. Это такой объект, который можно комбинировать с любым элементом множества, и это не изменит последний. Формально выражаясь, если e ? нейтральный элемент, то для любого a из множества имеет место: a ? e = e ? a = a В примере со строками нейтральным элементом выступает пустая строка "": с какой стороны к какой строке её ни приклеивай, строка не поменяется. А вот fst в этом отношении нам устроит подлянку: нейтральный элемент для неё придумать невозможно. Ведь fst(e, a) = e всегда, и если a ? e, то свойство нейтральности мы теряем. Можно, конечно, рассмотреть fst на множестве из одного элемента, но кому такая скука нужна? :) Каждую такую тройку <M, ?, e> мы и будем торжественно называть моноидом. Зафиксируем это знание в коде: public interface IMonoid<T> { T Zero { get; } T Append(T a, T b); } Больше примеров моноидов, а также где мы их, собственно, применять будем, лежит под катом. Читать дальше →


Привет. Два месяца назад в меня вселился какой-то черт вместе с идеей о сервисе опросов, я поддался и все свое свободное время отдал на разработку. Так родился twiq.ru Основное отличие сервиса от конкурентов в том, что это не просто сайт, в котором вы заполняете формочки и заставляете других людей кликать на варианты ответов. Здесь все по-другому. Вы вообще можете после регистрации больше к нам не заходить, но тем не менее успешно пользоваться почти всем набором функций. заинтересовавшихся прошу под кат



Однажды кто-то сказал: ?Идея ничего не стоит?. И был, возможно, где-то прав. По крайней мере, в существовавшей на тот момент схеме взаимодействия ?стартаперов? и ?инвесторов? небыло места для человека, имеющего в багаже одну лишь только идею интернет-проекта. Множество раз мы слышали, как венчурные инвесторы говорили: ?У нас тысячи идей, но их некому реализовывать, поэтому нам нужна 'команда+идея', а лучше ? 'команда+прототип', а ещё лучше ? 'прототип, имеющий аудиторию, и приносящий хоть какую-то прибыль'?. В этом топике я хочу рассказать о новой взаимовыгодной модели взаимодействия трёх участников: ? автора идеи, ? инвестора, ? команды разработчиков ... Читать далее ...


Когда начинаешь изучать вопросы построения компиляторов, компиляции текста, оптимизации при компиляции, то всегда сначала ведешь огромные книги, кучи текста, мат выкладки, доказание теорем о равномощности языка и еще очень много чего. Это конечно хорошо, но некоторым программистам, типа меня проще понять лексические и синтаксические анализаторы на живых примера. Куда проще увидеть класс, в котором содержится токены, на которые был разбит, чем долго и мучительно перечитывать главу. Во время изучения компиляторов, я решил прогуляться по codeplex в поисках кодов, которые могут мне помочь. И кое-что нашел. Я не рассказываю тут умные слова про LL, про разрешения конфликтов LL(1) и тп. Теория компиляции изложена и в книжках не плохо. Я рассказываю именно о проектах которые я смотрел и посчитал интересными. Прошу судить. Читать дальше →


Начинаю цикл мини статей, о разрушении легенд связанных с виртуализаций Juniper JunOS на PC. Миф первый: ?Policer Filters (interfaces don't measure realtime traffic rates)?, данное утверждение можно найти на одном из авторитетных неофициальных сайтов о Juniper Olive. Суть легенды заключается в том, то Policer Filters работают неправильно, интерфейсы измеряют трафик в реальном времени некорректно. Для теста воспользуемся достаточно производительной системой на базе процессора Intel Core i7, с 8 Gb RAM и операционной системой Windows 7 (x64). Также была использована самая свежая версия GNS3 (с приложениями входящими в её состав, такими как модифицированный qemu), еще был задействован акселератор ? kqemu. В роле маршрутизатора выступал Juniper Virtual JunOS 10.4 M/T Series, клиенты ? debian lenny. Для маршрутизатора выделено 512 Mb RAM и 128 ? на каждый клиент соответственно. Суммарная нагрузка на CPU системы не превысила 0.27. Инструменты для генерации и получения информации о трафике Iperf. Под катом достаточно снимков экрана. Читать дальше →


Отписаться от этой рассылки

Комментариев нет:

Отправить комментарий