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

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    В России почти 10 лет легально работает сервис по псевдоремонту компьютеров. Его главные жертвы — пенсионеры
    За переустановку Windows «мастера» сдирают до 200 тысяч рублей
    
    
    
    https://dailystorm.ru/obschestvo/v-rossii-pochti-10-let-legalno-rabotaet-servis-po-psevdoremontu-kompyuterov-ego-glavnye-zhertvy-pensionery?utm_source=lentach&utm_medium=ctr&utm_campaign=lentach

    Запостил: ru66oH4uk, 02 Декабря 2019

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

    • дебилы
      Ответить
      • качество
        https://avatars.mds.yandex.net/get-zen_doc/225409/pub_5b1842e6eb269500a877d063_5b1846d79b4 03cf2839a8770/scale_1200
        Ответить
    • Да ты глаза всем открыл! У меня почтовый ящик ломится от этих "компьютерный мастер, живу в вашем доме сделаю быстро выезд бесплатно". Л0х не мамонт - л0х не вымрет.
      Ответить
    • > 200к
      За 200к я новый комп со свежей виндой куплю... нахуй мне мастер.
      Ответить
      • За 200к я могу винду и бесплатно поставить...
        Ответить
        • > за 200к бесплатно
          Напомнило рекламу от мегафона: только сегодня вы можете бесплатно подключить безлимитный интернет всего за 8 рублей в день.
          Ответить
      • Ну ты явно не целевая аудитория. Ты часто себе вызываешь школьника винду переставить?
        Ответить
    • свиньи. евреи и американцы даже на такого не делают, сука чтобу БЕДНЫХ СТАРИКОВ БЛЯДЬ!!!
      Ответить
    • хотя ты пиздабол знатный. у российских пенсионеров таких денег не бывает, только если они нажили бизнес в молодости
      Ответить
      • Им счёт на оплату выставляют, когда сам компьютер находится у них в сервисе. Заранее бы просили - шли бы на три буквы отовсюду
        Ответить
        • p.s. ненавижу этих свиней
          Ответить
        • Интересно, а со старыми компами потом что делают? Или пенсионеров еще припугивают, чтобы заплатили, а потом великодушно дают скидку? Мне просто тоже надо винду переставить, вот не знаю, к кому обращаться.
          Ответить
          • Зачем ты отвечаешь уебкам?
            Ответить
            • Да блин, я всех уебков по именам не помню. Я на пост отвечаю, если он нормальный - то ок, если уебанский - стараюсь не.
              Ответить
          • > Мне просто тоже надо винду переставить, вот не знаю, к кому обращаться.

            А к кому обращаться, если в Gentoo надо мир пересобрать?
            Ответить
            • К кому обращаться если я хочу собрать arch linux как виндовс и на сервере?
              Ответить
              • К кому обращаться, если я хочу собрать пазл?
                Ответить
                • Тот кто собрал себе идеальный под себя арч.
                  Ответить
                  • Если у тебя есть пара месяцев свобного времени, то можно всё под себя собрать, угу)
                    Ответить
                    • О том я и говорю что это гуру пазлов.
                      Ответить
                      • У множества же дистров - почти все готово, бери и пользуйся, как модно говорят "изкаробки".
                        А в арче ты хуй соси и никто тебе не поможет, кроме man и aur вроде. И не дай бог ты зайдешь на форум (Если сможешь из под чистого арча зайти на форму, конечно другие способы связи никто не отменял) с вопросом, как тебя же пошлют такую сранину на окошки и ты вообще блядь охуел не знать чего то, хули ты сюда лезишь сел на линукс - отдал косарь часов своей безполезной работы, что блядь не веришь в бога линуса значит ты?! Сука пизда тебе, артиллерия гноя из прыщей к бою!

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

                          теперь сижу на готовом
                          Ответить
                          • Сколько тебе за это заплатили?
                            Ответить
                            • Приведи пример, когда тебе в работе реально понадобилась оплата.
                              Ответить
                              • Приведи меня тихо по имени
                                Скилловой водой
                                напои меня
                                Ответить
                                • только «m» -> «M»
                                  Ответить
                                  • Ещё тонкости:
                                    1. С буквой «J» сочетается «I» (латинская «и» заглавная), чтобы получить «JI».
                                    2. С буквой «b» сочетается «l» (латинская «эль» маленькая), чтобы получить «bl».

                                    Как запомнить? Заглавная с заглавной, строчная со строчной, иначе по высоте не совпадут.
                                    Ответить
                                    • Сразу видно, что ты скилловый. Пойду перелогинюсь в анскильного петуха.
                                      Ответить
                                    • > С буквой «J» сочетается «I» (латинская «и» заглавная), чтобы получить «JI».

                                      Какой анскилл )))
                                      Ответить
                                • Прочитал как реальный принтер.
                                  Ответить
                    • К тому времени всё обновится и придётся собирать заново. Ахилесс и черепаха.
                      Ответить
              • Сразу видно, что ты "анскильный". На linux.org.ru
                Ответить
                • Сразу видно, что ты «админ». Ты знаешь про linux.org.ru.
                  Ответить
                  • Сразу видно, что ты пользователь "хуза".
                    Ответить
                  • лолол прыщеадника можешь привести пример, когда тебе реалбно понадобилось знать лор?
                    Ответить
                • https://www.linux.org.ru/news/development/14339650?cid=14342985
                  Ответить
            • --Добрый день, вы занимаетесь ремнотном комптютеров?
              --Да
              --У меня на солярке деградировал zfs..
              Ответить
              • А ведь есть объявления: «Настройка ЛЮБЫХ программ».
                Ответить
                • настройте мне пожалуйста модельку, чтоб сама настраивала компьютер
                  Ответить
        • А счет оспорить нельзя?
          Ответить
          • Оспаривать счёт можно только тех организаций, которым есть хоть какое-то дело до клиентов и своей репутации. Эти же пидорасы, очевидно, целиком и полностью мошенническая компания, и бумажками недовольных клиентов они будут только подтираться.

            Или ты имеешь в виду идти в Роспотребнадзор/суд? Так да, так делать нужно (хотя и далеко не факт, что что-то даст).
            Ответить
            • >Роспотребнадзор/суд
              Угу. А как они вообще могут заставить оплачивать их счет?
              Ответить
              • Кто они и кого их? Мошенники обманутых клиентов? Если комп в «сервисе» — просто скажут, что не отдадут, пока счёт не заплатят. Если ремонт на дому, то психологическим давлением (будут давить на совесть, грозить полицией, коллекторами, судами — и далеко не факт, что действительно не наймут каких-нибудь уебанов-коллекторов). Разумеется, грамотный и психологически устойчивый человек легко пошлёт их нахуй, но такие обычно услугами сомнительных ремонт-конторок не пользуются.
                Ответить
                • > не отдадут
                  Да и хуй с ним, если новый комп дешевле этого "ремонта"...
                  Ответить
                • > Если комп в «сервисе» — просто скажут, что не отдадут, пока счёт не заплатят.
                  И у них его никак не вернуть? Вы в 90х до сих пор живете?

                  >и далеко не факт, что действительно не наймут каких-нибудь уебанов-коллекторов
                  Ебать у вас там сомали.
                  Ответить
                  • > И у них его никак не вернуть?
                    Ну, очевидно, надо накатать заяву в полицию. Только, во-первых, ебли с этим будет просто овердохуя (вспоминается «Тамина утомила»: детективная история о том, как тня сдала макбук в ремонт плешивой конторке, а потом три года бегала по судам в попытках вернуть, естественно, не починенный ноут и/или деньги), а во-вторых, как я уже написал, это рассчитано на слабые слои населения, подверженные психологическому давлению.

                    > Ебать у вас там сомали.
                    Вообще, это раньше коллекторы борзые были и насрать под дверь могли. Сейчас они уже не те, в основном просто 24/7 хуярят по телефону и методично жертву обрабатывают словесно.
                    Ответить
      • Молодость это сколько? У сегодняшних пенсов молодость пришлась на совок.
        Ответить
    • Кстати, нам листовки прикольные приносят - будто бы от руки написанные. С именем, мобильным телефоном и "Не фирма!". Даже мне, близорукому, с трудом удается полиграфию разглядеть (разве что две листовки сравнить, что они идентичны, курьеры тоже не лохи и сразу по две суют).
      Оно, конечно, понятно, по науке маркетинговой - частному мастеру доверия больше, ну и типа ручная работа, индивидуальный подход. Но тут эффективные менеджеры перемудрили - ребят, что за компьютерный мастер, у которого самого принтера нет? Хотя, может, для ЦА оно и вправду работает.
      А еще видел - подобную рукопись аж на биллборд растянули. Это уже какая-то метаирония.
      Ответить
    • Ещё ебово, когда такие ребята фотку добавляют к рекламе. Не знаю, встречаются ли там реальные фотки мастеров, но видел кого-то из it-шной тусовки (Цукерберга?) и почему-то Камбербетча
      Ответить
      • https://www.ridus.ru/images/2017/9/11/642577/hd_8fb99f3787.png

        http://culturemeter.od.ua/wp-content/uploads/2017/12/2017-12-19_11-44-13.jpg


        https://m.seonews.ru/upload/medialibrary/7d0/7d0d053a7783b0426af1a7444230be64.png
        Ответить
        • Двух из трёх не знаю, к сожалению, я потенциальная жертва мошенников
          Ответить
        • > разработка сайтов
          Наверное забавно такое видеть в объявлении на двери подъезда.
          Ответить
          • Объявление, написанное от руки: разработка сайтов, частный веб-мастер (не фирма!) живу рядом
            Ответить
            • зачем мне мастер, который живет далеко, если мне нужен хороший пинг?
              Ответить
              • Если мне нужен пинг-понг, то я иду в спортинвую секцию
                Ответить
        • А если мастер не похож на фотографию, то это жулик, не пускаешь его. Очень удобно сделано.
          Ответить
    • Товарищи, у меня к вам вопрос, вы когда-нибудь вызывали мастера на дом?
      Ответить
    • Друзья, это очень важно!
      У нас в Groovy есть перегрузка метода в рантайме по типу переменной.
      Это как таблица виртуальных методов, но без ООП.

      Впорос: в каком языке еще так можно?

      def foo(String me) {
      	println "I am string $me"
      }
      
      def foo(int me) {
      	println "Me int $me"
      }
      
      
      foo(System.nanoTime() % 5 ? 'string' : 42)
      foo(System.nanoTime() % 5 ? 'string' : 42)
      foo(System.nanoTime() % 5 ? 'string' : 42)
      foo(System.nanoTime() % 5 ? 'string' : 42)
      Ответить
      • В любом говне с динамической тупизацией.
        Ответить
        • Нука, пруфани
          Ответить
          • def foo(me):
                if type(me) == str:
                    print("I am string ", me)
                elif type(me) == int:
                    print("Me int", me)
                else:
                    print("Me catch the ship, across the see")
            Ответить
            • Неужели ты не понял, что в моем примере метод выбирается сам, без всяких дуракцих "if type"?
              Ответить
              • Посмотрел, что можно выжать из «Фрипаскаля». У нас есть:
                1. Перегрузка функций, как в крестах.
                2. Type helpers (в других ЯП они называются экстеншон-методами), чтобы можно было писа́ть 42.foo. Хелперы можно использовать вместо перегрузки.
                3. Тип Variant (та самая запись с вариантным полем, с поддержкой проверки варианта в рантайме и с сахаром в компилтайме).

                Вроде всё есть, но когда скрещиваем Variant с перегрузкой или Variant с хелперами, ничего не получается. «Фрипаскаль» изо всех перегрузок выбирает одну (например, ту, которая для целого питуха), и остальные значения варианта пытается кастить в этот тип (и тогда он обламывается, когда нужно скастить строку). То есть диспетчеризация перегрузки работает только в компилтайме, а в рантайме не работает.

                В итоге приходится писа́ть точно такой же код, как у Антифриза отработанного:
                uses Variants;
                procedure foo(me: Variant);
                begin
                  case VarType(me) of
                    varDouble: WriteLn('I am floating cockerel ', me);
                    varShortInt: WriteLn('Je suis integer ', me);
                    varString: WriteLn('Soy string ', me);
                  else
                    Writeln('Kakoi bagor )))')
                  end
                end;
                 
                function Kukareku(what: Integer): Variant;
                begin
                    case what of
                    0: Kukareku := 42;
                    1: Kukareku := 3.14;
                    2: Kukareku := 'stroka';
                    end;
                end;
                 
                 
                begin
                    foo(Kukareku(0));
                    foo(Kukareku(1));
                    foo(Kukareku(2));
                 
                    foo(42);
                    foo(3.14);
                    foo('stroka')
                end.


                https://ideone.com/fGpTWM
                Ответить
              • Теперь кресты:
                #include <iostream>
                
                void foo(double me) {
                    std::cout << "I am floating cockerel " << me << std::endl;
                }
                
                void foo(int me) {
                    std::cout << "Je suis integer " << me << std::endl;
                }
                
                void foo(const char * me) {
                    std::cout << "Soy string " << me << std::endl;
                }
                
                template<int what> auto kukareku();
                
                template<> auto kukareku<0>() {return 42;}
                template<> auto kukareku<1>() {return 3.14;}
                template<> auto kukareku<2>() {return "stroka";}
                
                int main() {
                    foo(kukareku<0>());
                    foo(kukareku<1>());
                    foo(kukareku<2>());
                
                    foo(42);
                    foo(3.14);
                    foo("stroka");
                
                    return 0;
                }


                https://ideone.com/njyIVn

                Код работает только с константами. При попытке посчитать kukareku<x>() от переменной не компилируется.

                При попытке же написать одну функцию auto kukareku() со свитч-кейсом внутри обламывается, потому что все ветви свитч-кейса должны вернуть значение одного типа (auto выводится в конкретный тип один раз).
                Ответить
                • Попробовал std::variant:
                  typedef std::variant<int, double, const char *> myvariant;
                  
                  myvariant kukareku(int what) {
                      switch(what) {
                          case 0: return 42;
                          case 1: return 3.14;
                          case 2: return "stroka";
                      }
                  }


                  Красиво. Но не могу вызвать foo(kukareku(0)). Компилятор не хочет кастить std::variant в int, нужно вручную:
                  foo(std::get<int>(kukareku(0)));
                  foo(std::get<double>(kukareku(1)));
                  foo(std::get<const char *>(kukareku(2)));

                  То есть опять же принимать решение на этапе компиляции, а не в рантайме.
                  Ответить
                  • Можно с помощью метушни и какой-то матери сгенерить хуйню которая в рантайме зовёт функцию с нужным типом. Как std::visit, только без явного перечисления всех веток.
                    Ответить
                    • Спасибо за std::visit:
                      #include <iostream>
                      #include <variant>
                      
                      void foo(double me) {
                          std::cout << "I am floating cockerel " << me << std::endl;
                      }
                      
                      void foo(int me) {
                          std::cout << "Je suis integer " << me << std::endl;
                      }
                      
                      void foo(const char * me) {
                          std::cout << "Soy string " << me << std::endl;
                      }
                      
                      template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
                      template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
                      
                      using myvariant = std::variant<int, double, const char *>;
                      
                      int main() {
                          auto kukareku = [](int what) -> myvariant {
                            switch(what) {
                              case 0: return 42;
                              case 1: return 3.14;
                              case 2: return "stroka";
                            }
                          };
                      
                          auto cocock = overloaded {
                                  [](double me) { return foo(me); },
                                  [](int me) { return foo(me); },
                                  [](const char * me) { return foo(me); },
                          };
                      
                          int x = 0;
                          std::visit(cocock, kukareku(x));
                          x = 1;
                          std::visit(cocock, kukareku(x));
                          x = 2;
                          std::visit(cocock, kukareku(x));
                      
                          return 0;
                      }


                      Шаблон overloaded подсмотрел тут: https://en.cppreference.com/w/cpp/utility/variant/visit (требует C++17).

                      Всё работает с проверкой в рантайме, но мне не понравилась тавтология:
                      auto cocock = overloaded {
                                  [](double me) { return foo(me); },
                                  [](int me) { return foo(me); },
                                  [](const char * me) { return foo(me); },
                          };


                      А с помощью «метушни и какой-то матери» как будет выглядеть?
                      Ответить
                      • Фу, то ли дело "Цэ":
                        #include <stdio.h>
                        #include <stdlib.h>
                        
                        typedef enum {
                        	INT,
                        	STR,
                        } type;
                        
                        typedef struct {
                        	type type;
                        	union {
                        		char *s;
                        		int i;
                        	};
                        } variant_t;
                        
                        #define VARIANT(x) _Generic((x), \
                        	int: ((variant_t){.type = INT, .i = x}), \
                        	char*: ((variant_t){.type = STR, .s = x}) \
                        )
                        
                        void foo_int(int i)
                        {
                        	printf("Integer %d\n", i);
                        }
                        
                        void foo_str(char *s)
                        {
                        	printf("String \"%s\"\n", s);
                        }
                        
                        #define foo(x) (_Generic((x), \
                        	int: foo_int, \
                        	char*: foo_str \
                        )(x))
                        
                        void dynamic_foo(variant_t pitux)
                        {
                        	switch (pitux.type) {
                        		case INT: foo(pitux.i); break;
                        		case STR: foo(pitux.s); break;
                        		default: error("Error!"); break;
                        	}
                        }
                        
                        int main(void)
                        {
                        	for (int i = 0; i < 10; ++i) {
                        		dynamic_foo(rand() & 1 ? VARIANT(42): VARIANT("forty two"));
                        	}
                        	return 0;
                        }
                        https://ideone.com/fuFg1H
                        Ответить
                      • Да хуй знает... Первое что в голову приходит - взять список типов из варианта и раскрыть шаблон с оператором скобки, который зовёт нужную функцию, для каждого из них. Ну и породить от этих классов что-то одно и скормить в std::visit, как у тебя в примере с overload.
                        Ответить
              • Я за «Python».
                from functools import wraps
                from typing import get_type_hints
                from collections import defaultdict
                
                _funcs_table = defaultdict(dict)
                def overload(func):
                    arg_type = tuple(get_type_hints(func).values())[0]
                    _funcs_table[func.__name__][arg_type] = func
                    @wraps(func)
                    def wrapper(arg):
                        return _funcs_table[func.__name__][type(arg)](arg)
                    return wrapper
                
                @overload
                def f(x: int):
                    print(f'f(int): {x}')
                
                @overload
                def f(x: str):
                    print(f'f(str): {x}!')
                    
                @overload
                def f2(y: int):
                    print(f'f2(int): {y}')
                
                @overload
                def f2(y: float):
                    print(f'f2(float): {y}')
                
                f(42)
                f('Hello')
                f2(43)
                f2(43.0003)
                # f(int): 42
                # f(str): Hello!
                # f2(int): 43
                # f2(float): 43.0003

                https://ideone.com/1j7zi6

                Надо только расширить это говно на «*args, **kwargs» и резольвить по кортежу типов всех аргументов.
                Ответить
                • В общем могут только C#, Groovy и опытный шаблонизатор в C++.
                  Питон может, но с костылем.

                  Остальные хуй сосут
                  Ответить
                  • В общем-то так может любой язык с динамической типизацией, функциями первого порядка и интроспекцией. Но в Груви это весьма удобно сделано, да.
                    Ответить
                  • Раз это можно сделать в C++, то скорее всего это можно сделать и в D, но проверять у нас некому.

                    Вопрос в том: зачем, Холмс?! Если оставлять проверку чисто в рантайме, то это error-prone; если включать указанный @CompileStatic, то почему просто не заюзать генерики или interface/protocol oriented development?
                    Ответить
                  • И, кстати, в Obj C ты можешь сделать с точностью до наоборот: отправлять сообщения с конкретным именем всяким разным инстансам и надеяться, что не вылетит Unrecognized selector (или проверять на respondsToSelector). Но это ООП-way, так шо твоё условие сразу не соблюдено
                    Ответить
              • Один хуй результать тот же.
                Ответить
                • ну пиши тогда на qbasic
                  один хуй результат тот же
                  Ответить
      • Мультиметоды здорового человека?

        А что будет, если передать значение типа, для которого нет сигнатуры? Ошибка в рантайме или при копуляции или шо там в жабомире?
        Ответить
        • Будет ошибка в рантайме.
          foo(true)
          
          Caught: groovy.lang.MissingMethodException: No signature of method: prog.foo() is applicable for argument types: (Boolean) values: [true]
          Possible solutions: foo(int), foo(java.lang.String), run(), run(), any(), find()
          groovy.lang.MissingMethodException: No signature of method: prog.foo() is applicable for argument types: (Boolean) values: [true]
          Possible solutions: foo(int), foo(java.lang.String), run(), run(), any(), find()
          	at prog.run(prog.groovy:10)


          Но! можно сделать @CompileStatic, и тогда воще не скопулируетсмя

          cript1.groovy: 15: [Static type checking] - Cannot find matching method Script1#foo(boolean). Please check if the declared type is correct and if the method exists.
           @ line 15, column 1.
             foo(true)
             ^
          Ответить
          • Если с ошибкой в рантайме, то в том же Шарпе можно через dynamic: сделать одну публичную функцию, которая принимает динамик, и n приватных функций, которые принимают параметры нужных типов. Внутрь публичной поместить вызов приватных (он будет один благодаря перегрузке), работать должно точно так же
            Ответить
            • Действительно, ты прав
              public static void Main(string[] args)
                      {
                          Bar("as");
                      }
              
                      private static void Bar(dynamic foo)
                      {
                          Foo(foo);
                      }
              
                      private static void Foo(Int32 foo)
                      {
                          Console.WriteLine("I am number " + foo);
                      }
              
                      private static void Foo(string foo)
                      {
                          Console.WriteLine("I am string " + foo);
                      }

              Правда, мне пришлось добавить референс на Microsoft.CSharp.
              Это потому, что dynamic специфичен для шарпа?

              Выходит, что этакий куртштюн позволителен только в том случае, когда язык умеет И динамический И статический диспатч как груви и C#.

              Java, Kotlin, Perl, Python, Lua и Ruby так НЕ могут.
              Ответить
              • Насчёт референса не скажу.

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

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