1. C# / Говнокод #26802

    +1

    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
    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, 11 Июля 2020

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

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


        «SQLite» — это, наверное, единственное хорошее, что есть в этом куске кода.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • >Entity Framework (бывает 5, 6, и Core) это мощный ORM типа Hibernate или sql alchemy

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

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

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

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

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

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

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

                      Вот так и думали разрабы гитхабов, фейсбуков и вкшечек.
                      «Мы сейчас быстренько на скриптухе наговнячим, а когда взлетит перепишем "по уму"».
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                      • Чо за проблема с гитхабом
                        Ответить
                        • Когда у них split brain случился. И они потом вручную восстанавливали комменты и т.п.
                          Ответить
                        • Смутно помню, что в прошлом году у них между двумя ДЦ разорвалась связь, и в результате они оказались с двумя несовместимыми копиями БД. Какой багор )))
                          Ответить
                          • Именно поэтому я против копий БД.
                            Ответить
                          • Подробнее: https://github.blog/2018-10-30-oct21-post-incident-analysis/.
                            Вообще хорошая статья, захватывающая.
                            Ответить
                            • https://govnokod.ru/25070#comment439987
                              Ответить
                              • Какой багор )))
                                Ответить
                                • Хуй
                                  Ответить
                                • > 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, которые не могут собрать кворум, прийти к консенсусу, решить кто главный и поэтому постоянно конфликтуют между собой.
                              Ответить
                          • > и в результате они оказались с двумя несовместимыми копиями БД

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

        Какой пирфоманс )))
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • Лол, как-будто это усложнит перебор.
        Ответить
        • Ну некоторые редкие отчества в словарь для перебора не попали бы
          Ответить
        • показать все, что скрытоvanished
          Ответить
          • А сколько всего имён? Ну и вообще тут утечка больше будет - там был только бесполезный номер, а тут ещё и отчество сольётся.
            Ответить
          • Нет. Женские имена не подходят.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • http://analiz-imeni.ru/men/vse-muzhskie-imena.htm

                Там есть «Ясон» и «Боян» )))
                Ответить
                • А Гурбангулы Мяликгулыевич Бердымухамедов там есть?
                  Ответить
                  • У него и регистрации в Москве нет.
                    Ответить
                    • Верно. Но я это к тому, что в Москве дофига странных имён.

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

                      Или вот ещё реальный пример: у бывшей главы нашей управы отчество Арториджевна. Она говорила, что её отца вообще-то звали Арториксом, но в паспортном столе по ошибке написали Арторидж, а потом решили не исправлять.
                      Ответить
                    • Ещё реальные примеры: у одного моего препода отчество Рамович, у другого — Гайкович.
                      Ответить
                      • > Гайкович

                        А Болтовича нету?
                        Ответить
                        • К сожалению, с отчеством Болтович у меня знакомых нет. И Шуруповичей тоже не знаю.

                          Кстати, Гайк — довольно распространённое армянское имя.
                          Ответить
                        • Кстати, про него анекдоты пишут:
                          https://live4fun.ru/joke/673691

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

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

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

        Какой дедлайн )))
        Ответить
    • Ну так что, где можно скачать бесплатно без смс?
      Ответить
      • У меня только в sqlite. Да и до компа целый метр идти.
        Ответить
      • Ап
        Ответить
      • Я скачал только хэши нумеров. Пароль 2020og, сам файл был тута:
        https://web.archive.org/web/20200701074010/checkvoter.gosuslugi.ru/degvoter.zip

        По запросу российского правительства «Вебархив» его удалил.

        Расшифрованных хэшей у меня пока нет.
        Ответить
        • > пока нет

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

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

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

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

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

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

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

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

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

                                            Но вот максимум пользы от математики в вузе как раз от теоретической части, имхо. Практику то можно нагуглить без проблем. А вот научиться что-то доказывать без "мамой клянусь" очень сложно. И у многих людей, которые забили на вуз, с этим есть проблемы.
                                            Ответить
                                            • s/$_/математику уже по тому учить следует, что она ум в порядок приводит./
                                              Ответить
                                            • показать все, что скрытоvanished
                                              Ответить
                                              • Скажет загуглить этот текст, чтобы в целом понять, из какой это области знания. Затем уточнить термины "стационарность", "последствие", "распределение". Затем перечитать ещё раз, уже с каким-то бэкграундом. В зависимости от необходимости удовольствоваться таким поверхностный представлением, либо углубиться, либо забить.
                                                Ответить
                                              • А х.з., мне эта фраза тоже ничего не говорит. Я в душе не ебу что такое потоки и последействия. Я тут разве что общую концепцию случайных величин и распределений могу вспомнить. Это какая-то жёсткая матстатистика?
                                                Ответить
                                                • В данном случае гуглится точная фраза:
                                                  https://ru.wikipedia.org/wiki/Теория_массового_обслуживания

                                                  А вот если бы она была написана своими словами, то фиг бы я её нагуглил.
                                                  Ответить
                                                  • И много ты в математике своими словами рассказать собрался?
                                                    Ответить
                                                    • > И много ты в математике своими словами рассказать собрался?

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

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

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

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

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

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

          Это с хуя ли? Из какого приёма в коде ты это понял?
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Не показатель. Сначала убедить, что гуглится по запросу "си шарп база данных запрос" имеено параметризованный вариант. Хуй-то там, полагаю. На всей виндузне, кроме наверное 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 :)))

                    Кстати, не такой уж и плохой интерфейс имхо
                    Ответить
                    • лол
                      array_fetch
                      Ответить
                      • Что фетч?
                        Запихай мне новую запись в СУБД базонезависимым способом не пися ни строчки 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 например так умеет.
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • я извиняюсь, что такое nfv?
                                  Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                  • Кстати, я малеха напиздел (что несколько снижает мой пафос конечно), давно не трогал 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
                                    Ответить
      • На любом языке можно писать как на PHP
        Ответить
        • Именно поэтому я за PHP.
          Ответить
        • показать все, что скрытоvanished
          Ответить
          • А обнулить опыт с ПХП как-то можно?
            Ответить
          • На любом языке можно писать как на любом другом, при достаточной степени ignorance_mode "on"
            Ответить
            • Не-а. Нельзя писать на шестой джаве как на хаскеле
              Ответить
              • Нельзя писать на «PHP» как на не «PHP».
                Ответить
                • Я видел человека, который пытался писать на пхп как на джаве: делал во круг всего ООПшные обертки. Получалось худшее из двух миров
                  Ответить
                  • Есть реальные примеры ЙАЖЫ как на ПХП?
                    Ответить
                    • >Есть реальные примеры ЙАЖЫ как на ПХП?
                      JSP
                      Ответить
                    • показать все, что скрытоvanished
                      Ответить
                    • а чо бы нет-то, вот из чего-нибудь такого экстраполируй дальше в остальные области:

                      https://www.javatpoint.com/java-awt-textfield
                      Ответить
                      • Это очень скучный код, но не самый пиздецовый.

                        А разгадка одна: строить 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);
                            Ответить
                    • показать все, что скрытоvanished
                      Ответить
              • А чо там, разве нельзя было возвращать Callable?
                Ответить
                • Анонимный класс? Можно. Примерно как писать префиксное дерево на .bat файле
                  Ответить
                  • ну бывает. Ты б ещё сказал, что на брейнфаке ООП тоже неудобно. Оно понятно. Но изначальный афоризм (чей? забыл), "любой, кто писал на СИ, может писать на любом языке, как на Си" — говорит не про технические возможности реализации делалей другого языка, а про стиль.

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

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

                      Изначальный афоризм был про Фортран.
                      Впрочем разница не так велика
                      Ответить

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