Re[21]: Модульные тесты и "безопасные" языки - хорошо.
От: Eugeny__ Украина  
Дата: 31.07.09 10:56
Оценка:
Здравствуйте, DOOM, Вы писали:

DOO>Ситуация с банкоматом:

DOO>банкомат и сервер должны совместно выполнить транзакцию по списыванию и выдаче денег. Пусть ее ведет твой надежный координатор. Типа того же DTC.
DOO>Банкомат и сервер подтвердили готовность. Координатор дал отмашку. Банкомат выдал деньги и тут упала сеть. Что делать? Координатор не знает получена ли его отмашка банкоматом — т.е. он не знает выданы деньги или нет. То, что система придет в нормальное состояние, когда сеть восстановится — я понимаю, но в промежуток ничего не понятно — если ты транзакцию откатишь, а банкомат деньги выдал, то пользователь снимет те же самые деньги в соседнем банкомате, если ты транзакцию подтвердишь, а банкомат денег не выдал, то ты спишешь деньги со счета пользователя и он не сможет их взять в другом банкомате. Если ты будешь ждать и на это время заморозишь операции со счетом — то пользователь тебе придет бить морду.

До боли знакомая ситуация, только наоборот. С платежными терминалами похожая беда. И если обычные терминалы могут работать отчасти в оффлайне(т.е. если связи нет, отправить платеж чуть позже, хотя это тоже вызывает свои проблемы, особенно, если связь падает всерьез и надолго), то упавшая связь при подтверждении транзакции в POS терминалах — это крыша. И как такое решать, неясно.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[23]: Модульные тесты и "безопасные" языки - хорошо.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 31.07.09 11:00
Оценка: :)
Здравствуйте, DOOM, Вы писали:

DOO>Здравствуйте, gandjustas, Вы писали:


G>>Я ен говорю про конкретно задачу двух генералов, я говорю о решении общей проблемы.

G>>Если ты хочешь свести её к задаче двух генералов, то у тебя 100% гарантии не будет.
DOO>Это всегда будет сводиться к задаче о двух генералах.
У тебя — может быть.

DOO>>>Не наступает просветления — у нас канал ненадежен. Посредник может хоть мамой клясться, но на канал он не влияет.

G>>Ты слово "надежный" понимаешь?
DOO>Дальше что? канал ненадежен.
Всегда чтоли? Вот TCP надежен, хотя работает поверх ненадежного IP.
Если принять за аксиому что все каналы ненадежны то ничего не поможет. Но в реальном мире создают надежные каналы поверх ненадежных.

DOO>>>Ситуация с банкоматом:

DOO>>>банкомат и сервер должны совместно выполнить транзакцию по списыванию и выдаче денег. Пусть ее ведет твой надежный координатор. Типа того же DTC.
DOO>>>Банкомат и сервер подтвердили готовность. Координатор дал отмашку. Банкомат выдал деньги и тут упала сеть. Что делать? Координатор не знает получена ли его отмашка банкоматом — т.е. он не знает выданы деньги или нет. То, что система придет в нормальное состояние, когда сеть восстановится — я понимаю, но в промежуток ничего не понятно — если ты транзакцию откатишь, а банкомат деньги выдал, то пользователь снимет те же самые деньги в соседнем банкомате, если ты транзакцию подтвердишь, а банкомат денег не выдал, то ты спишешь деньги со счета пользователя и он не сможет их взять в другом банкомате. Если ты будешь ждать и на это время заморозишь операции со счетом — то пользователь тебе придет бить морду.

DOO>>>Вот такие они "надежные" распределенные транзакции.


G>>В ситуации с банкоматом выдаватель денег не транзакционен. Если ты забрал из банкомата каким-либо образом хотябы одну бумажку вернуть ее не получится. Откат невозможен.

DOO>Откат невозможен всегда, когда уже прошел commit. Т.е. при отсутствии информации надо либо ждать ее появления (вариант 3), либо принимать какое-то решение без необходимой информации (варианты 1 и 2).
Можно и так счиатать, тогда в случае с банкоматом commit происходит не по желанию системы, а под воздействием внешних факторв (которые нельзя направить через координатор). Это транзакционность компонента в рамках системы нарушает.

G>>В ситуации с двумя генералами это аналогично тому что одной из армий вешестоящее командование прикажет атаковать, незавиимо от того дошло ли сообщение до дргуой армии.

DOO>Но поскольку атаковать надо все равно — поэтому и приходится совершать транзакцию без 100% уверенности в ее согласованности. И не может быть 100% уверенности.
Только транзакционностью тут уже не пахнет.
Re[24]: Модульные тесты и "безопасные" языки - хорошо.
От: DOOM Россия  
Дата: 31.07.09 11:32
Оценка:
Здравствуйте, gandjustas, Вы писали:


DOO>>>>Не наступает просветления — у нас канал ненадежен. Посредник может хоть мамой клясться, но на канал он не влияет.

G>>>Ты слово "надежный" понимаешь?
DOO>>Дальше что? канал ненадежен.
G>Всегда чтоли? Вот TCP надежен, хотя работает поверх ненадежного IP.
G>Если принять за аксиому что все каналы ненадежны то ничего не поможет. Но в реальном мире создают надежные каналы поверх ненадежных.
А ничего, что Танненбаум приводит задачу о двух генералах как обоснование невозможности создания надежного механизма согласованного прекращения передачb в том самом надежном протоколе TCP?
И домашнее задание тебе — выучить, что именно гарантирует TCP.


DOO>>Откат невозможен всегда, когда уже прошел commit. Т.е. при отсутствии информации надо либо ждать ее появления (вариант 3), либо принимать какое-то решение без необходимой информации (варианты 1 и 2).

G>Можно и так счиатать, тогда в случае с банкоматом commit происходит не по желанию системы, а под воздействием внешних факторв (которые нельзя направить через координатор). Это транзакционность компонента в рамках системы нарушает.
Хорошо приведи мне тогда идеальный пример, в котором подобная ситуация невозможна.


G>>>В ситуации с двумя генералами это аналогично тому что одной из армий вешестоящее командование прикажет атаковать, незавиимо от того дошло ли сообщение до дргуой армии.

DOO>>Но поскольку атаковать надо все равно — поэтому и приходится совершать транзакцию без 100% уверенности в ее согласованности. И не может быть 100% уверенности.
G>Только транзакционностью тут уже не пахнет.
Приведи свой пример — тогда уже не сможешь отмазаться
Re[18]: Модульные тесты и "безопасные" языки - хорошо.
От: anton_t Россия  
Дата: 31.07.09 18:01
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, March_rabbit, Вы писали:


M_>>не нравится количество повторяющихся строк. Ибо это — неизбужный копипаст. А в копипасте главное — меньший объем, чтобы увереннее его проверить.

CC>Зато строки проще. Да и в конкретном случае это несущественно.

CC>>>Но и не считаю что присвоение в условии неправильно.

M_>>Разрешено синтаксисом языка, значит может применяться.
CC>Именно

M_>>Гм. Это смотря как вбить. Новичок после этого может и не развиться, останется в этих рамках, даже не умея объяснить, что здесь неправильно. Ибо это как правило "не выходи на улицу без шапки — сонлнце голову напечет"...

CC>А это уже зависит от интеллекта новичка. Если развиться не сможет, значит пусть хоть через табу будет убережён от тупых ошибок.
CC>Ты вспомни как даётся та же химия в школе и в универе: в школе все на очень простой модели, в универе: "забудьте все чему вас учили в школе" и пошли рассказывать как оно на самом деле работает.

Кстати, математика так же. По крайней мере на мехмате.
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: skeptik_  
Дата: 01.08.09 11:06
Оценка: +1
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, criosray, Вы писали:



C>Попробуйте скомпиллировать данный код в VC++ любой версии и запустить.

C>Сразу скажу, что код корректен.

.\criosray_fibon.cpp(3) : error C2061: Syntaxfehler: Bezeichner '_TCHAR'
.\criosray_fibon.cpp(26) : warning C4010: Einzeiliger Kommentar enthält Zeilenfortsetzungszeichen
.\criosray_fibon.cpp(30) : warning C4010: Einzeiliger Kommentar enthält Zeilenfortsetzungszeichen
.\criosray_fibon.cpp(33) : warning C4010: Einzeiliger Kommentar enthält Zeilenfortsetzungszeichen

Компилировать-то надо с предупреждениями, и не игнорировать их.
Re[16]: Модульные тесты и "безопасные" языки - хорошо.
От: Dmi3S Россия http://dmi3s.blogspot.com/
Дата: 01.08.09 12:58
Оценка: +2
Здравствуйте, CreatorCray, Вы писали:

Лично мне, например, нравится такой стиль:
if( TreeNode *node = root.GetNode ("Foo") )
{
}

Локальность переменных как бы. Впрочем, это мой личный выбор.
Re: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 04.08.09 07:48
Оценка: 1 (1) -1
В продолжении темы:

http://habrahabr.ru/blogs/cpp/66145/

Возможно, многие в курсе про недавнюю узявимость в ActiveX компоненте MSVidCtl, которая потенциально могла позволить злоумышленнику выполнить произвольный код используя переполнение буфера. Недавно, в блоге посвященному практике SDL появилось описание ошибки программиста, которая привела к уязвимости защиты.

Ошибка заключается в одном символе, вместо правильного кода:

hr = pStream->Read((void*)pbArray, (ULONG)cbSize, NULL);
* This source code was highlighted with Source Code Highlighter.


программист написал

hr = pStream->Read((void*)&pbArray, (ULONG)cbSize, NULL);
* This source code was highlighted with Source Code Highlighter.


использование лишнего символа & (получение адреса) привело к тому, что злоумышленник получил возможность произвести удаленное переполнение буфера с известными последствиями.

Подробнее про эту ошибку, почему ее пропустили и что будет сделано, чтобы подобные ошибки больше не появлялись, пожно почитать в блоге там же есть описание и другой ошибки связанной с ATL.

Re[24]: Модульные тесты и "безопасные" языки - хорошо.
От: _d_m_  
Дата: 06.08.09 04:20
Оценка:
Здравствуйте, gandjustas, Вы писали:


DOO>>>>Не наступает просветления — у нас канал ненадежен. Посредник может хоть мамой клясться, но на канал он не влияет.

G>>>Ты слово "надежный" понимаешь?
DOO>>Дальше что? канал ненадежен.
G>Всегда чтоли? Вот TCP надежен, хотя работает поверх ненадежного IP.
G>Если принять за аксиому что все каналы ненадежны то ничего не поможет. Но в реальном мире создают надежные каналы поверх ненадежных.

Блажен кто верует.
Надежные они лишь потому, что вероятность близка к 100%. Но гарантировать 100% невозможно. Аргументов пока от тебя не дождались.
Re[25]: Модульные тесты и "безопасные" языки - хорошо.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 06.08.09 05:32
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, gandjustas, Вы писали:



DOO>>>>>Не наступает просветления — у нас канал ненадежен. Посредник может хоть мамой клясться, но на канал он не влияет.

G>>>>Ты слово "надежный" понимаешь?
DOO>>>Дальше что? канал ненадежен.
G>>Всегда чтоли? Вот TCP надежен, хотя работает поверх ненадежного IP.
G>>Если принять за аксиому что все каналы ненадежны то ничего не поможет. Но в реальном мире создают надежные каналы поверх ненадежных.

___>Блажен кто верует.

___>Надежные они лишь потому, что вероятность близка к 100%. Но гарантировать 100% невозможно. Аргументов пока от тебя не дождались.
В реальном мире 100% гарантировать вообще невозможно. Главное чтобы надежность была не ниже надежности оборудования которое связывают эти каналы.
Re: Модульные тесты и "безопасные" языки - хорошо.
От: C0x  
Дата: 11.08.09 10:42
Оценка:
Здравствуйте, criosray, Вы писали:


C>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


C>http://habrahabr.ru/blogs/lifehack/64627/


C>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):

C>
C>int i;
C>int array[4];
C>for (int i = 0; i <= 4; i++) { 
C>    array[i]=0;
C>}
C>



C>(подсказка: бесконечный цикл)


Правильнее всетаки так (если я правильно понял семантику данного кода):

memset((void*)array, 0, sizeof(array));
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: _d_m_  
Дата: 13.08.09 01:53
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Правильнее всетаки так (если я правильно понял семантику данного кода):


C0x>
C0x>memset((void*)array, 0, sizeof(array));
C0x>


Ты вобщем-то ничего не понял.
Re: Модульные тесты и "безопасные" языки - хорошо.
От: Константин Б. Россия  
Дата: 13.08.09 04:18
Оценка: 5 (2) :))) :)
Здравствуйте, criosray, Вы писали:


if (p < 0,5) { std::cout << "Вот так спутники и падают..."; }


Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: LaptevVV Россия  
Дата: 13.08.09 08:09
Оценка: 1 (1) +1
Здравствуйте, Константин Б., Вы писали:
КБ>
КБ>if (p < 0,5) { std::cout << "Вот так спутники и падают..."; }
КБ>

КБ>
Для спутников наши используют виртовские языки, а не С/С++. Как ГОРАЗДО более надежные и ГОРАЗДО меньшего размера...

С сайта Информатика-21:

А.А.Колташев, нач. отдела системного программирования для космических аппаратов ОАО «Информационные спутниковые системы» им. М.Ф.Решетнева, г. Железногорск, Красноярского края (ИСС — главное спутникостроительное предприятие России; акад. М.Ф.Решетнев — сподвижник С.П.Королева и основатель ИСС; об истории см. Википедию). Ученик школ А.П.Ершова, И.В.Поттосина и В.В.Липаева. Оказавшись у истоков появления бортовых ЦВМ на спутниках связи, разработал принципы и технологии построения бортового ПО, руководил созданием ОС для первого советского стационарного спутника с БЦВМ (1981). Руководил созданием действующей технологии разработки БПО для данного приложения, в т.ч. уникальной мобильной кросс-системы программирования на основе виртовской Модулы-2 (см. Модуле-2; о спутниках Глонасс-М, часть 2). С 1990 г. читает курс "Технологии программирования" сначала в Сибирской Аэрокосмической Академии, затем в Красноярском гос. тех. университете. Доцент каферды АСОИУ КрГТУ. Профессиональная обязанность и научный интерес — создание мобильной технологии программирования с гарантированным уровнем качества для встроенных компьютеров.

На сайте Информатика-21 есть все ссылки.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: LaptevVV Россия  
Дата: 13.08.09 08:22
Оценка:
Здравствуйте, Константин Б., Вы писали:
Судя по тому, что на том же сайте находится и вот это:

Н.В.Чистяков, Главный конструктор комплексов дистанционно пилотируемых летательных аппаратов (ДПЛА): комплекса Строй-П с ДПЛА Пчела, известного по антитеррористическим кампаниям, комплексов ГрАНТ, БРАТ и других. Основатель Научно-производственного конструкторского центра Новик-XXI век. Программное обеспечение системы управления, воплощающее в себе весь опыт и знания конструкторского коллектива, — это мозг беспилотного летательного аппарата, а его проектирование и разработка — обязанность и привилегия Главного конструктора.

то и вояки наши используют виртовские дела, а не mainstream.
И правильно делают!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
От: _d_m_  
Дата: 14.08.09 00:34
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Константин Б., Вы писали:

КБ>>
КБ>>if (p < 0,5) { std::cout << "Вот так спутники и падают..."; }
КБ>>

КБ>>
LVV>Для спутников наши используют виртовские языки, а не С/С++. Как ГОРАЗДО более надежные и ГОРАЗДО меньшего размера...

Виртовские? Pascal и C#?
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.08.09 03:33
Оценка:
Здравствуйте, _d_m_, Вы писали:
___>Виртовские? Pascal и C#?
С# к Вирту никакого отношения не имеет. Это ты с прямым углом перепутал.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
От: LaptevVV Россия  
Дата: 14.08.09 05:32
Оценка:
Здравствуйте, _d_m_, Вы писали:

LVV>>Для спутников наши используют виртовские языки, а не С/С++. Как ГОРАЗДО более надежные и ГОРАЗДО меньшего размера...

___>Виртовские? Pascal и C#?
Модулу-2 и переходят на Оберон-Компонентный паскаль.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Модульные тесты и "безопасные" языки - хорошо.
От: _d_m_  
Дата: 14.08.09 07:44
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, _d_m_, Вы писали:

___>>Виртовские? Pascal и C#?
S>С# к Вирту никакого отношения не имеет. Это ты с прямым углом перепутал.

Ой, таки да. С Хайлсбергом перепутал.
Re[5]: Модульные тесты и "безопасные" языки - хорошо.
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 14.08.09 12:53
Оценка: :)
Здравствуйте, Sinclair, Вы писали:
S>С# к Вирту никакого отношения не имеет. Это ты с прямым углом перепутал.
Вирт -> Паскаль
Паскаль-> Хейслсберг->Компилятор Паскаля->Турбопаскаль->Delphi->J++->C#
http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D0%B9%D0%BB%D1%81%D0%B1%D0%B5%D1%80%D0%B3,_%D0%90%D0%BD%D0%B4%D0%B5%D1%80%D1%81
и солнце б утром не вставало, когда бы не было меня
Re[6]: Модульные тесты и "безопасные" языки - хорошо.
От: WolfHound  
Дата: 14.08.09 15:18
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Управляемые языки исключают некоторые классы ошибок (например, обращение по невалидному указателю или за пределами массива), совсем никак не исключая других классов ошибок (например, использование некорректных алгоритмов).

Это зависит. Если говорить по жабу и .НЕТ то да. А если почистить систему типов и добавить зависимые типы то там можно и некорректные алгоритмы отлавливать. Пусть и ни на 100% но юнит тесты можно списать в утиль с чистой совестью.

Pzz>я бы, кстати, предпочел термин "безопасные", потому что безопасный язык можно реализовать на голом железе, без всяких "управляемых" сред

А что конкретно ты понимаешь под "средой"?

Pzz>А пользователю вашему все равно, к какому классу относилась ошибка, убившая его файл или банковский счет, к тому, которые предотвращаются использованием "безопасных" инструментов, или к тому, которые не предотвращаются.

Устранение некоторых классов ошибок == меньше ошибок при тех же усилиях.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.