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

    +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
    // Задача: Рисовать в консоли прогресс бар, на сколько дней текущий год завершился
    
    static void ProgressBarOfElapsedDays(DateTime dateTime, bool isRefreshebleat = false)   // рефрешеБЛЕАТ! :))
    {
        int daysOfYear = DateTime.IsLeapYear(dateTime.Year) ? 366 : 365;
        int dayInProcents = daysOfYear * 100 / 100;     // WAT?
        int currentDay = dateTime.DayOfYear * 100;
        int daysOfYearNotElapsed = daysOfYear * 100 - currentDay;  // Сложный матан
        int procent = 100 - (daysOfYear * 100 - currentDay) / dayInProcents; 
        int buffer = 0;
    
        if (isRefreshebleat)
        {
            if (Console.CursorTop >= 1 || Console.CursorLeft >= 1)
            {
                Console.SetCursorPosition(Console.CursorLeft - Console.CursorLeft, Console.CursorTop - Console.CursorTop); // когда Console.SetCursorPosition(0, 0) недостаточно
            }
        }
    
        // остальной код
    }

    isRefreshebleat и всё остальное :))

    Запостил: adoconnection, 06 Марта 2020

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

    • Кстати, хотелось бы узнать бизнес-задачу программы, которая несколько дней висит в консоли, и показывает
      Ответить
      • обучающее задание, на этот раз реализация превзошла все ожидания
        Ответить
      • Прокрастинация. Сутками смотреть в сосноль и ждать нового года...
        Ответить
        • Скажи, почему ты
          Медлишь исполнить план,
          Считая минуты,
          Смотришь в пустой экран?
          Ответить
      • >бизнес-задачу программы, которая несколько дней висит в консоли, и показывает
        watch -n1 sensors
        watch -n1 cpufreq-info
        Ответить
    • int daysOfYearNotElapsed = daysOfYear * 100 - currentDay;  // Сложный матан


      Всё правильно, настоящие программисты математику не изучают.
      Ответить
      • printf '[' && head -c $(echo "$(date +%j)*$(tput cols)/366"|bc) < /dev/zero | tr '\0' '#' && echo ']'
        запускать под рутом!
        Ответить
        • на винде не сработает (кроме как через wsl): виндовая консоль не умеет в esc, и следовательно в tputs, да и termcap/terminfo там немаэ

          Именно поому там Console.SetCursorPosition

          зы: очень забавный способ брать питушню: высасывать нули из черной ямы, и менять из на решоточки
          брав0!
          Ответить
          • В «mingw» есть tput. Заметь, без «cygwin» и позиксового слоя.
            Ответить
            • да? и какой же он, извините, терминал эмулирует?
              Ответить
              • >> tput -V

                ncurses 6.1.20180908

                >> tput cols

                124

                >> tput longname

                ANSI emulation for Cygwin

                *****

                ncurces скомпилированы с заглушкой. В каком-то из говнокодов мы эту заглушку обсуждали.
                Ответить
              • Нашёл:

                https://govnokod.ru/25899

                Там мы обсуждали заглушки в «ncurses» и в «PDcurses».
                Ответить
          • >на винде не сработает (кроме как через wsl): виндовая консоль не умеет в esc, и следовательно в tputs, да и termcap/terminfo там немаэ

            Ага, я уже понял. В ideone ошибка:
            tput: No value for $TERM and no -T specified

            Починил:
            printf '[' && head -c $(echo "$(date +%j)*${COLUMNS:-80}/366"|bc) < /dev/zero | tr '\0' '#' && echo ']'
            https://ideone.com/trmyH8
            Ответить
            • слушай, ну это одноразовая питушня
              а задача была в том, чтобы она висела, и каждый день увеличивалась на одну решоточку
              Ответить
              • >задача была в том, чтобы она висела, и каждый день увеличивалась
                Так выше по треду уже сказано про watch -n1
                http://govnokod.ru/26468#comment531657
                #оптимизация
                watch -n10000
                Ответить
              • Для iCкильных макак и виндухов, без команды watch.
                while :; do clear; printf '[' && head -c $(echo "$(date +%j)*${COLUMNS:-80}/366"|bc) < /dev/zero | tr '\0' '#' && echo ']'; sleep 10000; done
                Ответить
                • Переведи на поверщель.
                  Ответить
                  • Я когда писал поймал классический багор от баша
                    # echo "$(date +%j)*
                    > 066
                    
                    # echo $(( 100 * $(date +%j) ))
                    > 5400
                    
                    # echo "066*100" | bc 
                    > 6600

                    Именно поэтому я за «bc».
                    Ответить
                    • Какая восьмеричная система счисления )))
                      Ответить
                      • Да эта срань везде.
                        Особенно страдают сишка и её блядские потомки.
                        https://govnokod.ru/26357#comment521663
                        Ответить
                        • Именно поэтому я за «Python».
                          >>> x = 016
                            File "<stdin>", line 1
                              x = 016
                                    ^
                          SyntaxError: invalid token
                          Ответить
                          • Именно поэтому я за Бейсик, Паскаль, Фортран, Кобол и Аду.
                            Dim n As Integer=016
                            System.Console.WriteLine(n)

                            https://ideone.com/OJdZwp
                            https://ideone.com/315KHG
                            Ответить
                            • Именно поэтому я за verilog:
                              $display("%d", 016);  // 16
                              $display("%d", 'o16); // 14
                              Ответить
                              • Я и забыл что в VBNET завезли няшный вывод типов.
                                Dim n = 010
                                WriteLine(n) '10
                                WriteLine(&H10) '16
                                WriteLine(&O10) '8

                                https://ideone.com/uYsRBz
                                Ответить
                                • Это ещё и в «Кубасике» было. Только я не уверен насчёт восьмеричной.
                                  Ответить
                                  • >Это ещё и в «Кубасике» было

                                    Такого не было. И автовывода не было.
                                    >Dim n = 010
                                    Ответить
                                    • Почему вообще dim стал юзаться для объявления переменных? Раньше он же только массивы описывал?
                                      Ответить
                                      • Да, DIM означал дименшн
                                        переменную 40 лет назад объвляли через let
                                        Ответить
                                        • >переменную 40 лет назад объвляли через let
                                          Меня этот LET долго смущал.
                                          В мануале он был описан.
                                          Но никакой разницы между
                                          10: A=10
                                          11: LET A=10

                                          не было.
                                          Кроме того что LET занимал пару драгоценных байт.
                                          Я долго не мог понять нахера он нужен.

                                          Более загадочные комманды только PEEK и POKE, которые писали в порты.
                                          И ещё какая-то, третья.
                                          Я так тогда и не понял какой профит из них можно получить.
                                          Ответить
                                          • Двоеточие, кстати, не нужно. В данном контексте оно создаст пустой оператор. Это же лишние байты!
                                            Ответить
                                            • >Это же лишние байты!
                                              Это чисто для красоты. Оно их само как-то вставляло.
                                              Когда в машине всего 16Кб памяти, то начнёшь экономить.

                                              Я очень любил пару трюков, можно было экономить в IF не писать THEN или GOTO.
                                              IF A=1 THEN 320
                                              IF A=1 GOTO 320


                                              И второй трюк: длинные строки, разделенные двоеточием.
                                              IF LEN(K$)>0 THEN K$=MID$(...):X=LEN(K):...

                                              Тогда End if не нужен. И заодно метки экономились.
                                              Ответить
                                          • да, чем LET лучше, чем его отсутствие, я не знаю. Скопа же он не задавал.

                                            А в VB еще появился Set
                                            https://www.promotic.eu/en/pmdoc/ScriptLangs/VBScript/Statmn/Set.htm

                                            хуй знает, зачем еще одно слово
                                            Ответить
                                            • Set был нужен для ссылок на объекты.

                                              В VB были зайчатки ООП, вот там он использовался.

                                              Я точно не помню, но VB5 завезли какие-то убогие классы, и там зачем-то рекомендовали Set.
                                              Ответить
                                              • Так а что именно он делал? Создавал референс на объект? почему нельзя было оставить тоже ключ слово? Зачем set, когда есть let?

                                                >зайчатки
                                                Да вообще при наличии ActiveX очень даже использовался ООП. У vbs особенно
                                                Ответить
                                                • Не помню.
                                                  Вроде он ссылку на объект устанавливал.

                                                  Типа ByRef и ByVal. Ещё AddressOf был.

                                                  Ну типа крестовых &
                                                  Ответить
                                                • >зайчатки
                                                  >Да вообще при наличии ActiveX очень даже использовался ООП. У vbs особенно

                                                  Там оно было какое-то странное.
                                                  Не было основной фичи ООП: полиморфизма.

                                                  И самое нехорошее, что при использовании сабклассинга, остановка программы через кнопку Stop с квадратиком выкидывала весь процесс IDE с ошибкой.
                                                  Ответить
                                                  • Я имел ввиду, что добрая половина API винды была COM или WMI (дергать Win32API можно было из VB, но сложно*), а они представлены были объектами. Так что использовать чужие классы надо было часто, а свои писать -- нет.

                                                    Ну, будем честны: скриптушня (а VB суть та же скриптушня) именно для того и нужна: чтобы дергать написанные на С++ и С компоненты, а не чтобы писать свои сложные прикладухи


                                                    *
                                                    http://shop.oreilly.com/product/9781565926318.do

                                                    какая абизяна :)))
                                                    Ответить
                                                    • >именно для того и нужна: чтобы дергать написанные на С++ и С компоненты, а не чтобы писать свои сложные прикладухи

                                                      Да. Поскольку в VC нельзя было просто формошлёпать интерфейсы мышкой.
                                                      Ну не на MFC же писать. Хотя кажется VB чуток раньше появился, точно не помню.

                                                      >а VB суть та же скриптушня
                                                      Так вообще все пред.NET бейсики — скриптушня.
                                                      Я считаю их предтечей js.
                                                      Ответить
                                                      • MFC уже был в шестерке (и кажется даже в пятерке), но С++ от этого не превращался в простой язык: конечно ен надо было напрямую работать с WndProc, но все равно надо было писать много кода, думать про память, можно было лажануться, и упасть итд.

                                                        А в VB и скриптах под wsh (vbs и js) ты мог подключиться к контроллеру домена, дернуть оттуда пользователей, подключиться к базе (ADO или DAO), дернуть оттуда данные, создать объект экселя, выгрузить всё туда, и все это в 20 строчек прямо в обработчике нажатия OnClick и вообще не думать про память, например.

                                                        Самое главное -- ты мог вообще не быть программистом: на VB писали и админы, и DBA, а макросы на VBA умели некоторые бухгалтеры

                                                        Эти языки выполняли в винде конца 90х ту же роль, что шелл и перл выполняли тогда в unix.
                                                        Ответить
                                                        • Ты заебал, VBScript и задумывался как поверьюзерский и сисадминский язычок, и юзался он (вот неожиданность!) по прямому назначению.
                                                          См. ниже для чего он.
                                                          Ответить
                                                    • Не объеткы, а интерфейсы. WMI так вообще IDispatch
                                                      Ответить
                                      • >Раньше он же только массивы описывал?
                                        Вроде нет. Просто раньше никто не парился объявлением переменных.
                                        Сразу тупо присваивали значения как в фортране или js.
                                        У меня мануал где-то валяется по старому бейсику могу глянуть.

                                        Dim x
                                        В QB завезли типизацию, которой до этого не было.
                                        Dim x as Byte

                                        Странно что в VB.NET они LET похерили. Точнее приспособили его для какого-то LINQ.
                                        Ответить
                                        • https://www.vtechkids.com/assets/data/products/%7BC7125424-EE27-4B65-B62A-F8A6EE38DB46%7D/manuals/PreComputer_PowerPad_Course.PDF


                                          см страницы 20 и 32
                                          Ответить
                                          • У меня похожий мануал в бумажном виде есть.
                                            Похоже я ошибся: DIM X ввели уже в QB.
                                            Сугубо ради унификации.
                                            Ответить
                                      • Типа обобщили DIM до скаляров, например.

                                        ПИК и ПУК это же доступ к памяти, блеять!
                                        Ответить
                                    • Точно, объявления и инициализации в одну строку не было.

                                      В «Кубейсике» было три способа указания типа переменной:

                                      1. Суффиксом. $ для строк и % для целых поддерживались и другими бейсиками. «Кубейсик» добавил & для длинных целых, # для плавпитуха двойной точности и ! для плавпитуха одинарной точности.

                                      2. Первой буквой, как в «Фортране». Директива DEFINT I-N означала, что переменные, начинающиеся с букв I, J, K, L, M, N, будут целыми.

                                      3. DIM x AS INTEGER. Оператор DIM, изначально предназначенный для массивов, расширили.

                                      Инициализации при объявлении не было, было отдельное присвоение.
                                      Ответить
                              • https://ideone.com/tNa7ow
                                let s=0010;
                                println!("{}", s);
                                println!("{}", 0o10);
                                println!("{}", 0b10);
                                println!("{}", 0x10);


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

                                Может Царь зря его так сильно обсирал.
                                Ответить
                                • Блеать, и это язык сделанный С НУЛЯ в 2к10. Goвно какое-то.
                                  package main
                                  import "fmt"
                                  
                                  func main(){
                                  	fmt.Printf("%d\n",010)   //8
                                  	fmt.Printf("%d\n",0x10) //16
                                  	fmt.Printf("%d\n",10)     //10
                                  }


                                  Меня порадовала Скала
                                  Main.scala:2: error: Decimal integer literals may not have a leading zero. (Octal syntax is obsolete.)
                                  System.out.println(010);
                                  ^


                                  А котлин высрал портянку какой-то мутной чухни. Но тоже не скомпилировал.
                                  Ответить
                                  • Unsupported [literal prefixes and suffixes]
                                    сказал мне котлин

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

                                      В «Википедии» есть экзотические реальные примеры, не относящиеся к компьютерам, но в экзотических случаях и троичная система бывает, и 12-ричная, и 60-ричная...
                                      Ответить
                                    • Ассемблер PDP.
                                      Ответить
                                • Царь работает на публику. Его задача — развлекать.

                                  Он сначала обсирал кресты, теперь стал крестоблядью.
                                  Ответить
                                  • Плюсанул.

                                    > зря его так сильно обсирал

                                    Однако у Питуха есть объективные недостатки:
                                    1. иногда он сильно раздражает нежеланием компилировать
                                    2. недоразвитая инфраструктура
                                    3. туповатый компилятор (следствие п.2)
                                    Ответить
                                  • На самом деле, я уже джва года знаю почему он его обсирает.

                                    И сейчас раскрою вам страшную тайну, почему Царь так не любит Питуха.

                                    This is probably the main showstopper for implementing complex video codecs in Rust effectively.

                                    Rust is anti-FORTRAN in a sense that FORTRAN was all about arrays and could operate arrays safely while Rust safely prevents you from operating arrays.


                                    And that’s why C is still the best language for systems programming—it still lets you to do what you mean (the problem is that most programmers don’t really know what they mean) without many magical incantations. Sure, it’s very good to have many common errors eliminated by design but when you can’t do basic things in a simple way then what it is good for?

                                    Статья хорошо описывает Питушачьи плюсы и минусы.
                                    https://codecs.multimedia.cx/2017/07/rust-not-so-great-for-codec-implementing/
                                    Ответить
                            • Да, указывать восьмиричность системы посредством нуля -- так себе идея. Да и хексы начинать с 0x тоже не очень.

                              Куда лучше сделано в паскале: там это $.
                              В первую очередь конечно это полезно для анекдота:

                              --Чебуршка, нам Шапокляк дала $10: каждому по 8
                              --Чото блядь не делится.
                              --Меняе не волнует, я свои 8 уже потратил
                              Ответить
                              • Больше всего мне нравится как сделали в форте: там основание системы счисления для преобразования числов туды-обратно хранится в глобальной пельменной, просто пишешь <нумбер> BASE ! и течёшь.

                                Правда мне не нравится, что нельзя кроссплатформенно отключить парсинг числе вообще, хочешь, например, DSL накалякать, где тебе числа не нужны, вроде бы можно было бы просто без проблем поставить в порядок поиска один словарик и евальнуть строку и течь, но дефолтный интерпретер будет хавать незнакомые слова, если сможет распознать в них число, и всё-таки для боротьбы с этим придётся писать свой интерпретер. Хотя системы часто дают как-то обработать случай, когда слово не найдено в словаре, перед попытакой переобразовать его в число, но у всех это по разному делается.

                                Кстати, в стондарте Forth 2012 добавили префиксы для систем счисления, для хексов как в поцкале $.
                                Ответить
                    • Какой багор )))
                      Ответить
    • https://youtu.be/mqgJ0BDHBCY
      Ответить
    • Почему жабы не могут в тайпконвершен конструкторы, а плюсы могут?

      class UserId {
      	public:
      	UserId(const int id) {
      	}
      };
      
      void doAll(const UserId& userId) {
      }
      
      int main() {
      	doAll(12);// в жабе было бы new UserId(12)
      	return 0;
      }
      Ответить

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