1. PHP / Говнокод #26462

    0

    1. 1
    Именно поэтому я за "РНР".

    Запостил: gostinho, 03 Марта 2020

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

    • А я за "MySQL"
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • такой гет просрали
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Какой скилл )))
        Ответить
      • > medium.com
        > байтоебство
        > до-диез с гигабайтным рантаймом
        > self-contained
        Держите кащенита!
        Ответить
      • заебись. CLR пока единственная платформа, на которой можно нормально кроссплатформенные утилитки писать.
        Ответить
        • В «Гитхаб» заглядывал? «Add support for DOS». Этот маньяк прикрутил к программе рантайм и загрузчик другого маньяка ( https://github.com/Baron-von-Riedesel/Dos64-stub ), чтобы игру можно было запустить из голого DOS: загрузчик переводит процессор в «длинный» 64-битный защищённый режим и устанавливает DPMI — переходники между программой защищённого режима и функциями DOS.

          Программа, скомпилированная для CLR, к которой прикручен автономный рантайм, который запускается из 64-битного режима из-под DOS.

          Вполне можно использовать для эмбеддопердолинга.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • >> All told, for each computer I needed to run this little .NET application on, I had to download something like 70 or 80 MB (good thing we have a fast net connection) and reboot three or four times.

              Какой багор )))
              Ответить
            • Из заметки Стреховского: «IL Linker is a tool that shipped with .NET Core 3.0 — the tool removes unused code from your app by scanning the entire program and removing assemblies that are unreferenced. To use it with the project, pass a PublishTrimmed property to publish. Like so: dotnet publish -r win-x64 -c Release /p:PublishTrimmed=true».

              Вышел .Net Framework 1.0, 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.6, 4.7, потом ещё несколько версий .Net Core и только тогда появился линкер.
              Ответить
        • показать все, что скрытоvanished
          Ответить
          • jvm пока еле-еле умеет в self-contained через native image, в то время как дотнет ведет себя как порядочный гражданин
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • это да

                но type erasure это ёбаный блядь антипод «За одни только struct/value type можно ставить памятник при жизни»
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • > (удачи с реализацией Either c List<String> и List<Integer>)

                    Моя самая большая претензия ко всей этой хуйне - это не то, что можно кастануть что угодно к чему угодно, а то, что я не могу объявить метод roosterize(List<Integer>) и roosterize(List<String>).
                    Какого хуя я со стороны написания кода должен думать про ограничения рантайма?
                    Ответить
                  • > копипастой

                    Всего лишь 8 раз (object и все примитивы) написать реализацию какого-нибудь generic контейнера...
                    Ответить
                    • самое смешное в интернете - это защитники го, которые не понимают или делают вид, что не понимают, в чем здесь проблема
                      Ответить
                      • У них поди не 8 раз как в джаве, а вообще под каждый тип?
                        Ответить
                        • Да, но проблемы нет, вы просто не понимаете всю прекрасную простоту языка
                          Ответить
                      • В го просто всё, что можно было прибить гвоздями к полу, прибили. Какие могут быть дженерики в языке, в котором есть стандартный официальный форматтер кода, который пиздячит не покладая рук при каждой компиляции?
                        Ответить
                      • в го сть уже генерики

                        func foo[T int8 | int64 | float64 | int](a T, b T) T {
                        	return a + b
                        }
                        
                        func main() {
                        	fmt.Println(foo(1, 1))
                        }
                        Ответить
                    • показать все, что скрытоvanished
                      Ответить
    • я принял решение больше не троллиться
      Ответить
    • https://dev.to/joanllenas/decoding-json-with-typescript-1jjc

      джаваскриптеры переизобрели свою же (!) JSON Schema
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Это вина не только миллениалов, а и тех, кто не смог в их светлые головы вложить, что необязательно всё переделывать с нуля.
          Весь этот снобизм Ъ-программистов, которые "а я же блядь ещё ENIAC застал и перфокартами жопу подтирал", со счетов сбрасывать не стоит.
          Ответить
    • показать все, что скрытоvanished
      Ответить
    • Именно поэтому я за ванильный JAVASCRIPT
      Ответить
      • s/ванильный/анальный/

        fixed
        Ответить
      • насколько ж блядь были душными эти шутки про "я пишу на фреймворке vanilla js"
        прямо хуевый эталон на стыке доменного и напыщенного юморов
        как хорошо, что эти времена закончились
        Ответить
    • Давайте обсирать и течь от API.

      Какие апишки вы считаете полным говном, а какие охуенными?
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • В жабе нет нормальной инициализации, что ли? Вот то же самое на жабоклоне «C#»:
          using var client = new HttpClient(); //но вообще лучше использовать всегда один и тот же инстанс вместо того, чтобы диспозить и пересоздавать
          var content = new Dictionary<string, string> {{"a", "1"}, {"b", "2"}};
          var response = await client.PostAsync("http://www.example.com", new FormUrlEncodedContent(content));
          Ответить
          • показать все, что скрытоvanished
            Ответить
          • C#
            >var content = new Dictionary<string, string> {{"a", "1"}, {"b", "2"}};
            А что в шарпик автовывод типов до сих пор не завезли?

            Java
            >var x = Map.of("a", "1", "b", "2");
            Ответить
            • показать все, что скрытоvanished
              Ответить
            • > Map.of
              > автовывод типов
              Ты вот сейчас серьезно? Я на жабе ни строчки не написал за всю жизнь, но Map.of сейчас посмотрел в доках (https://docs.oracle.com/javase/9/docs/api/java/util/Map.html#of--). Это же просто лол. Наебашена куча методов для разного количества элементов, при этом максимальное количество — 10. Ява такая ява. Я тебе такое же и на до-диезе могу сделать:
              Метод
              Dictionary<K, V> Mapof<K, V>(K k1, V v1, K k2, V v2) => new Dictionary<K, V> {{k1, v1}, {k2, v2}};

              Использование
              var map = Mapof("a", 1, "b", 2);

              Но нахуя, если есть и так нормальная инициализация?
              Ответить
              • >Но нахуя, если есть и так нормальная инициализация?

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

                >Наебашена куча методов для разного количества элементов
                Это оптимизация для небольших мап. Для больших есть варарг.

                >Dictionary<K, V> Mapof<K, V>(K k1, V v1, K k2, V v2) => new Dictionary<K, V> {{k1, v1}, {k2, v2}};

                Ещё с 7ой части ява умеет выводить типы на конструкторах. Называется diamond: new HashMap<>()
                А на методах, так и вовсе с 5ой
                Ответить
              • Блядь, почему в большинстве языков со статической питузацией такой пиздец со словарями? То автовывод проёбывается, то нормального списка инициализации нет, то ещё какая-то хуйня, причём большинство попыток починить ситуацию происходят только лет через двадцать после создания языка.

                То ли дело «Python»:
                d = {
                    'a': 1,
                    'b': 2
                }
                Ответить
            • показать все, что скрытоvanished
              Ответить
              • В «Delphi» и в «FPC» можно создавать на лету одномерные полиморфные массивы, но только при вызове функции:
                {$MODE DELPHI}
                procedure KOKO(petuhi: array of const);
                var
                  petuh: TVarRec;
                begin
                  for petuh in petuhi do
                    begin
                      case petuh.VType of
                      vtInteger: Writeln('Целый петух: ', petuh.VInteger);
                      vtExtended: Writeln('Плавающий петух: ', petuh.VExtended^);
                      vtAnsiString: Writeln('Петух в стрингах: ', AnsiString(petuh.VAnsiString));
                      else
                        Writeln('Петух типа ', petuh.VType);
                      end;
                    end;
                end;
                 
                begin
                  KOKO(['petuh', 12])
                end.


                https://ideone.com/ZDm5TT

                Двумерные массивы таким путём не создашь.
                Ответить
                • for petuh in petuhi do

                  Это только в новых делпхях.
                  Ответить
              • Можно ещё так:
                {$MODE DELPHI}
                procedure KOKO(petuhi: array of Variant);
                var
                  i: integer;
                  key, value: Variant;
                begin
                  i := Low(petuhi);
                  
                  while(i < High(petuhi)) do
                    begin
                      key := petuhi[i];
                      value := petuhi[i + 1];
                      Writeln('Ключ = ', key, ', значение = ', value);
                      Inc(i, 2)
                    end;
                end;
                
                begin
                  KOKO(['petuh', 'Петя', 'iq', 12])
                end.


                https://ideone.com/uWZCf5
                Ответить
              • в го тоже есть литералы
                func main() {
                	languages := map[string]string{
                		"PHP": "kal",
                		"go":  "tozhe kal",
                	}
                	for key, value := range languages {
                		fmt.Printf("%s is %s\n", key, value)
                	}
                }



                Но вообще это все было в перле когда вы еще не родились
                my %hash = ("perl" => "rules");
                for my $lang (keys %hash) {
                    printf "$lang $hash{$lang}\n";
                }
                Ответить
        • У NSURLSession удобные dataTask'и и всякое такое.
          Ответить
        • >CloseableHttpClient client = HttpClients.createDefault()
          Какой анскилл )))

          Это же не ява, а third-party питушня. А именно древняя апачевская либа.

          https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/CloseableHttpClient.html
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • В гугле забанили?

              HttpClient.newHttpClient().send(
                   HttpRequest.newBuilder()
                             .uri(URI.create("http://www.example.com"))
                             .headers("name", "petuh", "iq", 1)
                             .POST(BodyPublishers.ofString("koko"))
                             .build();
              );

              https://docs.oracle.com/javase/10/docs/api/jdk/incubator/http/HttpRequest.html
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • В реальном коде это говно будет выглядеть примерно одинаково:
                  response = requests.post(
                      'http://www.example.com',
                       data={'name': 'pythuh'},
                       headers={'Accept': 'application/json'},
                       auth=HTTPBasicAuth('koko', ...)
                  )

                  Если форматировать нормально, а не в 1 строку
                  Там и заголовки, и авторизация, и таймауты.
                  Ответить
      • показать все, что скрытоvanished
        Ответить
        • Проблема в том, что построению API не учат на профильных специальностях в вузах. А это ничуть не менее важно, чем какие-нибудь численные методы.
          Ответить
          • неправда
            Ответить
            • Пруфани
              Ответить
              • зная численные методы можно интеграл посчитать а зная как дизайнить АПИ можно только в лужу пукнуть
                Ответить
                • Помоему важно и то, и другое.
                  Без знания числовых методов можно всю жизнь делать отличные одностраничные сайты на wordpress в небольшой веб-студии за зарплату $700 и хостить их на беслпатных хостингах.

                  С другой стороны, зная ТОЛЬКО числовые методы можно сидеть в институте и делать непонятную никому хрень с непонятным интерфейсом про которую никто не знает и ничего не поймет при всем желании.

                  В программировании есть элемент ремесла, и он тоже важен.
                  Леонардо Давинчи не только вдохновление имел, но и знал как краски разводить
                  Ответить
                  • я сейчас сижу в убере и слушаю 6-часовые споры старперов про апи

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

                        Численные методы, исследования операций, матстат должны открывать возможности круче чем крудошлепа

                        Иначе я расстроюсь
                        Ответить
                        • ох, щась бы смузи наебнуть, клубничный, и холодный! ухх!
                          Ответить
                        • чот сомневаюсь, что там что-то интересное. 99% всё равно делается по справочнику.

                          но ты в общем можешь освежить знания и попробовать устроиться в какую-нибудь контору, которая занимается разработкой ПО для CFD, потом расскажешь, расстроился или нет
                          Ответить
                          • А в сравочнике оно по-твоему откуда? Там матстат доходящий до intermediate уровня и ряды начального.
                            Ответить
            • https://webmshare.com/Qb19a
              Ответить
    • можно ли реализоать полимофризм без указателей?
      Ответить
      • нет крестобляди, я не про шаблоны
        я про рантайм полиморфизм
        Ответить
      • не указывай мне как реализовывать полиморфизм
        Ответить
        • извини, я таксично-арбузиный, не могу не указывать
          https://pbs.twimg.com/profile_banners/2548766911/1650282387/1500x500
          Ответить
          • Это сотрудница фонда Навального написала? Вот это поворот
            Ответить
            • Да, это пресс-секретарь Навального, и она пишет про харрасмент.
              Ты увидишься, но и прошлая его пресс-секретарка Анна Ведута тоже говорила про харрасмнет
              https://www.wonderzine.com/wonderzine/life/news/250069-venediktov-harassmet-allegations
              Ответить
      • Ad-hoc полиморфизм — вполне.
        Ответить
    • Как правильно протестовать за аборты
      https://webmshare.com/KA6PA
      Ответить
    • Го конечно смешной: ты ничего не должен знать про память, но на самом должен все про нее понимать.

      Если какая-то функция принимает интерфейс, и реализущая его структура имеет метод с приемником по указателю, то нужно явно передавать указатель на структуру, потому что go не может в общем случае взять адрес у правого выражения по понятным причинам.

      А если таких методов нет, то можно передать как указатель, так и само значение.

      На вопрос "должен ли приемник в методе принимать указатель или значение?" гофер отвечает: "нуу, если семантика у тебя value, то передавай значение, а если нет -- указатель, но это зависит".

      Мутный язык как йогурт
      type dier interface {
      	spreken()
      }
      
      type kat struct {
      }
      
      type hond struct {
      }
      
      func (k kat) spreken() {
      	println("meuw")
      }
      
      func (h hond) spreken() { //если тут написать *hond, то вместо foo(zhuchka) придется писать foo(&zhuchka)
      	println("gav")
      }
      
      func foo(foo dier) {
      	foo.spreken()
      }
      func main() {
      	murka := kat{}
      	zhuchka := hond{}
      	foo(murka)
      	foo(zhuchka)
      }
      Ответить
      • Причем если в C++ есть референсы, и можно просто заказать их в сигнатуре, а клмиент может даже не понимать, что он там передает (по значению або по референсу) то тут так нельзя кроме интерфейсов (в обычной функции что написано -- то и надо передавать)

        и конечно никаких тебе const вообще впринципе: либо экспортируй интерфейс (как в яже) либо все мутабельно. Слава Аллаху хотя бы интерфейс не надо явно реализовывать, бо тупизация структурная, как в typescript. Не надо как в яжа/шарп выстраивать лесенки иерархий
        Ответить

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