пятница, 15 апреля 2011 г.

Бажная терминология

Image001
Гейзенбаг (англ. Heisenbug) — термин, используемый в программировании для описания программной ошибки, которая исчезает или меняет свои свойства при попытке её обнаружения. Примером могут являться ошибки, которые проявляются в окончательном варианте программы (релизе), однако не видны в режиме отладки, или ошибки синхронизации в многопоточном приложении. Гейзенбаги очень сложно искать, поскольку они проявляются в зависимости от случайных факторов и воспроизводятся нестабильно (свою роль играет и сложность анализа состояния многопоточной системы). Поэтому их стараются отсечь еще на этапе проектирования, продумывая процедуры синхронизации.

Борбаг (англ. Bohr bug) — термин, используемый в программировании для описания программной ошибки, которая, в противоположность гейзенбагу, не исчезает и не меняет своих свойств при попытке её обнаружения. Это слово, в отличие от слова «баг», в русском языке практически не используется. Близкий по значению русскоязычный аналог — «стабильный» или «устойчивый» баг.

Мандельбаг (англ. Mandelbug) — термин, используемый в программировании для описания программной ошибки, чьё поведение столь сложно, что выглядит хаотичным. Это также подразумевает, что говорящий полагает, что это скорее борбаг, чем гейзенбаг.

Шрёдинбаг (англ. Schroedinbug) — термин, используемый в программировании для описания программной ошибки, которая никак не проявляет себя, однако внезапно возникает, если кто-то наткнётся на неё в исходном коде или попытается использовать программу в необычных условиях и осозна́ет, что система вообще не могла работать при наличии такой ошибки. После этого программа перестаёт работать вообще до тех пор, пока ошибка не будет исправлена. Хотя это звучит невероятно, некоторые программы содержат в себе такие ошибки.

Баги фазы луны

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

Статистические баги

Статистические баги можно отловить только при многократном запуске фрагмента кода. Обычно эти ошибки появляются при создании случайных или псевдослучайных результатов. Например, программа, равномерно распределяющая точки по поверхности, скажем, сферы, в результате демонстрирует, что в нижнем полушарии значительно больше точек, чем в верхнем. Пошаговое исполнение создания одной точки совершенно не может пролить свет на происхождение ошибки, потому что невозможно назвать каждый отдельный результат неверным — в конце концов, он же должен быть случайным! Проблема становится понятной только при создании множества точек. Стандартные приемы отладки, вроде проверки начальных и конечных условий, тоже мало чем помогут. Похожие пробемы часто случаются в численных методах, где каждая конкретная операция точна в пределах выбранной погрешности, но после большого числа итераций накапливаются ошибки, особенно при наличии статистического смещения.

Альфа-баг

Термин альфа-баг происходит от исторического феномена «ошибок железа», вызванных излучением альфа-частиц. Эти частицы, появляющиеся случайным образом, могут повлиять на электроны в RAM и превратить 0 в 1 или наоборот. То есть термин используется для описания типа ошибок, продемонстрировавших неверный результат, но анализ кода говорит, что баг невозможен. Таким образом, единственный вариант разгадки — это альфа-частицы, повлиявшие на электрон. Обычная причина таких багов — ошибки билда или сборки, или какой-то необычный дефект памяти.

Posted via email from Комуникликабельность

среда, 9 марта 2011 г.

SOLID демотивация

Нашел классные демотиваторы SOLID принципов.

Image001

Принцип единственности ответственности - На каждый объект должна быть возложена одна единственная ответственность.

Image002

Принцип открытости\закрытости - Программные сущности должны быть открыты для расширения, но закрыты для изменения.

Image003

Принцип подстановки Лисков - Объекты в программе могут быть заменены их наследниками без изменения свойств программы

Image004

Принцип изоляции интерфейса - Много специализированных интерфейсов лучше, чем один универсальный.

Image005

Принцип инверсии зависимостей - Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Image006

Posted via email from Комуникликабельность

воскресенье, 23 января 2011 г.

Роман об управлении проектами.

На одном дыхании прочитал «Deadline. Роман об управлении проектами» Тома ДеМарко. Читается легко и непринужденно. Полезно разнообразить техническую литературу и блоги такими книгами. По ходу чтения ловил себя на мысли что некоторые моменты уже подмечал в текущей работе. Другие были достаточно новы. В общем, чтение зря явно не прошло.

Posted via email from Комуникликабельность

суббота, 22 января 2011 г.

Игрушка с генетическим алгоритмом

Весь вечер играюсь в игрульку для гиков и видимо сумасшедших который я удачно подглядел на хабре. Суть в построении машины с помощью гинетического алгоритма. Прикольно смотреть и предсказывать в самом начале сколько примерно проедет тот или иной вариант мутаций и скрещивания.

Для 34 поколения большинство вариантов уже вполне приличненько ездят. Проблема пока только в том, чтобы взбираться в большие крутые горки. Видимо разработчик не предусмотрел что есть вообще вариант забраться так далеко.

До правдоподобности игрушке конечно далековато, но все равно прикольно и симпотично.

Posted via email from Комуникликабельность

воскресенье, 12 декабря 2010 г.

Сводки с полей...

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

Номер раз. Съездил в столицу нашей славной родины на одно из самых значимых событий в области ИТ - Платформу  2011. Ощущения на «горячую голову» высказывать не стал, а теперь уже достаточно поздно о них говорить. Может еще выложу материал, только скорей свое видение, а не отчет о конференции.

Номер два. Сдал на этой же самой платформе экзамен на статус MCTS по WCF 4. Тут интересней, поскольку к экзамену практически не готовился и сдавал его по принципу «авось пронесет». Чувствую что повезло только раз, так что к следующим буду готовиться основательно.

Номер три. Читаю «Чистый код» Роберта Мартина (спасибо коллеге за бумажный вариант). Постигаю умные мысли, ругаюсь, протестую, в общем пропускаю текст сквозь призму собственного сознания.

Posted via email from Комуникликабельность

вторник, 9 ноября 2010 г.

Расширения для chrome

Когда Chrome только появился, и поразил меня своей скоростью, я как то не задумывался о том, нужны ли мне расширения. Браузер меня полностью устраивал (ну за исключением того, что я не мог его поставить через проксю). Со временем ситуация не изменилась, браузер меня полностью устраивает. Поэтому собственно я не понимаю как меня занесло на страничку с расширениями. Последний раз  заходил туда наверное с год назад. Даже устанавливать тогда расширения было достаточно непросто.

Сейчас, зайдя в галерею, удивился обилию расширений. Сразу же поставил себе несколько (не буду говорить какие, дабы лишний раз не рекламировать, если хотите знать – спрашивайте лично). Что меня поразило, что chrome стал очень хорошо поддерживать расширения. Это касается и их установки и их работы. В принципе, я покрыл несколько своих потребностей, которые были у меня на работе, например, уведомлялку о почте на Gmail или отображение RSS лент. Помимо этого, нашел плагин, который хотел было уже писать сам – iReader (черт, все таки получилась реклама), который для некоторых статей, блогов и прочего может отображать основную статью крупно, без всякой рекламы и т.д. (привет версиям для печати) читать такую статью становится невероятно приятно.

Posted via email from Комуникликабельность

понедельник, 1 ноября 2010 г.

Примеры использования технологий MS

В блоге J.D. Meier's Blog появились коллекции примеров кода  а также сценариев применения для различных технологий MS: ADO.NET, ASP.NET, Silverlight, WCF, Windows Azure, Windows Phone. Примеры кода ссылаются на MSDN. Очень удобная штука, если нужно быстро применить какой то типовой сценарий использования технологии, да и выбрать технологию по области ее применения, а не как обычно «да в принципе подойдет».

Для меня интересной показалась коллекция ссылок на примеры кода по WCF. В принципе есть все что нужно для быстрой разработки «более сложного» функционала сервисов, как то прикручивание безопасности или транзакционности.

Posted via email from Комуникликабельность