Си диез / Говнокод #26802 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
private void checkButton_Click(object sender, EventArgs e)
    {
      if (this.passportTextbox.Text.Trim() == "")
      {
        int num1 = (int) MessageBox.Show("Введите серию и номер паспорта");
      }
      else
      {
        string rawData = this.passportTextbox.Text.Trim().Replace(" ", string.Empty);
        if (rawData.Length < 10)
        {
          this.textResult.Text = "Неверный формат серии или номера паспорта";
        }
        else
        {
          string commandText = string.Format("select * from passports where num='{0}' limit 1;", (object) Form1.ComputeSha256Hash(rawData));
          string connectionString = string.Format("Data Source=" + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\db.sqlite");
          try
          {
            SQLiteConnection connection = new SQLiteConnection(connectionString);
            connection.Open();
            SQLiteDataAdapter sqLiteDataAdapter = new SQLiteDataAdapter(new SQLiteCommand(commandText, connection));
            DataTable dataTable1 = new DataTable();
            DataTable dataTable2 = dataTable1;
            sqLiteDataAdapter.Fill(dataTable2);
            if (dataTable1.Rows.Count > 0)
            {
              if (Convert.ToBoolean(dataTable1.Rows[0].ItemArray[1]))
                this.textResult.Text = "По паспорту «" + this.passportTextbox.Text + "» доступ к бюллетеню на дистанционном электронном голосовании ПРЕДОСТАВЛЕН";
              else
                this.textResult.Text = "По паспорту «" + this.passportTextbox.Text + "» доступ к бюллетеню на дистанционном электронном голосовании НЕ ПРЕДОСТАВЛЯЛСЯ";
            }
            else
              this.textResult.Text = "Паспорт «" + this.passportTextbox.Text + "» в списке участников дистанционного голосования НЕ НАЙДЕН";
            connection.Close();
          }
          catch (SQLiteException ex)
          {
            if (ex.ErrorCode != 1)
              return;
            int num2 = (int) MessageBox.Show("Файл db.sqlite не найден. Положите файл в папку вместе с exe.");
          }
        }
      }
    }

https://habr.com/post/510512/
Медуза, паспорта и говнокод — почему номера паспортов всех участников интернет-голосования попали в Интернет

Запостил: gost gost, (Updated )

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

    • Хм, а для чего использовалась эта прога? Я надеюсь они не раздавали каждому голосующему список паспортов всех остальных чтобы локально их проверить?
      Ответить
  • какая прелесть) во-первых винформа. Во-вторых скулайт. В третьих код прямо в обработчике кнопки. В-четвертых явное указание типов. В-пятых даже using нету.

    Кто-то слетал в 2007-й год, и попросил первокурсника написать программу?
    Ответить
    • >>>
      Сама программа degvoter написана на C# и представляет из себя написанное «на коленке»
      WinForms приложение, которое работает с sqlite базой данных. Файлы в архиве датированы 2020-06-30 22:17 (30 июня 2020 года). 
      Видно, что приложение писалось в кратчайшие сроки, ибо на Камчатке в этот момент уже было 1 июля 7:17, а тот факт, что
      участки открывались там в 8:00 говорит о том, что дедлайн был как никогда близок (хорошо что электронно голосовали только
      Москва и Нижний Новгород).


      «SQLite» — это, наверное, единственное хорошее, что есть в этом куске кода.
      Ответить
      • да, но работа с ней в этой программе ужасна.

        я не очень в дотнет, но даже я бы взял linqtosql -- орм с прокси классами.
        А если бы уж и писал вручную, но хотя бы с using и параметрами, а не string.format
        Ответить
        • В общем я решил позыркать, как правильно в 2020 дотнечикам работать с субд для тупых формочек.
          Во-первых конечно же есть всякие GridView, которые питушню выводят сами, причем их datasource может быть как субд (видимо любой ado.net провайдер) так и массив объектов.

          Во-вторых есть два ORM:
          Linq2SQL позволяет сгенерировать прокси-классы по СУБД, и писать запросы к ним через Linq.
          Это примитивный orm типа mybatis, который ничего не кеширует, но всё таки позволяет создавать и доставать объекты не трогая SQL руками.

          Entity Framework (бывает 5, 6, и Core) это мощный ORM типа Hibernate или sql alchemy. У него есть "каноническая модель" данных, которая мапится и в код и в базу. Можно делать code first, database first, или начать руками с канонической модели, из которой потом сгенерится и код на C# и база данных (напоминает яблочные Entiries). Он умеет кешировать, умеет внешние ключи, и все круто.

          Жопа в том, что из коробки и там, и там поддерживается только Access (через ODBC прослойку) и MS SQL: в ажуре, обычный, или Express (а это оверхед, так как отдельный процесс). SQL Compact (стенд элон файл) микрософт дропнул.
          Есть драйверы для SQLite, но только для запросов: генерить они ничего не умеют. Вроде как в EntityFramework Core уже есть sqlite, но надо ставить свежий .net и свежую студию, а мне лень.

          Но на месте питуха я бы конечно взял EF Core, WPF (вместо Winforms), GridView, и уже точно не писал бы хуиты рукамаи
          Ответить
          • >Entity Framework (бывает 5, 6, и Core) это мощный ORM типа Hibernate или sql alchemy

            Он охуенный, тем что меньше пердолинга и настроек чем с Hibernate, всё работает из коробки (для MS SQL).
            Но на больших базах вылазят проблемы всех ОРМ: хуёвые автогенерённые запросы.
            Ответить
            • На больших базах нужно писать запросы вручную, угу.
              Но мы тут вроде бы про SQLite:)

              Мне понравилась идея того, что ты описываешь модель, и получаешь по ней и базу, и прокси-классы
              Ответить
              • >Мне понравилась идея того, что ты описываешь модель, и получаешь по ней и базу, и прокси-классы

                Да, это годная тема для сверхбыстрого хуяринга мелких проектов для формочек к базам.

                К тому же оно позволяет генерить классы прямо из таблиц в базе. И подсвечивает названия полей автокомплитами. Это очень приятно.

                Они по ходу дела какой-то безумной хрени насочиняли типа partial classes.

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

                Первый нельзя менять, т.к. его постоянно генерит ИДЕ, а второй пишет программер.
                Ответить
                • Угу. До .net 3.0 они не умели partial, и генерили один класс, а в нем было специальное место для писания своего кода) А потом они сделали partial.
                  Такое же вроде бы и для ASP.NET и для форм тоже есть: часть за тебя генерирует студия.

                  А про быстроту, так фишка в том, что большинство проектов (особенно вебсайтиков) и состоит на 80% из тупых формочек.
                  А когда у тебя будет 200000 пользователей или миллион записей в базе -- тогда уже можно и переписать по уму
                  Ответить
                  • >так фишка в том, что большинство проектов (особенно вебсайтиков) и состоит на 80% из тупых формочек
                    Потому и появились всякие питухи на колёсах рубисты на рельсах c генерециями таблиц из моделей и scaffolding.

                    >А когда у тебя будет 200000 пользователей или миллион записей в базе -- тогда уже можно и переписать по уму

                    Вот так и думали разрабы гитхабов, фейсбуков и вкшечек.
                    «Мы сейчас быстренько на скриптухе наговнячим, а когда взлетит перепишем "по уму"».
                    Ответить
                    • да, руби он рельсы, груви от грааль, питух он джанго, это все из той же области, что и EF.
                      У EF вон даже миграции есть!.

                      А твиттер вроде как переписали на скалу же, не?
                      Есть мнение, что если бы они сразу взяли Хороший и правильный язык, до как раз году к 2014-му и запустились бы
                      Ответить
                      • EF хорош таки тем что это доведённная до ума статически типизированная технология быстрого прототипирования однотипного говна.

                        В отличие от скриптухи вроде «питухов на джанге» и «руби на рельсах».
                        Ответить
                        • угу. Ну тут в целом нужно признать, что скриптушня сосет у сишарпа.

                          Кстати, почему нет фулстек фреймворка для джавы с кокогенеарцией? или есть?
                          Ответить
                      • Когда у них split brain случился. И они потом вручную восстанавливали комменты и т.п.
                        Ответить
                      • Смутно помню, что в прошлом году у них между двумя ДЦ разорвалась связь, и в результате они оказались с двумя несовместимыми копиями БД. Какой багор )))
                        Ответить
                                  • Каменты из этого субтхреада не репостятся на оригинальный гк
                                    Ответить
                                        • Я отправил эмодзи, получилось:
                                          Телеграм: сообщение с эмодзи
                                          Хуз: пустое, как ванишед на гк
                                          Гк: нихуя.

                                          Соответственно далее можно отвечать на него чем угодно, и на гк не попадёт, так как не на что реплай делать.
                                          Ответить
                              • > 2018-11-10T04:22:55+00:00 проснулся Борманд и изменил статус на красный.

                                > 2018-11-10T04:37:16+00:00 Борманд починил сток и изменил статус на зелёный.

                                Лог явно демонстрирует что у однопоточного борманда, который проснулся по прерыванию, пирфоманс оказался на порядки выше, чем у стаи анскильных мускульных обезьян, и сотни питушков с окрестаторами, кластерами и репликами.
                                Ответить
                                  • Реально такой охуенный лог получился. Я кайфанул от прочтения.

                                    2018-11-10T01:36:34+00:00 поток «666_N33D135» обнаружил рассинхронизацию данных и послал сигнал бедствия потоку «борманд».

                                    2018-11-10T04:22:55+00:00 Поток «борманд» проснулся по сигналу и изменил флаг status на «красный».

                                    Остальные потоки перешли в состояние wait.

                                    2018-11-10T04:37:16+00:00 Поток «борманд» закончил работу, изменил флаг status на «зелёный» и отправил notify ожидающим обновления потокам.
                                    Ответить
                          • >2018-10-30-oct21-post-incident-analysis
                            >Microsoft completes GitHub acquisition - The Official ...
                            >[Search domain blogs.microsoft.com/blog/2018/10/26/microsoft-completes-github-acquisition/]

                            Магия дат.


                            MS за всё берётся смело.
                            Всё получается говно.
                            А если за Skype возьмётся,
                            То просто тратит меньше сил.
                            Ответить
                          • >Вообще хорошая статья, захватывающая.

                            Я когда её читал, то живо представлял войну нигеров с West Coast против черномазых с East Coast, которые не могут собрать кворум, прийти к консенсусу, решить кто главный и поэтому постоянно конфликтуют между собой.
                            Ответить
                        • > и в результате они оказались с двумя несовместимыми копиями БД

                          А джойнить бд запрещено законодательно.
                          Ответить
      • а вообще у .net есть компонент для вывода формы из базы
        А еще есть access: там такое вообще делается за 15 минут
        Ответить
  • Блин, и в статье пишут про несколько часов на перебор. Хотя может на проце так и есть.
    Ответить
    • Судя по статье он там вообще прогой на шарпе перебирал.

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

                    Вот, например, в том списке нет имени Бедрос. Значит, Филиппа Бедросовича мы не сможем деанонимизировать, если не включим такое странное имя в перебор.

                    Или вот ещё реальный пример: у бывшей главы нашей управы отчество Арториджевна. Она говорила, что её отца вообще-то звали Арториксом, но в паспортном столе по ошибке написали Арторидж, а потом решили не исправлять.
                    Ответить
                  • Ещё реальные примеры: у одного моего препода отчество Рамович, у другого — Гайкович.
                    Ответить
                • <aster> "Прошу завести электронную почту для Мафусаилов Наиль Гафурович
                  <aster> Желаемый адрес электронной почты (если не занят): Мафусаилов Наиль Гафурович"
                  <aster> нет, бл@ть. Не занят. Не поверишь, бл@ть, но не занят.
                  Ответить
            • Но не любые. Александра, Евгения подходят, например.
              Ответить
            • В Исландии можно взять матроним: если по какой-то причине тебе не известен твой отец, или ты не хочешь себя с ним ассоциировать, ты можешь взять матчество.
              Ответить
  • >> SHA256 длиной в 256 бит, это 32 байта. Но мы старательно пихаем их в num varchar(10).
    Sqlite всё стерпит

    Какой багор )))
    Ответить
    • В sqlite все поля в виде строк хранятся. Длина для совместимости оставлена.
      Ответить
    • > varchar(10)

      Ахаха. Они его плейнтекстом до этого хранили, только под конец в sha обмазали?

      Какой дедлайн )))
      Ответить
  • Ну так что, где можно скачать бесплатно без смс?
    Ответить
      • > пока нет

        А будут? Какие вообще данные оттуда можно получить?
        Ответить
        • Тебе ж, казали, номера паспортов голосовавших. Нахуй не надо
          Ответить
          • Если только номера, то действительно, нахуй они нужны? В статье на швабре что-то про номера телефона кукарекнули.
            Ответить
              • В общем понятно. Очередной хайп подняли, в итоге нихуя то и не было.
                Ответить
                    • Иди оффтопь в другое место, тут для другого тред
                      Ответить
                      • Ахахах. Представляю, как я всех уже тут заебал )
                        Ответить
                      • Пидарнули за не сданный экзамен по ма-те-ма-ти-ке?
                        Ответить
                        • Нет, пришёл, посидел два курса, поделал курсачи и дипломы кому-то по фану, пошёл работать.
                          Ответить
                          • Не жалеешь? У нас один джун работает (и очевидно скоро он перестанет быть джуном) - пидарнулся с первого курса, т.к. ему было не интересно, он и так всё знает. Мне кажется он пожалеет.
                            Ответить
                                • Так предметно-то о чем? Что чего-то не знаю? Что корки нет? О чем?

                                  И джун твой о чем должен пожалеть?
                                  Ответить
                                    • Я думал ты прям клонишь у чему-то. Жалею конечно, я романтик, и тоскую по учёной среде как по институции, особенно когда читаю что-нибудь про хакеров второй волны, как они там ебошили на базе именно университета.

                                      Но ты же сам знаешь, что на любом собесе похуй на диплом, а прогать для меня не главное, я в той же мере прогер как и дохуя ещё чего, я искусством разным занимаюсь, прозой, музыкой, кином. Недавно вот магистерский дисер по культурологии писал, тоже не себе лол.
                                      Ответить
                            • Может пожалеет, может нет. Зависит от того, чем будет заниматься.

                              Скорее всего будет сосать в дискретке и матане, может быть в архитектуре компьютера, но если будет обычный рядовым программистом, то вероятнее всего он этого даже и не заметит.
                              Ответить
                                  • Ну матан я реально настолько не знаю, что даже плохо представляю, чем он прогеру полезен. Ну допустим графоний (64к демки делать), но это ж ниша. А по существу? Нук замотивируй.
                                    Ответить
                                    • Кажется что не только 64k, а вообще для работы со сложными двумерными объектами он уже может быть полезен (площадь там посчитать, то-се).

                                      В датасайнсе он есть
                                      https://towardsdatascience.com/calculus-in-data-science-and-its-uses-3f3e1b5e5b35

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

                                        Ну я пошёл в аспирантуру, чтобы откосить от армии.
                                        Ответить
                                      • Ну вот и получается что взрослые по сути люди вместо того чтобы вливаться в общество сидят в каком-то говне типа школы
                                        А могли бы пхп выучить и семью кормить
                                        Ответить
                                        • Они вличвются в общество ровно таким образом. Пропускная способность вуза огромна, в итоге он даёт какой-то культурный код для распознавания свой чужой , по аналогии с "не служил не мужик", если человек психически здоров.
                                          Ответить
                                      • Кстати, математика это единственное, ради чего реально стоит идти в вуз. Все остальное можно осилить самому, даже всякую сложную низкоуровневую питушню. Математику может быть тоже можно, но я такого не видел
                                        Ответить
                                          • да, пожалуй что тоже. Но она как раз нужна гораздо реже, разве что ты захочешь исследовать процесс разработки, или как-то глубоко задумываться об устройстве мира и поведении пользователей
                                            Ответить
                                          • Дык в вузах нет философии. Там скорее история философии, в которой рассматривается кто что сказал. Это можно и самому в инете почитать.

                                            Там же нет практики и т.п. в отличие от матана.
                                            Ответить
                                            • Ну на куманитарных специальностях нечто получше бывает, но я не об этом говорил.

                                              Питуз сказал, что не видел, чтобы кто-то математику сам изучил.
                                              Я спросил наводчюящим вопросом, а видел ли он, чтобы кто-то философию сам изучил, намекая как раз на то, что всё в общем то и изучается самостоятельно.
                                              Ответить
                                              • Эм, ну у реальных философов она была. Да и сейчас есть. Спорить, доказывать, выдвигать новые идеи. Вот это всё.

                                                А не просто цитировать чуваков из прошлого.
                                                Ответить
                                        • В нашем вузе математика - это единственная специальность, где не было заочки.
                                          Ответить
                                        • Ну вот кстати у математики есть 2 стороны.

                                          Практическая - формулы и теоремы, которые тебе реально могут понадобиться в работе и отдыхе.

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

                                          Но вот максимум пользы от математики в вузе как раз от теоретической части, имхо. Практику то можно нагуглить без проблем. А вот научиться что-то доказывать без "мамой клянусь" очень сложно. И у многих людей, которые забили на вуз, с этим есть проблемы.
                                          Ответить
                                          • s/$_/математику уже по тому учить следует, что она ум в порядок приводит./
                                            Ответить
                                          • Гуглежка формул тоже не всегда помогает: слишком большое там дерево зависимостей. Чтобы что-понять, нужно понять все prerequisites.


                                            Что безвузному питуху скажет фраза:

                                            "Гамма-потоком называется стационарный поток без последействий, у которого интервалы между событиями представляют собой случайные величины, подчиненные гамма-распределению с параметрами [формула]" ?
                                            Ответить
                                            • Скажет загуглить этот текст, чтобы в целом понять, из какой это области знания. Затем уточнить термины "стационарность", "последствие", "распределение". Затем перечитать ещё раз, уже с каким-то бэкграундом. В зависимости от необходимости удовольствоваться таким поверхностный представлением, либо углубиться, либо забить.
                                              Ответить
                                            • А х.з., мне эта фраза тоже ничего не говорит. Я в душе не ебу что такое потоки и последействия. Я тут разве что общую концепцию случайных величин и распределений могу вспомнить. Это какая-то жёсткая матстатистика?
                                              Ответить
                                                • И много ты в математике своими словами рассказать собрался?
                                                  Ответить
                                                  • > И много ты в математике своими словами рассказать собрался?

                                                    Ну вон один японец рассказал своими словами теорему ферма, чуваки потом несколько лет это прочитать и разобрать пытались.
                                                    Ответить
                                                • > своими словами

                                                  Дельта-вариантной квантификацией называется квантификация, каждый комбинационный квант которой подчиняется дельта-распределению Маркова в соответствии с формулой:
                                                  Ответить
                                          • Чтобы уметь доказывать, нужна логика, а не математика. А по эту сторону стены логику, насколько я не знаю, отдельным предметом не преподают.
                                            Ответить
                                            • Ты имеешь ввиду какую стену?

                                              Логику преподают на матфаках, а чо нет.
                                              Ответить
                                                • ты из гдр?

                                                  Вроде как без логики люди даже в и, или и не не смогут
                                                  Ответить
                                                  • Окологуманитарии считают, что математика — это только про числа, только чтобы посчитать, а логика — то другое.
                                                    Ответить
                                                    • Числа же это вообще только частный случай всякой алгебраической хуйни, не?
                                                      Ответить
                                    • Это правда. Дохуя знают питухов, которые зачем-то ходили в вуз, и нихуя оттуда не вынесли, и работают хуйней какой-то и лучше бы они пять тел бухали
                                      Ответить
                                • Совершенно верно: за вордпрессы и сайты.
                                  А так же за энтерпрайз с базами данных и вебмордами, за клиенты этого энтерпрайза под мобильные устройства, и еще за кучу всего галерного, где вообще никакой математики нету
                                  Ответить
                    • Ну меня просто достал твой дискурс на тот момент, типа "а чо это такое? А что случилось? а объясните? А чо это значит? А сделайте все за меня? А расшифруйте? А чо это значит? А где скачать? Все ясно, хуйня, зря вонь подняли".

                      Нет,не хуйня, я впервые вижу такой хуевый софт на мероприятии такого масштаба. Для меня это плохой знак. А ещё, медуза в расследовании показала, что среди голосовавших указаны недействительные паспорта. Не зависимо от того сколько их, это тоже важный знак, и хорошее расследование.
                      Ответить
                      • >я впервые вижу такой хуевый софт на мероприятии такого масштаба.

                        а ты видел сырцы другого госсофта? Имх0, он всегда парашный
                        Ответить
                      • Так а хуле. Слита и расшифрована некая база, но никто не может дать прямую ссылку, или хотя бы сказать схему данных. Я не хочу пердолиться за зря (syoma). Я то думал там passport_num <-> phone как минимум, но вы говорите только passport_num и интереса для меня не представляет.

                        Я не спорю, что софт хуевый, и что это позор.
                        Ответить
                        • Фу, как сема. Ну другие же поняли это все ещё из статьи, почему один ты переспрашивал? Лень внимательно читать? Нажуя тогда вообще все
                          Ответить
                        • Прямая ссылка это статья в данном случае вроде как
                          Ответить
            • Номера телефонов можно получить, только если сджойнишь её с другой базой, а именно с базой данных операторов связи.

              На «Швабре», кстати, заметили, что джойн разных баз явно запрещён на законодательном уровне.
              Ответить
              • > джойн разных баз явно запрещён на законодательном уровне.
                Ахуеть. Именно по этой причине я должен в каждую сраную госорназинацию нести одни и те же документы
                Ответить
                • Так они минимизируют багры в случае недобросовестного использования базы или утечки. Если спиздят инфу о тебе, то хотя бы не всю сразу.
                  Ответить
                  • Предлагаю тогда ничего вообще не хранить, и заставлять меня каждый раз носить с собой полный пакет документов
                    Ответить
                  • А ещё любая вахтерша не может анально взять под контроль твою жизнь, если устроилась на вахту в паспортный стол полы мыть.
                    Ответить
                • Ничего. Зато гугл всю собранную о юзерах инфу джойнит в бигдату.

                  Итого: утечки данных и слежка происходят постоянно, а карту в каком отделении открывали в то и пиздуйте (с кодом, паспортом и справкой что не верблюд).
                  Ответить
              • А имя и фамилию можно получить, сджойнив с базой паспортного стола. Это ты к чему?
                Ответить
              • > джойн разных баз явно запрещён на законодательном уровне

                Какая денормализация )))
                Ответить
  • Интерсно а когда блокчейн с голосами утекет. Можно будет с паспортами сопоставить.
    Ответить
    • К ПХП бы не было претензий: там весь код такой же хуевый. А тут все таки нормальный язык.
      Скорее всего взяли ПХП программиста, и велели ему написать десктопный софт
      Ответить
      • > Скорее всего взяли ПХП программиста

        Это с хуя ли? Из какого приёма в коде ты это понял?
        Ответить
        • string.Format("select * from passports where num='{0}' limit 1;"
          *https://visualstudiomagazine.com/articles/2017/07/01/parameterized-queries.aspx
          Ответить
          • Не показатель. Сначала убедить, что гуглится по запросу "си шарп база данных запрос" имеено параметризованный вариант. Хуй-то там, полагаю. На всей виндузне, кроме наверное F# по понятным причинам, есть своя критическая масса говнокниг (лицензед бай мелкософт) говнотуториалов, говнодоков, долбоебских ходов в самой организации свистоперделок в их инструментах разработки, что писать говнокод можно учиться сразу там, не заходя в ПХП. Даже круче получится, погромизд не поймёт, что вообще такое компилятор, что за xml-ки генерятся волшебные, когда ты разместил кнопочку на форме мышечкой, что такое файл с кодом (который в пхп более самоочевиден), для него всё будет волшебной картинкой с волшебными кнопочками, где надо писать в волшебное окошко волшебные слова, и иногда оттуда ругаются что что-то не так, а иногда всё нормально. Плюс к уёбищным именам (CommandButton1) виндузоИДЕ располагает значительно круче, чем похапешное файло, где хотя бы ненароком задуматься можно, как назвать.

            Ну сделал он говнозапрос без параметризации. Наверное так было в первом примере кода по запросу "сисярп эскулайт", сам проверяй. Лично для меня не факт что пхп тут причем-то.
            Ответить
            • Вбил в гугл. Первая ссылка

              https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ado-net-code-examples
              SqlCommand command = new SqlCommand(queryString, connection);
              command.Parameters.AddWithValue("@pricePoint", paramValue);


              Долбоебизм "писать код в обработчике кнопки" это вполне себе подход .net pre-junior программиста.
              А вот так запросы клеить -- это уже пыхапизм:)

              Но вообще там наверху вроде уже как распидалили, что нужно было брать Linq2SQL или EF. Писать запросы руками в таком тупом приложении не жнуо
              Ответить
              • Ну это ты конечно прихуел англоязычный источник-то открывать, ты б ещё загуглил сразу "parameterized", а потом сказал что гуглится всё заебись.

                Но да, в основном даже васяны сразу показывают синтаксис с собачкой для параметров, хотя если загуглить просто СИШАРП БАЗА ДАННЫХ, то на первом месте у меня vscode.ru с инструкцией, как конкатенировать запросы из строк для MySql, сразу естественно с инъекциями.

                Так что скажем честно, след похапе крайне косвенный.
                Ответить
                • У меня первая ссылка вообще без SQL запросов. У ADO.NET есть смешной API, когда ты вручную собираешь ряд (как такой моссив) а потом его пхаешь в таблицу. Вот там его используют

                  DataRow nRow = main.testDataSet.Tables[0].NewRow();
                                  int rc = main.dataGridView1.RowCount + 1;
                                  nRow[0] = rc;
                                  nRow[1] = tbName.Text;
                                  nRow[2] = tbPhone.Text;
                                  nRow[3] = tbMail.Text;
                                  nRow[4] = tbPhoto.Text;
                                  main.testDataSet.Tables[0].Rows.Add(nRow);


                  какой ADO.NET :)))

                  Кстати, не такой уж и плохой интерфейс имхо
                  Ответить
                    • Что фетч?
                      Запихай мне новую запись в СУБД базонезависимым способом не пися ни строчки SQL.
                      Ответить
                      • Ну способ на вид говно, городить константы для названий столбцов придется, ебал я в рот все эти [3] [1] [6]
                        Ну а что касается запихать тебе базонезависимым способом — ну так такую прослойку и должны создавать орм'ы cо своими дсл'ями. Вся твоя базонезависимость строится на том, что реализация скрыта. Ну так и в орм она скрыта может быть, и будет значительно лучше какого-то обоссаного массива. Промапленные объекты, где ты прямо по бизнес-логике пишешь поля и делаешь update в тыщу раз пижже, и это уже давно мейнстрим где угодно. Хуйня твой массивчик.
                        Ответить
                        • >константы
                          ты не поверишь:
                          https://docs.microsoft.com/en-us/dotnet/api/system.data.datarow.item?view=netcore-3.1#System_Data_DataRow_Item_System_Stri ng_

                          ADO.NET это не ORM. Это интерфейс к базе данных, как JDBC.

                          Он позволяет работать с БД как с таблицами. Это позволяет делать код уровня работы с БД, не зависящий от конкретной СУБД.

                          Пример: GridView: контрол, который умеет нарисовать таблицу и вывести в нее данные красивым способом прямо из СУБД в один клик.
                          Другой пример это экспорт этого дела в csv.
                          Ты можешь написать код, не зависящий от конкретной СУБД, и при этом не написать ни строчки SQL вручную.

                          В пыхе ничего подобного нету даже близко.
                          Ответить
                          • Не понимаю боязни sql, но допустим.

                            Ну короче ты нахваливаешь конкретный data grid, то есть представление о таблице именно как о ТАБЛИЦЕ. Для самописного экселя прикльно, но это далеко не единственная форма данных. которую держат в базах.

                            Если я буду идти циклом по этой хуйне, и по какому-то условию менять строчку или не менять, то у меня на практике выполнится не цикл с пачкой update, а один хороший update с правильным where? squeryl например так умеет.
                            Ответить
                            • >Не понимаю боязни sql
                              Во-первых написание руками строковых литералов с запросами это всегда error prone. Это нужно делать, только если более высокие уровни абстракции не позволяют тебе этого НЕ делать (например, по причинам перформанса).

                              Во-вторых я же привел пример GiidView: Ты пишешь контрол, который должен вывести таблицу из базы.

                              В случае ручного SQL тебе придется знать специфичный для конкретной СУБД способ получения списка колонок, сортировки итд.

                              Но даже и без GridView работать через более высокоуровневый API однозначно приятнее.

                              >но это далеко не единственная форма данных. которую держат в базах.

                              Разумеется.

                              >то у меня на практике выполнится не цикл с пачкой update, а один хороший update с правильным where?

                              Хороший вопрос. Скорее всего всё будет не оптимально. Если ты хочешь более умного обновления, то действительно надо брать EF.

                              >цикл с пачкой update, а один хороший update с правильным where?

                              Скорее всего nfv
                              Ответить
                                • Это проверка того, что ты дочитал сообщение до конца.
                                  Всё будет плохо и не оптимально
                                  Ответить
                                • Кстати, я малеха напиздел (что несколько снижает мой пафос конечно), давно не трогал ado.net
                                  Там есть понятие DataSet, его надо заполнить через Adapter.
                                  Adapterу все таки нужно скормить один запрос -- для Select, а остальные запросы заполнит Builder.
                                  Тогда можно заполнить датасет из адаптера, изменить его, и коммитнуть обратно.

                                  using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Db"].ConnectionString))
                                              {
                                                  conn.Open();
                                  
                                                  var adapter = new SqlDataAdapter("SELECT * from Users", conn);
                                                  new SqlCommandBuilder(adapter); //генерит остальные команды
                                                  var dataset = new DataSet();
                                                  adapter.Fill(dataset); //можно указать с какой строки по какую вычитать
                                                  var table = dataset.Tables[0];
                                                  foreach (DataColumn column in table.Columns)
                                                  {
                                                      Console.WriteLine(column.ColumnName); //Каллонки
                                                  }
                                  
                                                  foreach (DataRow row in table.Rows)
                                                  {
                                                      Console.WriteLine(row["Name"]); //ряды
                                                  }
                                  
                                                  var newRow = table.NewRow();
                                                  newRow["Id"] = 22;
                                                  newRow["Name"] = "foo";
                                                  table.Rows.Add(newRow); //Добавляем row
                                                  adapter.Update(dataset); //коммитим
                                              }

                                  Но всё равно это более высокоуровнево, чем голые запросы на insert
                                  Ответить
      • да, если у тебя был опыт с ПХП
        Ответить
          • Можно, но трудно. Это как вирус герпеса: можно вылечить (ну или задавать симптомы), но лучше не болеть:)
            Ответить
          • Можно. Для этого нужен кирпич либо стена. Правда, срабатывает не со стороцентной ворентностью, и возможны побочные эффекты.
            Ответить
            • Ну вообще я видел излечившихся пыхеров. Нужен хороший язык, хороший фреймворк/проект, хороший код, и ревью хороших коллег
              Ответить
              • Излечившихся — это тех, для кого пых был первым языком что ли? Так-то с него дохуя кто слезает, ничего сложного.
                Ответить
                • К сожалению, не у всех эти получается.
                  У нас тут иногда постят цитаты с phpclub.ru. Там сидят сорокалетние ПХП программисты. Это очень печальное зрелище
                  Ответить
        • На любом языке можно писать как на любом другом, при достаточной степени ignorance_mode "on"
          Ответить
          • Не-а. Нельзя писать на шестой джаве как на хаскеле
            Ответить
              • Я видел человека, который пытался писать на пхп как на джаве: делал во круг всего ООПшные обертки. Получалось худшее из двух миров
                Ответить
                  • Нету п0д рукой, но он там интерфейс List выписал, занаследовал от него свой ArrayList, и всё это чуть ли не на четвертом пыхе в 2004-м году
                    Ответить
                    • Это очень скучный код, но не самый пиздецовый.

                      А разгадка одна: строить UI лучше декларативно.
                      См XAML/WPF, Kotlin UI DSL, XML из Android Layout Editor итд.
                      Императивно писать

                      t2.setBounds(50,150, 200,30);
                      f.add(t1); f.add(t2);
                      f.setSize(400,400);

                      это очень уныло
                      Ответить
                      • да я не про это, UI это только пол беды, но вот тебе сразу набор важных похапешных навыков: неговорящие уебищные имена сущностей, код идёт простынёй, не бьётся на методы даже там, где это напрашивается, обработчик определяет, какую кнопку нажали, сравнивая источник события с объектом через ==, при всего двух ветках if-else вместо if-else или тернарника пишется избыточный if-else-if, и так далее. Так можно переписать любой джавовский код, будет тебе похапе-стайл.
                        Ответить
                        • Ну вот мне кажется, что это скорее какой-то бейсикстайл.
                          Чтобы добавить в код ПХПшности, я бы сделал так:
                          tf3.setBounds(50,150,150,20);  
                          String c = conn.createStatement().executeQuery("SELECT country FROM people where id=" + id).getString("c");
                          tf4.setBounds(50,150,150,c == "Armenia" ? 22 : 32);
                          Ответить
                  • извини, я жопой прочитал твой коментарий

                    Тогда пи прав
                    дивись, какое говно
                    <%@ page import="java.io.*,java.util.*" %> <!DOCTYPE html>
                    <html>
                    <head>
                    <title> Application Implicit Object</title>
                    </head>
                    <body>
                    <h1>JSP Tutorial</h1> <%
                    Integer counter= (Integer)application.getAttribute("visit");
                    if( counter ==null || counter == 0 ){
                    counter = 1;
                    }
                    else{
                    counter = counter+ 1;
                    }
                    application.setAttribute("visit", counter);
                    %>
                    <h3>Total number of view to this Page is: <%= counter%></h3>
                    <p>Copyright © 2017 By <a href="http://www.studentstutorial.com" target="_blank" style="text-decoration:none"><b style="color:green">studentstutorial.com</b></a>. All Rights Reserved.</p>
                    </body>
                    </html>
                    Ответить
              • Анонимный класс? Можно. Примерно как писать префиксное дерево на .bat файле
                Ответить
                • ну бывает. Ты б ещё сказал, что на брейнфаке ООП тоже неудобно. Оно понятно. Но изначальный афоризм (чей? забыл), "любой, кто писал на СИ, может писать на любом языке, как на Си" — говорит не про технические возможности реализации делалей другого языка, а про стиль.

                  Стилистически, да, можно поднажать на хоть какие-то возможности функциональщины и в шестой джаве. Без лямбды хуёво конечно.

                  Стилистически можно писать на PHP нормально, в этом я вас уверяю. Просто это неприятно делать, не понятно, зачем существовать в такой среде, где сам язык не уважает твою дисциплину, никак не поощряет и только мешается.
                  Ответить
                  • > изначальный афоризм (чей? забыл), "любой, кто писал на СИ, может писать на любом языке, как на Си"

                    Изначальный афоризм был про Фортран.
                    Впрочем разница не так велика
                    Ответить
                • > покровительницах имени Полина
                  > святой Аполлинарии, преподобной (подвизавшейся в мужском образе),
                  Какое наебалово )))
                  Ответить
  • говнокоды писать будет комфортнее, на сытый желудок, тут рецепты готовим сами https://gotovim.su/
    Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8