Рубрика «ошибки» - 12

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

Читать полностью »

Вчера организация The Linux Foundation объявила о запуске проекта Core Infrastructure Initiative (CII) для финансовой поддержки бедствующих Open Source проектов вроде OpenSSL, который в последние годы жил на пожертвования $2000 в год.

В официальном пресс-релизе The Linux Foundation подчёркивает, что необходимость финансовой поддержке совершенно не связана с низким качеством кода OSS, совсем наоборот. Свободное ПО превосходит проприетарный софт по качеству кода и по безопасности. В подтверждение этого The Linux Foundation сослалась на последнее исследование Coverity Open Scan, результаты которого опубликованы 15 апреля, через неделю после публикации информации о баге Heartbleed.

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

В этой ситуации важно понимать, что качество кода СПО действительно объективно превосходит качество кода проприетарного софта. Условно говоря, если бы код OpenSSL не был открыт, мы могли вообще никогда не узнать об этой уязвимости.
Читать полностью »

Компания Apple недавно допустила крупную ошибку, забыв удалить лишнюю строчку с оператором безусловного перехода goto посередине функции SSLVerifySignedServerKeyExchange для проверки серверной подписи при установке SSL-соединения. В результате, функция успешно завершала работу, независимо от результата проверки подписи.

Однако, это не первый случай в истории, когда критическая ошибка объясняется единственной строчкой кода. Вот ещё несколько таких примеров.

X Server

В 2006 году было обнаружено, что X Server проверяет рутовые права у пользователя, но при этом разработчики в реальности забыли вызвать соответствующую функцию.

--- hw/xfree86/common/xf86Init.c
+++ hw/xfree86/common/xf86Init.c
@@ -1677,7 +1677,7 @@
   }
   if (!strcmp(argv[i], "-configure"))
   {
-    if (getuid() != 0 && geteuid == 0) {
+    if (getuid() != 0 && geteuid() == 0) {
        ErrorF("The '-configure' option can only be used by root.n");
        exit(1);
     }

Читать полностью »

Оригинал статьи носит название «10 SQL ошибок, которые делают Java разработчики», но, по большому счёту, приведённые в ней принципы можно отнести к любому языку.

10 потенциальных SQL ошибок, которые делают программисты

Java программисты мешают объектно-ориентированное и императивное мышление в зависимости от их уровня:
— мастерства (каждый может программировать императивно)
— догмы (шаблон для применения шаблонов где-либо и их именование)
— настроения (применять истинный объектный подход немного сложнее чем императивный)

Но всё меняется, когда Java разработчики пишут SQL код.
Читать полностью »

PVS-Studio, CERN

Сейчас я буду рассказывать и показывать на примерах, почему физики тоже должны использовать инструменты статического анализа кода. Мне бы хотелось, чтобы этим инструментом был PVS-Studio. Но, конечно, любой другой инструмент тоже будет полезен. Анализатор кода сократит время на отладку приложений и уменьшит головные боли от тупых ошибок. Лучше побольше думать о физике и поменьше об ошибках в программах на языке Си++.

Читать полностью »

Сегодня вечером друг показал на картах Google нечто странное image
На картах дублируется Рыбинское водохранилище.
Читать полностью »

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

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

image

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

Типы продуктов:

  • Выпекаемые: пиццы (экраны: Тесто, Начинка, Упаковка)
  • Полуфабрикаты: салаты, картошка, кукуруза (экраны: Закуски, Упаковка)
  • Простые: напитки, маффины (добавляются в завершении, на схеме не показаны)

Все продукты в завершении распределяются по экранам выдачи (экраны: Курьеры и Выдача в зал).

Каждый экран выводит определенное количество типов продуктов. Для каждого продукта выводятся определенные параметры (названия, размеры, толщина теста и т.д.). Цель — сделать так, чтобы работа с интерфейсами вызывала минимум ошибок у сотрудников. Я покажу, как шла работа над интерфейсами и какими были попытки сделать так, чтобы сотрудники не путали пиццы.
Читать полностью »

С помощью собственного инструмента для проведения автоматизированных тестирований веб-приложений в различных окружениях Selenium компания Sauce Labs получает большие объёмы статистических данных о множестве ошибок. Часто ошибки возникают не из-за плохого кода, не плохого соединения и не из-за заряженных микрочастиц из открытого космоса, а из-за «падения» браузера. Разумеется, в этом случае браузер будет перезапущен, но нам интересна ведомая компанией статистика аварийных завершений, по которой можно судить о надёжности тех или иных браузеров.

Браузеры и частота их падения

Два года назад, в августе 2011 года, Sauce Labs уже публиковала подобную, пусть и менее детальную статистику на основании миллионов тестов, которые проводили клиенты компании. Результаты оказались несколько предсказуемыми, хотя было несколько удивительных фактов.

Конечно же, Internet Explorer 6 оказался среди худших браузеров, но и более новые версии не блистали надёжностью. Надёжным в 2011 году оказался Firefox, хотя не хуже был и Google Chrome с его постоянными обновлениями, не оставляющими пользователя с нестабильной версией. По результатам тестов неплохо себя показал и Opera.
Читать полностью »

В этой статье я попытаюсь поделиться своим опытом в проектировании пользовательской бизнес-логики. Это явно не претендует на полноценный ликбез, т.к. я всего лишь вспоминаю то, через что прошёл лично я, какие ошибки я допустил, и как мне их удалось (или не удалось) исправить в будущем. Наверняка, опытные системные архитекторы уже все проходили и знают, однако надеюсь, что некоторые советы таки будут полезны.
Мы использовали (и используем) клиентскую часть на WPF/Silverlight, WCF сервисы и СУБД Oracle, Postrges, MsSQL. Код написан по MVVM, использована Prism для модульности и навигации. Не могу точно сказать, какие из тезисов подойдут для других платформ и языков.

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

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

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

Пару месяцев назад появилась идея доработать сервис до приемлемого вида и позволить им пользоваться каждому разработчику.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js