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

    −13

    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
    private void ScanDir()
    {
    	CurrentLevel++;
    	string save_dir=CurrentDir;
    	int i=0;
    	if (current_dirs.Length>0)
    		for (;i<current_dirs.Length;i++)
    		{
    			out_data+=current_tabs+"<DIR> "+CutPathName(current_dirs[i])+"\r\n";
    			try { CurrentDir=current_dirs[i]; }
    			catch
    			{
    				out_data+=current_tabs+"<ошибка доступа>\r\n\r\n";
    				CurrentDir=save_dir;
    				continue;
    			}
    			waiting=true; // синхронизатор этого потока
    			Thread.Sleep(120); // задержка, что бы второй поток успел скинуть данные
    			while (saving) // ожидание флага из потока записи
    				Thread.Sleep(100);
    			waiting=false;
    			ScanDir();
    			CurrentDir=save_dir;
    		}
    	else
    		out_data+=current_tabs+"<папки отсутствуют>\r\n";
    	save_dir=null;
    	string[] inner_files;
    	try { inner_files=Directory.GetFiles(save_dir); }
    	catch { out_data+=current_tabs+"<ошибка доступа>\r\n\r\n"; return; }
    	if (inner_files.Length>0)
    		for (i=0;i<inner_files.Length;i++)
    		{
    			out_data+=current_tabs+CutPathName(inner_files[i])+"\r\n";
    			inner_files[i]=null;
    		}
    	else
    		out_data+=current_tabs+"<файлы отсутствуют>\r\n";
    	inner_files=null;
    	CurrentLevel--;
    }

    Загрузка списка файлов и директорий на диске.
    Оптимизировано для уменьшения потребления памяти и нагрузки CPU.

    От одного только описания оптимизации хочется убежать и спрятаться под одеяло:

    "Для оптимизации я добавил в глобалку следующую инфу:
    1) массив текущих папок;
    2) текущий уровень вложения;
    3) текущую папку для глобалки;
    4) строка табуляции;
    5) свойства для п. 2 и 3.

    2 для того, что бы в его свойстве (5) менять табулятор (4) по необходимости;
    3 добавлено исключительно для свойства (5), в котором подгуржаются текущие папки (1)."

    Запостил: FrontlineReporter, 27 Февраля 2017

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

    • @Thread.Sleep(120);

      Дальше и смотреть не стал. Въебал плюсъ.
      Ответить
    • >>\r\n

      Бесплатные Environment.NewLine; закончились?
      Ответить
      • Оптимизации же! Присваивания null локальным переменным тоже для этого.
        Ответить
        • судя по уебищному неймингу пациент с скриптового языка сбежал. Я прав?

          Ох, тут два типа нейминга...
          Ответить
          • Не, с С++.
            Ответить
            • Стреляй ему в жопу, голова явно пуста

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

          env[enter].nl[enter]?
          Ответить
          • 1. нужен решарпер
            2. проблема километровой длины не решена
            3. проблема конкатенации не решена
            Ответить
            • 1. а что, кто-то нынче на шарпах без решарпера пишет?
              2. Проблема имени Тараса. Надуманная имхо
              3. Ну ок, будем хардкодить /r/n во все строки, главное ведь избавиться от ненавистной конкатенации.
              Ответить
              • \r\n гарантированно переведет строку на любой платформе. Проблемы не вижу
                Ответить
                • перевод строки? часто файлы на консоль выводишь?

                  у мусо-досников больше проблем с тем что часто у последней строки нет \n. потому что многие виндозники интерпретируют текстовый файл как список строк с \n разделителем. но не все. почему и грабли. в одном редакторе в файле Н строк - в другом Н+1. одна тулза съела файл - друга споткнулась.

                  по крайней мене на юнихах определение сидит в позикс и разброда и шатания нету: текстовый файл это список строк, каждая из которых заканчивается \n.

                  а на виндах... я месяц назад из некро-тулчейна ворнинги видел, типа: "у последей строки нет терминатора! я это умею обрабатывать, но дайте я вам в логи все равно посру!!" как если бы назад 20 лет в прошлое вернулся...
                  Ответить
                  • Многие мусодосные/виндозные проги одиночный \n вообще за перевод строки не считают. За перевод строки они считают именно комбинацию \r\n (именно так, а не наоборот).

                    А что касается финального \r\n, то всё так: одни проги считают \r\n окончанием строки, другие — разделителем строк. Это примерно как финальная запятая в инициализации массива, которая в одних ЯП создаёт лишний пустой элемент, в других ЯП игнорируется.

                    gcc из mingw действительно до сих пор срёт ворнингом, если у последней строки нет терминатора, но... всё нормально компилирует и без него.
                    Ответить
                    • на гцц не видел - а вот какие-то тулзы из vs2008 радостно кричали.

                      с последним \n, на прошлых проектах это была медленная неспешная cold war. придут юниксоиды - в файлы последний \n вставят. след релиз делают жабщики - и ихняя эклипсня на последний \n "жалуется" как на пустую строку - удаляют. самое смешное было что в паре файлов в конце стоял умилительный коммент: "последнюю пустую строку не удалять!!"

                      это все всплыло когда в геррит в авто-ревьювер вставили эти проверки для текстовых файлов. жабщики сразу вонь подняли: гиги бойлер-плейта в ихнем свинге - это у них всегда пожалуйста, а вот "лишние" концы сторок в паре текстовых файлов... - "но пассаран"!
                      Ответить
                • Многие *никсовые проги считают \r обычным символом, входящим в строку, и ругаются на ошибку в синтаксисе, если это какой-то скрипт.
                  Ответить
              • Надо просто в printf (ну т.е. string.Format) добавить модификатор, который раскрывается в Environment.NewLine, какой-нибудь "%L". Мне даже кажется, я где-то что-то похожее видел, но не помню, где.
                Ответить
                • Все же лучше сделать эскейп для таких переводов, чтобы можно было везде использовать
                  Например, \cykablyad
                  Ответить
                • я уже пару раз (буквально: два раза) делал обертки для ostream/streambuf в С++ которая конвертила "\n" (и начало строки) в то что было нужно. уверен что даже в вашем шарпе подобное делается.

                  я к тому что плодить костылей не надо - оно уже давно в большинстве систем спокойно стандартный "\n" работает.

                  даже на виндах - как долго штатный нотепад не используешь (и им уже давно никто не пользуется) ниразу не заметишь что у тебя файл с юникс концами строк.
                  Ответить
                  • В текстовых редакторах \n работает. Во многих ЯП работает. А вот bat-файл и прочая виндопитушня требует \r\n, иначе считает, что это однострочник, и обламывается.
                    Ответить
                    • я уверен что VB/VBA тоже обломится. но этим говном нормальные люди все равно не пользются. а те у кого уже некрософто-опухоль-мозга появилась - они живут в своем мрачном мирке и ничего другого и не знают.
                      Ответить
                      • Тут вот что интересно:
                        1. Компиляторам божественной сишечки наплевать на представление концов строк: хоть \n, хоть \r\n работает в любой операционной системе. И многие другие компиляторы терпимо относятся к нестандартным разделителям.

                        2. Скриптовые языки (bash в никсах, bat в мусодосах/виндовозах) требуют определённого разделителя: в никсах только \n (если где-то встретится \r\n, то интерпретатор ругается на незнакомый ему символ \r), в виндовозах только \r\n (если где-то встретится одиночный \n, то он за разделитель строки посчитан не будет).

                        Заметим, что по отношению к операционным системам всё симметрично, но по отношению к ЯП неоднообразно.

                        Это ещё хорошо, что классическая Макось (которая без буквы Х в названии) ушла в анналы истории, потому что в ней разделителем строк был \r.
                        Ответить
                        • >И многие другие компиляторы нетерпимо относятся к стандартным разделителям.
                          Потому что языки в жопе.
                          Ответить
                        • Забавно, ведь \r в баше должен бы вернуть курсор в начало строки.
                          Ответить
                        • > Это ещё хорошо, что классическая Макось (которая без буквы Х в названии) ушла в анналы истории, потому что в ней разделителем строк был \r.

                          последний раз когда трогал - NeXT гуи (Cocoa) во времена 10.3-10.5 - все также послушно использовали разделитель \r.

                          а когда начинается BSD - то там \n.

                          но даже и гуи файло/этц с \n читает правильно.

                          > в никсах только \n (если где-то встретится \r\n, то интерпретатор ругается на незнакомый ему символ \r)

                          да, это я как то и подзабыл. isblank('\r') != true; почему шелл и попытается \r как команду выполнить, потому что \r валидный символ имени файла.
                          Ответить
                          • кокоа это не только gui, это практически stdlib для обжси

                            Foundation это тоже часть кокоа, и кто скажет что NSObject или NSString это GUI тот пусть бросит в меня яблоко.
                            Ответить
                            • в старые времена это было CoreFoundation (== stdlib for ObjC) и поверху него Cocoa (CF* классы vs NS* классы (NS == NeXT Step)). CoreFoundation она гуи-лессе в духе, но ОС сама по себе гуи-сентрик поэтому (как и на виндах) различия делать смысла мало.
                              Ответить
                              • И всё таки я буквоёб.

                                Гуй это AppKit (или UIKit в случае яблофонов)

                                >Cocoa Umbrella Framework
                                > Foundation (Foundation.framework). The classes of the Foundation framework (which resides in the Core Services layer) implement data management, file access, process notification, network communication, and other low-level features.

                                Foundation and Core Foundation provide basic data types and data management features, including the following:

                                Collections

                                https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/OSX_Technology_Overview/CocoaApplicationLayer/CocoaApplicationLayer.html
                                Ответить
                      • даже в микрософте уже никто не пользуется ВБ
                        Ответить
                        • А как же макросы для экселей-вордов?
                          Ответить
        • То ли дело PHP_EOL!
          Ответить
    • > waiting=true; // синхронизатор этого потока
      >Thread.Sleep(120); // задержка, что бы второй поток успел скинуть данные
      > while (saving) // ожидание флага из потока записи
      > Thread.Sleep(100);
      > waiting=false;

      Лул, прямо-таки последнее слово синхронизации потоков, Brian Goetz лопнул от зависти, наблюдая такой анскилл многопоточного программирования.
      Ответить
      • пацан просто на коленке монитор изобрел. а ты ему завидуешь!
        Ответить
        • > пацан просто на коленке монитор изобрел

          Жидкокристаллический?
          Ответить
          • похоже, что ЭЛТ
            Ответить
            • @пацан просто монитор изобрел
              @@на коленке
              Увидел блики экрана в растекающейся жидкости? Тоже мне - открытие...
              Роман Кащицын пытался намекать.
              Ответить
      • -120
        +N = AskUser("Примерно оцените мощность вашего компьютера по шкале от 0 до 1")
        +120*N
        Ответить
    • улучшил использование CPU для работы в быкграунде. маштабируется линейно по количеству процессоров и каталогов, и гарантировано 0% CPU нагрузки.
      private void ScanDir()
      {
          Thread.Sleep(INFINITY);
      }

      в добавок, прозрачная авто-коррекция всех возможных ошибок!

      бонус: очень экономичный расход памяти!!!
      Ответить
      • Чтобы сделать из диска random access memory, достаточно после чтения каждого байта делать слип в 1 секунду.
        Ответить
        • Нет, нужно спать произвольное число секунд. Random же.
          Ответить
          • он рендом не потому
            он рендом потому что можно не последовательно читать

            и что, без слипа с диска нельзя читать не последовательно?
            Ответить
            • ну конечно нельзя потому что переход голов на другой круг занимает время
              Ответить
            • [/color=green]
              Ответить
        • С диска нельзя прочитать байт. Минимальная единица, которую можно прочитать, это сектор.

          Тем не менее, на высоком уровне создаётся ощущение, что "прочитать байт" можно: ОС читает сектор и складывает его в кэш, из которого потом можно достать следующие байты.

          В общем, необходимая задержка зависит от устройства кэша.
          Ответить
          • из DRAM тоже нельзя прочитать байт: читать можно только шириной чипа (который может быть меньше байта, лол!). Но благодаря кешу мы про это ничего не знаем.

            Просто у диска пенальти больше. Потому все ФС старались выравнивать по границе блока (который был 512 байт до недавнего времени везде)
            Ответить
            • Борманд, ты? Ты же умер.
              Ответить
              • Ну почему не инкаус, например?

                Он тоже любит попиздеть про всякую низкоуровневую хуиту.
                Остальные тут или математики (как Рома) или джаваскриптеры, простихосподи
                Ответить
                • 1024, залогинься.
                  Ответить
                • > математики (как Рома)

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

                    ты тоже годный
                    Ответить
                • > или математики
                  В интервью на ютубчике, емнип, Роман говорил, что математика программисту не нужна.
                  Ответить
                  • > говорил, что математика программисту не нужна

                    Пошёл на ютубчик, пересмотрел. Вы всё врёти. Я сказал, что многие известные программисты шмогли без математики. Кому-то она нужна, кому-то не особо. Мне например, в последнее время, всё больше и больше нужна статистика и тервер.
                    Ответить
                    • расскажи зачем
                      Ответить
                      • > зачем

                        Контроль качества данных. Есть массив данных (~10^9), надо оценить, насколько хороши или плохи различные его срезы. Многие вещи можно проверить только глазами людей, и хочется максимально эффективно использовать человеческий труд, результаты которого, в частности, потом используются для обучения машин.

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

                          это тебе не плагины к вордпрессу писать
                          Ответить
                • Про низкоуровневую хуиту любит писать Dummy-с-цифрами, ещё чувак с сумматором на аве иногда про железо пишет.
                  Ответить
                • А кто у вас ту самый продвинутый по CIL?
                  Ответить
                  • MSIL всмысле?

                    Кегги у нас вроде самый активный дотнетчик.
                    Ответить
                    • Кто это?
                      Ответить
                      • Ты.
                        Ответить
                        • Тут так принято?

                          Постоянно новеньких как но называть?

                          А почему я не Борланд?
                          Ответить
                          • Когда Кегданы вырастают, они становятся взрослыми бородатыми Бормандами
                            Ответить
                            • как в покемонах?)
                              Ответить
                            • нет
                              кегги и борманд разные

                              вот ты вырастишь в борманда, это точно
                              Ответить
                              • огласите весь список, пожалуйста. Со статами
                                Ответить
                                • Так, ты J знаешь?
                                  Ответить
                                  • Кроме кегги никто не знает J, так что если она скажет что знает, значит это кегдан пол поменял
                                    Ответить
                                  • Знаю. Это буква Джей
                                    Ответить
                                  • Так, хули тут проиходит? Кто эта шмара?

                                    Сдохнуть блядь не дадут, J им подавай.
                                    Ответить
                                    • С виду няша вроде...
                                      Ответить
                                      • я зол

                                        Кегги не дотнетчик. Кегги - фулстек
                                        Ответить
                                        • что, и flexbox умеешь? И view ports знаешь что такое?
                                          Ответить
                                          • cleaned
                                            Ответить
                                          • флексбоксы - это всего-лишь пародия на wpf layout, че в них может быть такого сложного
                                            Ответить
                                            • > че в них может быть такого сложного
                                              Я тоже так думал, пока один свой pet-проект в Safari не открыл.
                                              Ответить
                                          • >> что, и flexbox умеешь?

                                            Некорректный вопрос. Я с ним тупо не встречался. Bootstrap юзал.

                                            >> И view ports знаешь что такое?

                                            Видимые полигоны на конкретном фрейме? По работе не использовал
                                            Ответить
                                            • >>Видимые полигоны на конкретном фрейме?
                                              Признайся, ты просто загуглил фразу и процитировал вики

                                              Я про https://www.w3schools.com/css/css_rwd_viewport.asp
                                              Ответить
                                              • Поступил бы ты в университете, там копмграф преподают
                                                Ответить
                                    • Ты.
                                      Ответить
                                    • И это ваш лучший дотнетчик? Хам какой-то
                                      Ответить
                                  • Не надо портить человеку психику
                                    Ответить
                                • Я вот тут небольшой список составил
                                  https://github.com/roman-kashitsyn
                                  https://github.com/zawodskoj
                                  https://github.com/bormand
                                  https://github.com/1024--
                                  https://github.com/k32
                                  https://github.com/j123123
                                  https://github.com/NodnolStudio
                                  https://github.com/Abbath
                                  но наверно не полный
                                  давайте палите гитхабы свои
                                  Ответить
                                  • Там ничего интересного
                                    Ответить
                                  • Дополнение:
                                    https://github.com/Kegdan
                                    https://github.com/lure0xaos
                                    Ответить
                                    • <a href= http://data-recovery-software.bid/ >recover data from external hard drive</a> prednisone with no rx
                                      Ответить
                                    • > https://github.com/Kegdan/haskell

                                      > Huffman.hs - Кодирование тескт с помощью арголитма Хаффмана

                                      Вот так и складывается впечатление, что хачкелисты -- неграмотные школьники.
                                      Ответить
                                      • Да, вот Simon Peyton Jones даже таблицы умножения не знает, о чем тут можно говорить?
                                        https://books.google.com/books?id=nneBa6-mWfgC&pg=PA282&lpg=PA282&dq=I+never+learned+my+multiplication+tables.+Simon+Peyton+Jones&source=bl&ots=gFzxHaOQ3B&sig=PgE3p5t-qgJV9dNa0_ZTXqpRG7E&hl=ru&sa=X&redir_esc=y#v=onepage&q=I%20never%20learned%20my%20multiplication%20tables.%20Simon%20Peyton%20Jones&f=false
                                        Ответить
                                        • Потому роман и говорил что математика не нужна.
                                          Ответить
                                          • > Потому роман и говорил что математика не нужна.


                                            Ты действительно считаешь, что я имел в виду SPJ? Лол, уж он-то знает математику получше нас всех. Я читал многие его статьи (особенно мне доставила статья про алгебру финансовых контрактов, на этих результатах целая индустрия сейчас построена) и смотрел записи его докладов. Умеет, могёт.

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

                                              Ты правда думаешь что я не знаю кто такой SPJ, и считаю что чувак который пилит реализацию хаскеля не может в математику?
                                              Ответить
                                              • Чувак, который пилит реализацию хаскеля, должен хорошо знать свою работу. Он должен уметь хорошо класть керпич на кирпичь. Он должен знать устройство линий кэша, работу конвейера и предиктора команд, чтобы получить пирфоманс. А про математику кукарекают те, кто за свою жизнь не написали ни одной программы.
                                                Ответить
                                                • 1024, перелогинься)
                                                  Ответить
                                                  • Это не я. Я люблю JS, т.к. это настоящий ЯВУ, где работают абстракции и рутинная низкоуровневая питушня вроде кэшей и конвейеров полностью выпилена.
                                                    Ответить
                                                    • Нет, не выпилена. Эффекты кэша проявляются и в JS, см. https://habrahabr.ru/post/322020/

                                                      А еще в JS нет 64-битных интов
                                                      Ответить
                                                      • Ну это скорее баг, чем фича. Как все эти унылые 32/64 бита и неточные float/double.
                                                        Ответить
                                                    • И да, в JS можно сделать большой typed array и начать его долбить(читать/писать в него), замеряя время задержки. Таким образом можно определить кэши проца
                                                      Ответить
                                              • > Ты правда думаешь что я не знаю кто такой SPJ

                                                Откуда мне знать? Я уверен, что примерно половина моих коллег на работе (а то и больше) о нём не слышали. Сам понимаешь, шансы у рандомного багора на ГК и того меньше.
                                                Ответить
                                              • noname 12 часов назад
                                                > Ты действительно не умеешь в иронию?
                                                > Ты правда думаешь что я не знаю кто такой JSP, и считаю что ...
                                                Чтобы понимали иронию и оценивали уровень знаний, нужно писать с личной учётной записи.
                                                Ответить
                                                • Бароп очень гомогенен в плане стиля.
                                                  Ответить
                                            • > Зачем запоминать результаты, которые тривиально выводятся из общих принципов.

                                              Мемоизация потому что. Не будешь же ты каждый раз в уме считать 7*8, намного проще это запомнить
                                              Ответить
                                              • > Не будешь же ты каждый раз в уме считать 7*8

                                                Даже когда есть "запомненный" результат, неплохо бы уметь его быстро воспроизвести, чтобы проверить.
                                                Я помню, что 7*8 это 56, но обычно всё равно проверяю себя примерно так:
                                                7*8 == 7 * (10 - 2) = 70 - 7+7 = 56

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

                                                > намного проще это запомнить

                                                Ну мне, например, настолько редко нужно считать производную отношения двух функций, что мне проще её вывести, когда нужно, хотя и выучить её, казалось бы, просто.
                                                Ответить
                                                • > что мне проще её вывести
                                                  Помнится, я даже на егэ выводил с нуля всю хрень в духе sin(a+b) = ... т.к. запоминать её было влом.
                                                  Ответить
                                                  • > всю хрень в духе sin(a+b) = ...

                                                    Я вообще всю эту тригонометрическую ересь забыл почти сразу, как узнал о разложении тригонометрических функций в комплексные экспоненты.
                                                    Ответить
                                                  • > егэ
                                                    Наконец появились пруфы, что борманда взломал сукаблядь. Все знают, что настоящему было >30.
                                                    Ответить
                                                  • Бля, я думал, тебе сорокет.
                                                    Ответить
                                        • охуенно чувак пишет

                                          Хаскель он написать осилил, а LINQ изучить нет
                                          Ответить
                                      • Зожатие по Фомфану.
                                        Ответить
                                      • > арголитм
                                        Звучит внушительно. "Арго" (тайный язык) и "литм" (от гр. λίθος, камень?) Т.е. окаменевший мемчик?
                                        Ответить
                                        • Я помню, как доставал заначку из закрытого шкафа. Отодвинул шкаф от стенки, отодрал оргалит, и за оргалитом нашёл бутылку.
                                          Ответить
                                          • Мне очень нравится Ваша учётка. Реально "Солнца дар", аж советчиной запахло.
                                            Ответить
                                      • о, точно, у меня же на гитхабе есть страница.

                                        Нахуя она мне?
                                        Ответить
                  • Мам смотри я ldarg
                    Ответить
          • Как секундный слип после чтения каждого байта зависит от устройства кэша? Это в сотни раз больше, чем любой сик по диску, так что на фоне такого слипа похуй откуда байт: из пейджкэша, с соседнего сектора, или с другого края блина.
            Ответить

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