- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
private void Button2_Click(object sender, EventArgs e)
{
this.Label4.Text = new StreamReader("C:\\Program Files\\Microsoft Visual Studio 10.0\\VB\\VBProjects\\датаметр\\датаметр\\bin\\Release\\Key.txt").ReadLine();
if (Operators.CompareString(this.Label4.Text, "vrc5rhhgyuuoxr45", false) == 0)
{
this.Button1.Visible = true;
this.TextBox1.Visible = true;
this.Label1.Visible = true;
this.Label4.Visible = false;
this.Button2.Visible = false;
this.Label3.Visible = true;
int num = (int) Interaction.MsgBox((object) "Ключ верный.\r\nНе сообщайте его никому !!\r\nИ не потеряйте.", MsgBoxStyle.OkOnly, (object) null);
}
else
this.Label4.Text = "Ключ не верный !!\r\nПоменяйте его в файле \"Key\"";
}
Классное расположение файла. Причём в архиве лежит пустой файл Key.txt рядом с программой...
Как надо было извратиться, чтобы в коде оказался не просто абсолютный путь, но и вот такой-вот с Program Files, ведь по умолчанию VS создаёт проекты в Моих документах
http://www.cyberforum.ru/vb-net/thread971437.html
govnomonad 09.10.2013 03:38 # +6
Одмины уже кастуют проклятье 80 левела на автора
bormand 09.10.2013 07:43 # +1
> vrc5rhhgyuuoxr45
Ты нарушил условия, и ждет тебя страшная кара от автора!
kegdan 09.10.2013 09:21 # −2
Путь доставляет. В идеале под каждый комп должен быть свой персональный путь. Жесткий как стальная балка
Smekalisty 09.10.2013 09:35 # +4
Тут можно перечислять до бесконечности:
1. Наименования события и контролов - говнокод
2. Реализация - говнокод
3. Расположения читаемого файла - говнокод. Есть же метод который возвращает путь кататола, откуда запущено приложение. А проверить, если файл в этой жопе не существует?
4. Полностью непонятна реализация, почему "vrc5rhhgyuuoxr45" константа? Может приложение компилируется каждый раз с этим новым значением?
5. Button1.Visible = TextBox1.Visible = Label1.Visible = Label3.Visible = true - так получше
6. int num не исполуется
7. Вместо "\r\n" - Environment.NewLine
Наверника я ещё упустил пунктов 10
kegdan 09.10.2013 10:05 # −2
Qwertiy 09.10.2013 10:20 # 0
Во-первых, я немного не сказал, что код декомпилированный...
1. Да, имена действительно такие.
2. Нет, вполне нормальная.
3. Да. Но меня больше удивило не то, что абсолютный путь (ну есть люди, которые не думают об этом), а именно что там Program Files причём в таком виде, что очевидно, что человек тупо все проекты хранит именно там - с какого перепуга??
4. А мне непонятно, как скачавший приложение должен был её угадать... Да ещё и постоянно редактируя файл с ключом...
5. VB.NET такие присваивания не поддерживает. К тому же, при компиляции оно всё равно развернётся.
6. Возможно такой вызов MessageBox - последствия применения функции MsgBox. Точно сказать не могу, но не думаю, что там что-то плохое было...
7. А смысл? vbCrLf - вполне нормально. Заодно и одной строкой записалось, а не конкатенацией при выполнении...
bormand 09.10.2013 12:33 # 0
Ему должны были ее прислать, когда он купит прогу... Зачем он должен ее угадывать?
Qwertiy 09.10.2013 15:31 # 0
Эм.. А ты открывал ссылку, написанную рядом с кодом? Это из той программы, которая там во вложении. Ни о какой покупке ничего не говорится, да и не может говориться ;)
Кстати, даже в самом коде фраза "Ключ не верный !!\r\nПоменяйте его в файле \"Key\"" как бы намекает, что ключ надо именно подбирать.
bormand 09.10.2013 19:26 # +2
Нет конечно :) Мой девиз: "Ссылки не читай @ хуйню отвечай".
Qwertiy 09.10.2013 10:44 # 0
Lure Of Chaos 11.10.2013 22:07 # 0
Qwertiy 11.10.2013 23:11 # 0
В принципе, по коду это видно: Operators.CompareString и странный Interaction.MsgBox.
Lure Of Chaos 11.10.2013 23:29 # +1
меня мучают сомнения, а не компилируется ли вдруг, по причине совместимости, написанное лучше, в такой дикий ужас, как написанное на языке с более слабыми возможностями?
bormand 11.10.2013 23:33 # +4
Lure Of Chaos 11.10.2013 23:37 # 0
bormand 11.10.2013 23:45 # 0
Lure Of Chaos 11.10.2013 23:51 # −1
bormand 12.10.2013 00:03 # 0
А F# вроде бы и не борется за функциональную чистоту, так что скорее всего на нем можно спокойно писать любую императивщину...
LispGovno 12.10.2013 16:15 # 0
Есть чистые контейнеры, но не более.
Qwertiy 12.10.2013 00:20 # 0
Lure Of Chaos 12.10.2013 00:30 # 0
(по мне, ассемблер - чистая что ни есть императивщина)
Qwertiy 12.10.2013 00:45 # 0
Разумеется, я подразумеваю доступность возможностей типа передачи указателей на функции для их последующего вызова, ну и всего остального. Т. е. без поверхностных языковых ограничений.
Lure Of Chaos 12.10.2013 00:57 # 0
Qwertiy 12.10.2013 01:16 # 0
И вообще, функциональные языки не на столько функциональные, чтобы в них не было циклов...
Правда на F# я не писал...
roman-kashitsyn 12.10.2013 09:24 # 0
Вы не поверите...
roman-kashitsyn 12.10.2013 09:26 # +1
LispGovno 12.10.2013 16:13 # +1
PS: Cколько не смотрю видяхи этого парня, то мне все кажется что он капитан.
roman-kashitsyn 12.10.2013 21:52 # +3
LispGovno 12.10.2013 22:01 # 0
Да вроде я их никогда и не писал. Ну в школе ещё может. Он все правильно говорит. Просто для меня это очевидно. Если будете ещё постить видеолекции, то я буду ждать и обязательно посмотрю.
Из этой его лекции я всё-таки узнал что-то новое, а именно групперовка в определенном месте контейнера через стейбл_партишан, а второе тупл в С++11 иногда почти такой-же короткий, как в хаски:
kegdan 12.10.2013 19:51 # 0
Qwertiy 12.10.2013 22:10 # 0
3.14159265 12.10.2013 23:09 # +1
Тогда надо срочно идти читать про тьюринг-полноту.
>монады так и появились на свет (что нарушают святые каноны ФП)
От функционального крыша протекает.
Lure Of Chaos 12.10.2013 23:35 # 0
тьфу-ты, я хотел написать - в функциональном. мои извинения.
3.14159265 12.10.2013 23:58 # +1
Написание на хацкиле эмулятора брейнфака должно развеять и эти сомнения.
Lure Of Chaos 13.10.2013 00:01 # 0
это для меня слишком математический подход
для меня ФП пока ограничивается лямбдами. чистые функции высшего порядка я писать неспособен.
roman-kashitsyn 13.10.2013 00:02 # 0
Lure Of Chaos 13.10.2013 00:03 # 0
roman-kashitsyn 13.10.2013 00:06 # 0
Lure Of Chaos 13.10.2013 00:09 # 0
я все еще лелею надежду осилить ФП, тем более, что саморазвитие меня туда упорно сталкивает со всех дорог.
и тогда я, наверное, уйду в scala
LispGovno 13.10.2013 00:56 # +1
_______________
На счет жирной книги, переведенной на русский я серьёзно. Написана с наркоманскими картинками для нубов типа тебя:
http://www.knigograd.com.ua/images/detailed/978-5-94074-749-9_270_auto_jpg.jpg
Stertor 13.10.2013 00:59 # −1
Ты и в реале так выглядишь?
LispGovno 13.10.2013 01:09 # +1
Ты в реале думаешь, что авторы книги будут печатать на обложке книги фотографии неуловимого джо?
kegdan 13.10.2013 01:22 # +1
roman-kashitsyn 13.10.2013 09:57 # 0
Qwertiy 12.10.2013 00:17 # 0
Я использовал JetBrains dotPeek (он бесплатный, кстати).
bormand 12.10.2013 00:31 # +1
Чтобы что-то декомпилировать нужно сначала это что-то скомпилировать... А компилятора у нас нет. И в винду перезагружаться влом.
Qwertiy 12.10.2013 00:39 # 0
Ну во-первых, можно скачать, а не компилировать самому.
Во-вторых, вижак и чтобы скомпилировать не нужен. Компилятор входит в .NET Framework b компилировать можно на любом компе, где он установлен. http://bbs.vbstreets.ru/viewtopic.php?f=2&t=44609
1024-- 12.10.2013 08:49 # +1
Чтобы декомпильнуть что-нибудь ненужное, нужно сначала скомпилировать что-нибудь ненужное...
P.S. Как будет правильно звучать совершенный вид для "декомпилировать"?
P.P.S. Случился бсод, а написанный до первого "P.S." комментарий остался. Мелочь, а приятно.
bormand 12.10.2013 08:50 # 0
Qwertiy 12.10.2013 00:40 # 0
Qwertiy 12.10.2013 00:00 # 0
Lure Of Chaos 12.10.2013 00:06 # +1
ну и еще многословность, атавизм всех этих кубейсиков и паскалей.
вот скажите, новичкам и вправду легче изучить программировать на бейсике или паскале, чем на сисярпе\жабе\жабаскрипте\фитоне\руби\и т.д.? потому что он "похож на естественный аенглийский"?
по мне, это чисто "черепашья графика"
Qwertiy 12.10.2013 00:17 # 0
В том-то и дело, что ничего там не отсутствует из того, что доступно в шарпе без флага unsafe, ну и нескольких фич, которые не особо нужны...
Просто все помнят другие бейсики и их репутация сказывается. VB.NET - совсем другой язык. Там есть всё необходимое. Все .NET-классы, наследование, интерфейсы, виртуальные и абстрактные методы и классы, перегрузка операторов, биртовые операции (в том числе сдвига), логические операции, условный оператор и ещё куча всего.
> новичкам и вправду легче изучить программировать на бейсике или паскале
Я не новичок, на паскале никогда не программировал. Начинал программирование с си и си++. Потом некоторое время писал на VB6. Затем перебрался на .NET, долго не мог разобраться с VB.NET - он реально другой. Примерно в то же время, но чуть позже на шарп. VB.NET лично мне приятнее, как-то более близок к духу си.
http://bbs.vbstreets.ru/viewtopic.php?p=6756794#p6756794
Lure Of Chaos 12.10.2013 00:20 # +1
Lure Of Chaos 12.10.2013 00:25 # +1
> VB.NET лично мне приятнее, как-то более близок к духу си.
странно читать такое. мне казалось, что дистанция далека.
а вот Java\C# являются неким древним знаменем, каким должно быть программирование в стиле ООП. хоть сишарп я и недолюбливаю, но, тем не менее, уважаю за его синтаксический сахар по сравнению с жабой.
главное в языке, я считаю, отсутствие излишних низкоуровневых манипуляций там, где им не место, чем СиСи++ грешат-таки.
Qwertiy 12.10.2013 00:30 # 0
А джаву с её громоздкостью, невозможностью нормально что-то написать, длиннющеми именами у стандартных методов, отсутствием перегрузки операторов и лямбда-функций (правда они появились в новой версии, но кого из знакомых спрашивал, никто с ними не работал ещё) очень не люблю...
Lure Of Chaos 12.10.2013 00:49 # 0
вообще идеальным языком был бы D, будь у него сообщество, документация, поддержка IDE
anonimb84a2f6fd141 12.10.2013 22:14 # 0
Что, восьмерка уже вышла?
Qwertiy 12.10.2013 22:44 # 0
Qwertiy 12.10.2013 00:34 # 0
> странно читать такое. мне казалось, что дистанция далека.
Я имел в виду, в плане контроля за программистом. Он не будет заставлять меня явно приводить double во float, а decimal (которым представлено значение в NumericUpDown) в int (ну я же знаю, что там целое число от 1 до 100) - нафига мне шарпоконтроль, что у decimal более широкий диапазон значений? Ещё он нормально пишет предупреждение, а не ошибку на неинициализированные переменные и отсутствие return.
bormand 12.10.2013 00:37 # +2
Qwertiy 12.10.2013 01:05 # 0
Вот работал на шарпе с библиотекой OpenXML - это штуковина для генерации docx-файлов. Так вот, там всё построено на типе uint, а в шарпе все индексы списков, массивов и всего остального - это просто int. Задолбался с явным приведением по несколько раз в каждой строчке!!!
bormand 12.10.2013 08:39 # 0
На простейшие случаи типа: уже, наверное, ни один компилятор не ругается...
anonimb84a2f6fd141 12.10.2013 22:16 # 0
Qwertiy 12.10.2013 22:43 # 0
Qwertiy 12.10.2013 22:24 # 0
А вот пример, когда не понимает: Что, очень сложный?
А вот пример на неинициализированную переменную: Между одинаковыми проверками мог бы быть какой-то код, из-за которого их нельзя совместить.
Qwertiy 12.10.2013 22:31 # 0
А если посмотреть именно в контексте ошибка или предупреждение?
Хороший программист всё-таки предупреждения смотрит :)
Вот я привёл два куска кода. Предположим, что в нём понадобилось что-то изменить. Человек меняет и если он замечает относящееся к этому коду предупреждение, то он всё-таки задумывается, затрагивает ли каким-либо образом его код эту ситуацию. Например, меняет в switch'е 3 на 7. При наличии предупреждения, он поймёт, что оно его касается. Если же там в конце стоит throw, то остаётся надеяться, что оно упадёт у него, либо в скором времени при тестировании. А если там return 0, то всё это чудо может ещё неизвестно сколько работать неправильно...
Т. е. фактически компилятор требует написать нечто, что скроет факт какого-то подвоха в коде.
Lure Of Chaos 12.10.2013 00:54 # 0
з.ы. всегда проверяю код встроенными предупреждениями JetBrains Idea, а также FindBugs, и при их, грамотно настроенных, добиваюсь исчезновения всех предупреждений.
Qwertiy 12.10.2013 01:02 # 0
На всякий случай скажу, что перечисленные мной возможности по приведению типов исчезнут, если написать Option Strict или включить соответсвующий флаг в свойствах проекта.
Про неинициализированную переменную предупреждение будет в любом случае. Нафига мне там ошибка? Я и предупреждения читаю, если они есть.
Lure Of Chaos 12.10.2013 01:13 # 0
и потом при поиске багов я буду знать, где именно и в чем именно я дурак, и в нужных местах просто усложню читаемость кода в угоду компилятора, зная о последствиях.
а не то, что компилятор стерпит, а ты потом матери и его, и себя, и его создателей, и бога за то, что сегодня ночь с пятницы на субботу, когда все нажрались, а ты, трезвый и потому злой, ищещь этот несчастный баг, который нужно пофиксить ASAP, бо типа кто-то там может потерять миллионы или просто расстроиться и сменить ориентацию фирму.
Qwertiy 12.10.2013 01:37 # 0
Lure Of Chaos 12.10.2013 01:41 # 0
и от этого не избавиться, иначе бы нам грозило светлое будущее совсем без багов
anonimb84a2f6fd141 12.10.2013 22:17 # 0
Qwertiy 12.10.2013 01:19 # 0
Это увеличивает длину строк и снижает читабильность кода. Например, если в строку на 240 символов (примерно 260 - это ширина экрана) добавить охапку явных приведений, то её придётся скроллить...
Lure Of Chaos 12.10.2013 01:24 # 0
несмотря на то, что я фанатик инлайна единожды использующихся выражений\методов и оформлению более чем одноразовых выражений в локальные переменные\методы, а также других сомнительных рефакторингов
Qwertiy 12.10.2013 01:33 # 0
Хм.. Они тут при чём? Предлагаешь удалить полезные пробелы, чтобы впихнуть бесполезное (float)?
> вынесение особо сложных выражений во временные выражения
Лично мне проще прочитать длинную строку, чем охапку из 5 временных переменных, которые больше нигде не нужны. Даже если что-то выношу для отладки, потом загоняю обратно.
> комментарии наконец
И что с ними? Ну будет стоять коммент перед строчкой и что? Скроллить-то её всё равно придётся.
Или написать так:
// Я не виноват, что эту строку надо скроллить, просто компилятор требует явного указания сужающих приведений типов, все притензии в Майкросовт
Причём обязательно после строки, чтобы сделать её ещё длиннее :D
А ещё лучше инлайновым комментом перед первым приведением *ROFL*
> несмотря на то, что я фанатик ...
Я тоже, если только речь не о элементарных действиях типа
return (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
Lure Of Chaos 12.10.2013 01:34 # 0
наоборот, добавить, для разграничения и читаемости.
Qwertiy 12.10.2013 01:38 # 0
А деление одного оператора на строки обычно на читаемость влияет весьма отрицательно...
Lure Of Chaos 12.10.2013 01:43 # 0
и придет понимание, почему выражения сгруппированы именно так, и как они связаны.
Qwertiy 12.10.2013 00:05 # 0
Нет. Компилируется в IL, возможности которого куда больше того же шарпа.
Например, чтобы сделать экспортируемую функцию (видимую из нативного кода), надо (помимо прочего) декомпилировать dll, дописать команду и скомпилировать снова. На обоих языках.
А ещё там есть модификатор видимости, неподдерживаемый шарпом. Да и ещё уйма всего.
От VB.NET тут осталисть только те два момента, которые я указал. И чем больше программист будет использовать функций из VB-библиотеки, тем больше подобного будет вылазить...
Ну ещё обёртка My и запуск приложения.
Lure Of Chaos 12.10.2013 00:14 # +1
а в VB вижу атавизмы еще с более древних версий, вроде обязательное соглашение по наимнованиям, отсуствие более гибких структур, многословность, еще некоторых обязательных бредовых требований.
но надо отдать должное, VB с первых версий был легче, чем всякие СиСи++ с их жоглированием звездочками\амперсандами\уголками и грозным падением хз почему при невинной ошибке.
Qwertiy 12.10.2013 00:24 # 0
Перечисли пожалуйста. Я не вижу. Более того, код аналогичный VB6 ведёт себя иначе в некоторых ситуациях...
> вроде обязательное соглашение по наимнованиям
Нет такого. Ну кроме последствий того, что он case insensitive.
> отсуствие более гибких структур
конкретнее
> многословность
Спорно... Есть тот же блок With, которого больше нигде нет.
Многословность и заодно длиннословность я бы 100% приписал джаве.
> некоторых обязательных бредовых требований
Да, есть несколько. Типа цикла For...
bormand 12.10.2013 00:32 # 0
В паскале? :)
Qwertiy 12.10.2013 00:37 # 0
И с джаваскриптовым не надо сравнивать - тот вообще вредный и его крайне нежелательно использовать.
Я имел в виду шарп, си и джаву.
Lure Of Chaos 12.10.2013 00:39 # 0
почему каждому For надо писать Next, While - Wend, и т.д. т.к. в си-подобных языках хватает двух унифицированных для всех случаев (однобуквенных!) символов?
соглашения по именованиям - ну тех, типа Button1_OnClick
бредовых требований, типа - процедуры (это которые не возвращают значения) записываются ключевым словом Sub и не имеют скобок при вызове, а функции - должны засиываться как фукции Function, иметь скобки и возвращаемое значение.
--
итог: тем лучше язык, чем более он лаконичен при его простоте и понятности, и имеет наименее исключений.
bormand 12.10.2013 00:41 # +2
Круче только bash с его case - esac.
Lure Of Chaos 12.10.2013 00:55 # 0
Qwertiy 12.10.2013 00:58 # 0
Ну да, надо. Такой уж у него синтаксис.
Но отсюда можно и плюс вытянуть:
Do While X < 123
For Q As Integer = 0 To N-1
For W As Integer = 0 To N-1
For E as Integer = 0 To N-1
' ....
If Smth Then Exit Do ' А попробуй-ка так сишный break применить :D
Next E
Next W
Next Q
Loop
> соглашения по именованиям - ну тех, типа Button1_OnClick
Были в VB6. В VB.NET их нет. Правда такое именование является принятым и для VB.NET и для C#.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Кстати, опять плюс бейсика, что этот handles написан в твоём коде, а не в коде дизайнера. А то в шарпе обработчик удалил (ну не нужен он тебе) и оно не компилится, т. к. в дизайнере ссылка на него осталась...
> Sub vs Function
Ну синстаксис такой... Можно же одно слово изменить, если надо.
Кстати, опять же, отсюда можно достать плюс в виде однострочной лямбда-процедуры, вызывающей нечто возвращающее значение.
Хотя это и в шарпе всего лишь парой фигурных скобок решаентся.
> и не имеют скобок при вызове
Сейчас у всего ставятся скобки. Вариант без скобок допустим только в случае отсутствия аргументов (как в паскале, да?), причём если это не внутри выражения, то вижак сам добавит скобочки.
Правда побочный эффект - можно ставить скобки при обращении к свойствам, а это оказывается плохо, если свойство возвращает делегат (указатель на функцию).
Lure Of Chaos 12.10.2013 01:01 # +1
anonimb84a2f6fd141 12.10.2013 22:18 # 0
break на метку?
>Правда побочный эффект - можно ставить скобки при обращении к свойствам, а это оказывается плохо, если свойство возвращает делегат (указатель на функцию).
Упсь, и что теперь?
Qwertiy 12.10.2013 22:41 # 0
break на метку есть только в джаве. В плюсах и шапре - обычный goto, а это может иметь определённые последстивия... А в шарпе даже не очень обычный, учитывая ограничения на него.
> Упсь, и что теперь?
То что запись MyObj.SomeFunc() будет вместо вызова возвращённого делегата означать то же самое что MyObj.SomeFunc - обращение к свойству. Для вызова делегата понадобится написать либо (MyObj.SomeFunc)(), либо MyObj.SomeFunc()().
Qwertiy 12.10.2013 22:52 # 0
LispGovno 12.10.2013 23:07 # 0
>только в джаве
Херню сказал.
Qwertiy 12.10.2013 23:30 # 0
anonimb84a2f6fd141 13.10.2013 00:39 # 0
LispGovno 13.10.2013 00:45 # 0
anonimb84a2f6fd141 13.10.2013 00:39 # 0
Qwertiy 13.10.2013 01:24 # 0
Но всё-таки при написании такого кода следует позаботиться, чтобы в циклах переменные не создавались, поскольку некоторые компиляторы могут при таком переходе пропустить вызов деструктора. А может даже и со стеком что-то не то сделать. Это про плюсы, естественно.
В общем, моё мнение: goto из цикла использовать можно и это намного лучше, чем использовать флаг, но при этом позаботиться об отсутствии переменных, область видимости которых ограничена циклом крайне желательно.
anonimb84a2f6fd141 13.10.2013 02:13 # 0
kegdan 13.10.2013 03:28 # 0
Qwertiy 13.10.2013 10:57 # 0
Stertor 13.10.2013 11:14 # 0
Qwertiy 13.10.2013 10:57 # 0