По поводу недостаточной совместимости .NET с другими платформами. В случае веб приложений (ASP.NET, Web Services), такая проблема практически снимается, т.к. юзер не обязан иметь ни .NET Framework, ни даже винду, только браузер. Можно обсудить эту сторону проблемы.
Я сейчас пишу курсовой проект на Visual Basic .NET и программа уже написана и работает.Программа является редактором тестов для студентов. Короче, в ней можно вопросы и ответы писать, а так же настройки. Потом все это дело сохранить в файл, который шифруется по алгоритму AES.Этот файл будет использован программой тестирования, которую напишу на диплом, что бы задавать студентам вопросы и оценивать знания.Вот исходники: http://longhorn.nm.ru/download/testshell.rarОднако есть такая трабла. Все в принципе пашет, только я имею секс с криптографической библиотекой. Обычно программа сохраняет тест и все нормально, его потом можно обратно открыть с помощью пароля. Но иногда (щакономерность пока не определил), он сохраняет его так, что его можно открыть другим паролем. Естесственно, он не расшифровывается, тест заполнится не может. Не в этом суть. При нормальных обстоятельствах, когда программе для расшифровке подсовывают неверный ключ, генерируется исключение, которое можно обработать как “Неверный пароль”. Но в некоторых ситуациях при подсовывании неверного ключа это исключение не генерируется и программа думает, что все произошло правильно.Я в панике, кто-нибудь работал с криптографией?
[quote name='Данилка'] Но иногда (щакономерность пока не определил), он сохраняет его так, что его можно открыть другим паролем. Естесственно, он не расшифровывается, тест заполнится не может. Не в этом суть. При нормальных обстоятельствах, когда программе для расшифровке подсовывают неверный ключ, генерируется исключение, которое можно обработать как “Неверный пароль”. Но в некоторых ситуациях при подсовывании неверного ключа это исключение не генерируется и программа думает, что все произошло правильно.Я в панике, кто-нибудь работал с криптографией? [/quote]В программе есть ряд недочетов, не касающихся криптографией и являющихся потенциальным источником проблем:Окно с паролем позволяет выходить из него, предоставляя работу программе без укаания пароля (обработчики нажатия “красивого крестика” в углу панели с паролем и клавиш Esc и Enter в текстовом поле с паролем).Далее есть недостаточная инкапсуляция – расшифровка полученного зашифрованного объекта вызывается из интерфейса и в интерфейсе же обрабатывается ошибка расшифровки, что не есть правильно.Кстати, это общая ошибка всей программы – привязанность к интерфейсу.Далее по коду:строка objRND.Create.GetNonZeroBytes(IV)должна выглядеть так:Security.Cryptography.RandomNumberGenerator.Create.GetNonZeroBytes(IV)В процедуре Encrypt ты в catch закрываешь объект fs, что вообще неверно, т.к. вызовется рантайм-эксепшн NullPointerException.В Decrypt та же ошибка в finally.В SaveTest два блока Try, следующих друг за другом и во втором вызов процедуры шифрования, не инициализарованной переменной, что есть потенциальная ошибка.Замучался уже анализировать 😉 . Такое количество ошибок само по себе уже должно вызывать нестабильность работы программы. Выдели тест в отдельный класс с криптографией. А из интерфейса зови методы.
[quote name='ArchiMage']В программе есть ряд недочетов, не касающихся криптографией и являющихся потенциальным источником проблем[/quote]Архитектурный подход, применяемый в данном приложении годится только для простых задач при условии чистоты требований и их постоянстве.Как я понял, софтину ты планируешь развивать, поэтому было бы полезно вынести бизнес логику за логику представления, лучше в отдельный проект. Вдруг захочется прикрутить веб интерфейс? Даже если и не захочется, выделение логики в отдельный проект поможет значительно снизить сложность. В данный момент обработчики событий формы слишком много знают о том, как устроен редактор тестов изнутри, и при попытке изменить какую-либо фичу прийдется разбираться, что относится к интерфейсу, а что нет. В идеале, обработчики событий должны вызывать методы из слоя с бизнес логикой и никаких дополнительных проверок, временных переменных и т.д. Хочешь поменять интерфейс – меняешь интерфейс, логику – меняешь логику и не смотришь на интерфейс. Конечно, иногда прийдется лезть и туда, и туда, например, при добавлении нового поля для отображения в форме, но в общем случае дело того стоит [smile ;)].
Да, кстати, блин – забыл извиниться за кривой и делитанский код. К несчастью, VB .NET я начал изучать только-только и собственно курсовой – всего лишь 2 недели назад…Так что у меня пока не было практики, что бы разобраться в понятиях бизнес-логики и логики представления… Это будет позже, когда я буду лучше ориентироваться в системе.Так что за кривой код, в котором сам черт ногу сломит – извиняйте 🙂 [quote name='ArchiMage']строка objRND.Create.GetNonZeroBytes(IV) должна выглядеть так: Security.Cryptography.RandomNumberGenerato- r.Create.GetNonZeroBytes(IV)[/quote]Так объект же наследует Security.Cryptography.RandomNumberGenerator! И вполне работает. Разве он будет работать без объекта? Ладно, не так важно…[quote name='ArchiMage']В процедуре Encrypt ты в catch закрываешь объект fs, что вообще неверно, т.к. вызовется рантайм-эксепшн NullPointerException- .В Decrypt та же ошибка в finally.[/quote]Зато тут такая ситуация… если процедура отработала как надо, она в конце закроет потоки. А если произошло исключение, процедура отправляется в блок catch, а открытые потоки-то закрывать тоже как-то надо, иначе может быть утечка ресурсов… Вот, по книшшке читаю.Так, а с шифрованием-то что делать… Может попробовать создать простую программу и подсовывать ей текст, который потом обратно не расшифровывается… Надо выяснять, а эта проклятая библиотека еще и так плохо описана. А про RSA вообще читал, что это самый кривой класс в .NET…
[quote name='Данилка']for (i = 2; i<=Math.Sqrt(g);i++){ if (g % i == 0){ simple = false;} }if (simple == true) {Console.WriteLine(g); }}[/quote]Странно, право. Зачем каждый раз корень считаешь?[quote name='Дикий Билл']ну насчет быстро... по сравнению с Делфи заметные тормоза. Да и SQL Management Studio - она написана на точке нет. Сравни ее скорость с EM.[/quote]С какими Дельфи? Седьмые поддерживают .NET, а восьмые -- только .NET.[quote name='ArchiMage']Тема затихла, т.к. нет людей, действительно работавших с .NET на разработке реальных приложений кроме меня и еще парочки людей.[/quote]Например, я разрабатываю реальные приложения на .NET.
[quote name='Int'] С какими Дельфи? Седьмые поддерживают .NET, а восьмые — только .NET. [/quote]Седьмые. Седьмые поддерживают, только если пhевью ставить. А 2006 уже и точка и вин32. Кстати, вроде бы загнулся делфи, но сервиспак к 2006 вышел.Я то на этут точку наверно все же перейду (из-за ms sql)… Но энтузиазма пока нет 🙂
Ведь если задуматься, по сравнения с Делфи преимуществ-то почти и нет… Разве что сборщик мусора… Ну Асп.Нет еще, но практический смыл отнего только для интранет, т.к хостинг под него еще найти надо (это я вспоминаю тему Архимага). Насчет отсоединенных датасетов тоже можно поспорить…Слышал у нас в городе делали справочник предприятий на точке, но говорят тормоза жуткие. Остается только предположить как бы тормозили ворды-екселы будь они на точке…
смешная темкаhttp://www.sql.ru/forum/actualthread.aspx?tid=283893
[quote name='Данилка']Так объект же наследует Security.Cryptography.RandomNumberGenerator! И вполне работает. Разве он будет работать без объекта?[/quote]Здесь вызывается статический метод класса. Для предотвращения вероятных ошибок в написании метода или непонятного поведения, следует вызывать статические методы путем прямого обращения к классу, а не объекту данного класса. Это ошибка проектирования.[quote name='Данилка']Зато тут такая ситуация… если процедура отработала как надо, она в конце закроет потоки. А если произошло исключение, процедура отправляется в блок catch, а открытые потоки-то закрывать тоже как-то надо, иначе может быть утечка ресурсов… Вот, по книшшке читаю.[/quote]Никто не говорит, что закрывать не надо, надо открывать до блока либо выкидывать эксепшн выше и там его обрабатывать, чтобы не заморачиваться закрытием.Если не открылся – значит в кетче незачем закрывать, если эксепшн не при открытии, значит открывать надо до обработки эксепшена.Общие принципы проектирования обработки исключительных ситуаций.Пиши сначала тест, потом программу, заморочек будет на порядок меньше и качество выпускаемого кода – на порядок выше. Это не зависит от размера проекта, возьми за правило. Чем сложнее тест, тем меньше времени на последующую отладку приложения.
Ты говоришь открывать поток до блока Try-Catch. Но, по моему замыслу, в моей программе все процедуры полностью должны быть заключены в блок Try. В случае ошибки номер процедуры и описание ошибки передается в процедуру Errors, где она (ошибка0 и обрабатывается. Благодаря этому в будущем, после сбоев, мне смогут дать лог с ошибками, в которых я сразу увижу конкретное место.Но. Если открыть поток вне этого блока, теоретически может произойти необработанное исключение. А именно – ошибка при открытии потока. Например, когда файл уже открыт.Собственно, у меня такая ошибка уже вылезала, именно по этому я и заключил ее в блок Try…С ошибками проектирования ясно. Буду изучать этот вопрос, благо сканов книг у меня валом, в том числе и для проффесиональной разработки программ на .NET. Жаль, что я не научусь этому до диплома…
Экая невидаль. 512 М памяти не хватает. Ведь нет корелляции между требуемыми ресурсами для разработки и требуемыми ресурсами для выполнения. Да и от проекта всё очень сильно зависит. У меня например несколько минут проект открывается, несколько минут компилится.На машине два каких-то крутых пентиума, и два гига памяти.
Все-таки у .NET есть один довольно ощутимый недостаток: требуется всюду за собой таскать Фрэймворк, так как у большинства его нет в наличии. Я не пойму, почему он не является обязательным компонентом Windows XP (тем более SP2) и очень надеюсь на скорейшее его повсеместное введение, например, через SP3.Иначе программу потом даже в интернет не выложить. Сама она весит 100 килобайт, а к ней еще ФВ нужен на 23 мега…
Я конечно не смотрел того кода, но может быть закрывать поток в finally?
[quote name='Данилка'] Все-таки у .NET есть один довольно ощутимый недостаток: требуется всюду за собой таскать Фрэймворк, так как у большинства его нет в наличии. Я не пойму, почему он не является обязательным компонентом Windows XP (тем более SP2) и очень надеюсь на скорейшее его повсеместное введение, например, через SP3.Иначе программу потом даже в интернет не выложить. Сама она весит 100 килобайт, а к ней еще ФВ нужен на 23 мега… [/quote]причина несостоятельна. для большинства, использующего инет, 25 метров – не такая большая проблема. Даже при наших ценах за по 15 центов за метрк томуже фрамворка 1.1 входит в ХР сп2
Copyright ©