1. VisualBasic / Говнокод #23481

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    Const strMask="258258258258258258"
    mNumber = Clng(Left(mParam1,2))*100000+Clng(Right(mParam1,5))*10+Clng(mParam2)
    mResStr = Right("000000000"+Cstr(mNumber),9)
    For c=1 To 9
    	mRes1 = Cint(Mid(mResStr, c, 1))
    	mRes2 = Int(Rnd()*10)
    	strPreResult=Cstr(mRes1)+Cstr(mRes2)
    	mCheckSum = mCheckSum+mRes1*Cint(Mid(strMask, (c-1)*2+1, 1))
    	mCheckSum = mCheckSum+mRes2*Cint(Mid(strMask, (c)*2, 1))
    	Print strPreResult, mCheckSum
    	strResult=strResult+strPreResult
    Next c
    strResult = Left(strResult,9)+Right("00"+Cstr((mCheckSum Mod 95)Mod 100),2)+Right(strResult,8)

    Генератор случайных чисел.
    Почему везде такой не используется?

    Запостил: lsd, 03 Ноября 2017

    Комментарии (96) RSS

    • Прикольный кодстайл
      Что такое m?
      Ответить
      • Я хз, может Magic?
        Ответить
      • my
        Ответить
      • переменные текущего модуля (но это не точно)
        Ответить
      • В крестах (точнее, в «Си с классами») некоторые программисты названия полей объекта начинают с m или с m_.
        Ответить
        • А в нормальных крестах (не «© с классами») не начинают?
          Ответить
        • а жабке тоже делают префикс my иногда.

          Но тут смешано указание типа (str) и указание области (m). Говновенгерка какая-то
          Ответить
          • А если пояснее?
            Ответить
            • Что пояснее?
              https://www.joelonsoftware.com/2005/05/11/making-wrong-code-look-wrong/
              https://en.wikipedia.org/wiki/Hungarian_notation
              Ответить
        • Короче не пизди.
          Ответить
    • @lsd, прекращай принимать LSD и говнокодить на VB
      Ответить
    • КАК НИ СТРАННО, НО ВИЖУАЛ БЭЙСИК —– ЭТО САМЫЙ МЁРТВЫЙ РАЗДЕЛ.
      Ответить
      • VB СГНИЛ?
        Ответить
        • Последний человек который любил VB был Спольски, и уже он его не любит

          Я думаю что VB не нужен когда есть C#.

          VB был глотком свежего воздуха во второй половине 90-х, а сейчас-то он нахуй>?
          Ответить
          • Как учебный, потому что C# сложнее.

            А ещё это... VBA.
            Ответить
          • > VB был глотком свежего воздуха

            А что хорошего? Вербозность типа "dim a as Integer", миллиарды ключевых слов, и всё это ради... не знаю чего. Чтобы было на чём вирусы под винду писать, или лишь бы не си-подобный синтаксис был?

            Хуйня ёбаная, 1С на английском, писать макросы для офисного планктона.
            Ответить
            • Наверно, первый популярный язык с ГЦ.
              Ответить
              • А, ну разве это.
                Ответить
                • Если ты хотел спросить что в нем хорошего сегодня, то наверно ничего. Даже для недопрограммистов. Для программистов так точно ничего. Ну это про vb.net, vb6 это динозавр.
                  Ответить
                  • > Если ты хотел спросить что в нем хорошего сегодня

                    Нет, я имел ввиду именно тогда, что хорошего было. Ну вот гц уже упомянули.
                    Ответить
                    • Ну еще синтаксис был приятнее. А какие тогда альтернативы были? Си с нулевой стандартной библиотекой, где работа со строками - ебаное приключение? Пасцаль? Язык с гц без всякой пиздотины типа освобождения памяти, переполнения буфера и ридонли памяти был хорош для непрограммистов и каких-то скриптовых задач. Имхо.
                      Ответить
                      • Кроме того VB поставлялась с RAD.
                        Драг-н-дроп.

                        Да не, если бы мне в 1995 году надо было писать легкую десктопную поебень под win3.11 я бы выбрал VB
                        Ответить
            • В 1996 году у тебя даже MFC не было. Либо килобайты кода на чистей сишечке, либо формолшем и API к ActiveX на VBA.

              Угадай, что выбирали люди?
              Ответить
              • Люди выбирали килобайты кода на чистой сишечке.
                Ответить
                • нет, не выбирали. Если тебе надо попросить пользователя указать расположение файла, открыть его и прочитать то смысла в сях нету
                  в никсовом мире по этой же причине выбирали Perl или TCL в ту пору.

                  Хотя про MFC я спизднул: он тогда уже был, но всё равно тупые морды на C++ писать странно


                  А уж когда появился OLE, а следом OLE2 (на COM) он же ActiveX, когда стало можно из VB работать со всей виндой и офисом и AD -- тут-то и пошла жара
                  Ответить
                  • Ну так я про людей писал. А формошлёп выбирали анскильные заедушные питухи.
                    Ответить
                    • Люди писали на verilog.
                      Софтварные решения выбирали анскильные заедушные питухи.

                      Хотя в чем-то ты прав: формошлёпить в конце 90-х уж точно лучше было на дельфи
                      Ответить
                      • > люди писали на verilog
                        Тогда его, походу, ещё юзали для верификации логики, а не для синтеза...
                        Ответить
                        • а как синтезировали? или рисовали транзисторы вручную/
                          Ответить
                          • Сейчас нагуглил, что где-то в середине 90х начали активно синтез юзать.

                            А до этого - да, вручную. Причем пишут, что цари справлялись с этим намного лучше первых синтезаторов.
                            Ответить
                          • З.Ы. Стандартные ячейки для asic'ов, походу, до сих пор руками проектируют. А синтезатор уже из них собирает схему.
                            Ответить
                            • интересно наверное чем-нить таким заниматься
                              Это вам не корзиночки для веб-магазинов на JS делать
                              Ответить
                              • Х.з., скучно наверное каждый год запинывать xor под новый техпроцесс... Но с другой стороны - этот xor все будут юзать ближайшие годы.

                                Так что это скорее корзиночка для фейсбука чем корзиночка для местной шаурмятни.
                                Ответить
              • "PHP"?
                Ответить
                • Ты бы погуглил когда он взлетел. Во время пузыря доткомов не было ни "рнр", ни прыщей. Был перл и бзда.
                  Ответить
                  • Прыщи были, RH и Suse на них даже бобло делали

                    Просто популярность у них была.. ну примерно как у Rustа в современном мире
                    Ответить
          • НЕДАВНО ВИДЕЛ ЗАКАЗ НА КАКУЮ-ТО ВЭБ-ХУЙНЮ НА VB.NET.
            Ответить
          • Ага, вспомнил еще одну припездь васика. Васиковая прога не запускалась без админа, т.к. нужно было под админом ставить какой-то нахуй компонент. Зашел под админом, поставил, работает. Перезашел под юзером - не работает, сука! Компоненты регятся в реестре под админом! В то время уже XP была. А еще какой-то деинсталлятор удалил мне какой-то компонент, после чего не помогла даже полная переустановка проги и библиотеки VB6. Нихуя не работало пока я не нагуглил в чем проблема и вручную не зарегистрировал нужный компонент. Хотя сисярп и до сих пор требует инсталляции под админом.
            Ответить
            • можа было так
              https://www.codeproject.com/Tips/1037909/Using-COM-Without-Registration


              Барсиковый ком родом из win95, какой ему там админ?
              Ответить
              • >> Using COM Without Registration

                And Without A SMS?
                Ответить
              • Но я васиковые проги юзал уже в середине-конце 2000х
                Ответить
            • Именно поэтому я против "VB". Проги на нём вообще запускаются через раз и хрен поймёшь, почему сегодня не работает прога, которая работала ещё вчера.

              Даже вот эта хрень не помогает:
              for %c in (*.dll *.ocx) do regsvr32 %c


              И никаких внятных диагностических сообщений. Просто не работает.
              Ответить
              • На сегодня эта хрень безнадежно устарела, конечно, хоть и летает. Но мелкомягкие от принципа
                >И никаких внятных диагностических сообщений. Просто не работает.
                не отошли. Как ты сегодня узнаешь, что тебе не хватает каких-то рантаймов? Или ты запускаешь 64-битную прогу на 32-битной винде?
                Ответить
                • >>Как ты сегодня узнаешь, что тебе не хватает каких-то рантаймов?
                  Об этом тебе должен сказать инсталлятор.

                  >> Или ты запускаешь 64-битную прогу на 32-битной винде?
                  Довольно внятным сообщением об ошибке про неизвестный тип приложения.
                  Ответить
                  • >неизвестный тип приложения.
                    Охуительно внятно. Нельзя ли было сказать "это 64-битное приложение, а у тебя 32-битная ось"?

                    >Об этом тебе должен сказать инсталлятор.
                    Который не всегда есть. Раньше хоть говорило какой библиотеки не хватает, а сейчас "ошибка записи при чтении".
                    Ответить
                    • >> Нельзя ли было сказать "это 64-битное приложение, а у тебя 32-битная ось"?

                      Видишь ли гость, 32х битные ОС не знают о сущестовании 64х битных бинарей, и именно потому они не могут написать указанную тобою фразу.

                      Ты можешь, кстати, провести эксперемент с любой другой ОС, и узнаешь что там будет тоже самое.

                      >>Раньше хоть говорило какой библиотеки не хватает
                      Если у тебя динамическая линковка и .dll прописан в импорте то так именно и скажет: can't load foo.dll

                      >>ошибка записи при чтении
                      А это у тебя неверная версия рантайма вроятно, может быть даже бажная

                      И опять таки: в Линукс тебя ждет та же самя проблема
                      Ответить
                      • > не знают
                        Ну блин, формат бинарей одинаковый, константы для платформ известны хуй пойми сколько лет... Ничто не мешало показать "это бинарь для amd64". Кроме лени и похуизма.
                        Ответить
                        • Погромисты (точнее, линковщики или как их там?) ещё ленятся записывать правильные флаги в заголовок PE. Иногда пишут, что минимальная версия операционки 5.0 (Windows 2000) или 6.0 (Windows Vista), а используют какую-нибудь функцию из Windows 8. Об этом узнаёшь только когда выскакивает сообщение, что невозможно импортировать функцию WaitFooBarForSingleBazEx (хорошо, когда хотя бы это выводится — можно нагуглить эту функцию и определить, для какой ОС предназначена программа).

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

                          В общем, нужно писать верификатор, который будет сравнивать таблицу импорта со стандартными таблицами для разных версий Windows и выставлять разумное требование к версии ОС в PE-заголовке.
                          Ответить
                          • шото моя не знать про такая опция
                            можешь рассказать моя подробно?
                            Ответить
                            • Сразу за байтами 'P', 'E', '\0', '\0' начинается заголовок COFF. В нём есть опциональная часть. В опциональной части есть windows-specific поля:
                              +40 MajorOperatingSystemVersion
                              The major version number of the required operating system.
                              +42 MinorOperatingSystemVersion
                              The minor version number of the required operating system.

                              https://docs.microsoft.com/en-us/windows/desktop/debug/pe-format#optional-header-image-only


                              Кто мешает выставлять их правильно?
                              Ответить
                              • Почему ты думаешь что это версии windows?
                                Где у линкера опция чтобы их ставить?
                                Ответить
                                • Я не думаю, я знаю. Если поставить номерок, который больше номера версии твоей ОС, то экзешник не запустится (выведет, что требуется более новая версия Windows).
                                  Ответить
                                  • Похоже что это зашито в линкер конкретной студии

                                    http://waleedassar.blogspot.com/2012/08/major-minorsubsystemversion.html

                                    Вот это смешно

                                    WORD MajorOperatingSystemVersion WORD MinorOperatingSystemVersion The minimum version of the operating system required to use this executable. This field is somewhat ambiguous since the subsystem fields (a few fields later) appear to serve a similar purpose. This field defaults to 1.0 in all Win32 EXEs to date.
                                    Ответить
                                    • https://msdn.microsoft.com/ru-ru/library/fcc1zstk.aspx

                                      Там хитро: версию ОС нужно указывать дважды: есть версия системы (MajorOperatingSystemVersion) и версия подсистемы (MajorSubsystemVersion). Обычно они совпадают.
                                      Ответить
                                      • Ладно, убедил
                                        Ужас

                                        Но уж никак не ужас-ужас-ужас
                                        Ответить
                                      • Дык это походу так читается - "нужна подсистема win32 не старее 10.0, на версию оси похуй". Видимо с расчетом на то, что для старой оси можно теоретически выпустить апгрейд win32 подсистемы.
                                        Ответить
                        • +1
                          Ответить
                      • Равно как и "у тебя нет msvcr100.dll" вместо бесполезного "прога криво поставлена, переустанови её".
                        Ответить
                      • >32х битные ОС не знают о сущестовании 64х битных бинарей
                        Шо-шо? Это почему ещё?

                        При отсутствии нужного vs runtime проги высирали какую-то дичь, как и при остутствии .Net фреймверка.
                        Ответить
                        • >>Это почему ещё?
                          Потому что в 32хбитных ОС нету знания про 64хбитные, а еще в них нету знания про формат исполняемых файлов Amiga. Тебя это удивляет?

                          >>высирали какую-то дичь
                          да, вот такую
                          https://thewindowsclub-thewindowsclubco.netdna-ssl.com/wp-content/uploads/2017/09/The-program-can%E2%80%99t-start-because-VCRUNTIME140.DLL-is-missing-from-your-computer.png
                          Ответить
                          • А екзешники амиги имеют расширение exe и формат PE, а, умник? Нет, не такую, а типа "ошибка записи при чтении".
                            Ответить
                            • причем тут расширение, дурачок?
                              Ответить
                              • РАСШИРИЛ ТВОЙ АНУС. ПРОВЕРЬ.
                                Ответить
                              • Даже для троллинга это слишком тупо, мудила.

                                Тебе сказали: расширение exe и формат PE. На каких платформах такое бывает?

                                P.S. Поясняю: если расширение не exe, то домохозяйка такую программу не запустит. Если формат не PE, то Винда сразу матюкнётся, что «Файл не является приложением Win32».
                                Ответить
                                • >Если формат не PE
                                  Это только дос?
                                  Ответить
                                  • Не только. Это может быть файл для другой ОС:
                                    1. Формат NE использовался для 16-битных приложений Windows 3.x и OS/2.
                                    2. Формат LX использовался для 32-битных приложений OS/2.

                                    Возможно, ещё в каких-то экзотических ОС было расширение .exe, нужно гуглить.

                                    Нагуглил, VMS использовала расширения .com и .exe, но совершенно другие форматы. Com в ней был вообще текстовым файлом (типа .bat или .sh, его уже на ГК обсуждали).

                                    Кстати, формат PE используется не только в Windows, но ещё и в (U)EFI и в ХУЁВОЙ КОРОБКЕ.
                                    Ответить
                          • > нету знания
                            Уже лет 10 прошло, в восьмерку да десятку вполне могли добавить знание одного сраного значения из енума. Более того, в сишном хедере оно есть.

                            Бинари с амиги на x86 систему попадают редко, а вот amd64 - весьма часто. Почему бы не добавить специальный кейс для них?
                            Ответить
                  • > должен сказать инсталлятор
                    Он должен все это поставить... Причем не спрашивая.
                    Ответить
                    • "Приложение не может быть запущено, потому что оно некорректно настроено"
                      (spoiler: отсутствует файл манифеста)
                      Ответить
                • >> Или ты запускаешь 64-битную прогу на 32-битной винде?

                  К чему вообще этот вопрос? Надо специально держать второй системой систему другой разрядности, чтобы получить диагностическое сообщение?
                  Ответить
                  • Это обычная история про то, какой плохой микрософт
                    Ответить
                    • Я не копал глубоко Вижуал-Барсик, поэтому не знаю, кто виноват: Микрософт или рядовые программисты.

                      Почему типичная программа на VB выводит что-то невнятное (типа «Класс недоступен», не сообщая имя этого класса) или вообще молча падает, хотя могла бы сообщить, какой OCX-файл нужно зарегистрировать?
                      Ответить
                      • Мне кажется что всё нормально выводится, не?
                        https://info.edusite.ru/images/p84_1420719591_cs-optimizator-error-comdlg32.jpg
                        Ответить
                      • > не сообщая имя
                        Потому что в целочисленный код ошибки некуда присунуть дополнительные аргументы?
                        Ответить
                        • Есть куда
                          https://en.wikipedia.org/wiki/HRESULT
                          Ответить
                          • И как я в него имя засуну, бака?

                            В какой-нибудь глобальный массив, позиция в котором указана битами из hresult? Или на каждое известное имя по значению?
                            Ответить
                      • > какой OCX файл
                        Потому что согласно идеологии COM она этого не знает, а знает только guid класса или интерфейса?
                        Ответить
                        • Домохозяйка должна знать все GUID'ы?
                          Ответить
                        • Да, в HKEY_CLASSES_ROOT у тебя гуид связан с файлом.
                          Если файла нет то вылетает ошибка как показана выше

                          Если гуида нет то извини, но такого обычно не бывает
                          Ответить
                          • > обычно не бывает
                            Ага, ведь никто не забывает зарегать ocx.
                            Ответить
                          • Не бывает у тех, кто в Windows только в пасьянс играет.

                            Проблемы при запуске программ на VB чаще возникают не из-за отсутствия файла, а из-за того, что им что-то в реестре не нравится.
                            Ответить
                            • Вообще что за маразм - не цеплять библиотеки из каталога, а требовать занесения в реестр (!), причем в hklm (!!!). Хуита из 9х.
                              Ответить
                              • Причём не просто в HKLM, а в куст Classes, который является копией HKEY_CLASSES_ROOT из Windows 3.1. Как завезли OLE в Windows 3.1, так примерно в таком виде оно в современных системах и существует, только добавили 32- и 64-битные форматы dll.
                                Ответить
    • Тут походу не просто случайное число, а какой-то случайный номер документа с контролькой... Можно по длине и алгоритму чексуммы погуглить что это.
      Ответить

    Добавить комментарий