1. Куча / Говнокод #12041

    +129

    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
    public Match(source:SourceLexemes, namedLinkDictionary:NamedLinkDictionary, settings:MatchSettings):MatchResult
    				def endMatchingBlockLexemesByType = settings._endMatchingBlockLexemesByType;
    				def endMatchingBlockLexemesByValue = settings._endMatchingBlockLexemesByValue;
    				assert([_beginOfMatchBlock, _endOfMatchBlock].ForAll(excludedItem => !endMatchingBlockLexemesByValue.Contains(excludedItem)));
    				def matchLexeme(amountOfEntryBlock=0, matchedLexemes=[], sourceTail=source)
    					|(0, _::_, _)                                                                    => Some(matchedLexemes, sourceTail)
    					|(_, _, lexeme_::_) when endMatchingBlockLexemesByType.Contains(lexeme_._type)   => None()
    					|(_, _, lexeme_::lexemes_)                                                       => 
    						match(lexeme_._value, amountOfEntryBlock)
    							|(value_, _) when endMatchingBlockLexemesByValue.Contains(value_)   => None()
    							|(_beginOfMatchBlock, _)                                            => matchLexeme(amountOfEntryBlock+1, lexeme_::matchedLexemes, lexemes_)
    							|(_endOfMatchBlock, 0)                                              => None()
    							|(_endOfMatchBlock, _)                                              => matchLexeme(amountOfEntryBlock-1, lexeme_::matchedLexemes, lexemes_)
    							|(_, 0)                                                             => None()
    							|(_, _)                                                             => matchLexeme(amountOfEntryBlock, lexeme_::matchedLexemes, lexemes_)
    							|_                                                                  => None()
    					|_                                                                               => None()
    				match(matchLexeme())
    					|None                                                    => MatchResult.Failure(source, namedLinkDictionary)
    					|Some((matchedLexemes_, unmatchedLexemesTail_))          => MatchResult.Success(unmatchedLexemesTail_, updateNamedLinkDictionary(matchedLexemes_, namedLinkDictionary))

    Вчера заглянул в свой код.
    Есть один язык, так вот в нем паттерн-матчинг задается на уровне сигнатур функций.
    В связи с тем, что я каждую ночь читал книгу по кулХацкелу, то то что там было написано - вьелось мне в подкоррку и я этого даже не заметил.
    По ночам когда читаешь что-то, оно проникает в незащищенное подсознание. Я даже не ожидал, что напишу такой код. Но я его написал и только опосля понял, что с кодом что-то не так.
    Беда пришла оттуда, откуда её не ждали.
    Ещё я больше не могу без таких функций, как id или ($) или (.) или стрелочка\рыбка. Меня все это конечно раздражает... Мне кажется, что меня держут в клетке и не дают пользоваться правильными функциями.
    Я всегда считал, что зашквар и профессиональная деформация может быть только от крестов.
    Похоже я очень сильно ошибался и поплатился за это.
    Что посоветуете?

    Запостил: LispGovno, 01 Ноября 2012

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

    • Вообще первые тревожные звоночки зашквара появились, после того, как я в соседнем треде с говнокодом
      http://govnokod.ru/12031
      def failure = MatchResult.Failure(source, namedLinkDictionary);
      def success = MatchResult.Success(lexemes_, updatedNamedLinkDictionary);
      ...
      создал временные переменные, а потом их использовал в качестве возвращаемых значений функции. То есть не зависимо от результата выполнения у меня всегда создавалась лишние переменные, которые могли бы не создаваться и нетратить лишнее процессорное время на это каждый раз в глубоко вложеннном цикле и темболее не создавалась бы работа для сборщика мусора, постоянно удаляющего эти лишние ненужные переменные.
      А привычка то появилась, после того, как посидел в ленивом языке Haskell, в котором эти лишние переменные создаваться бы не стали, тк их не использовали.
      Ответить
    • Вот интересно, если упростить функцию до уровня:
      public Match(source:SourceLexemes):MatchResult
      				def failure()
      					MatchResult.Failure(source)
      				def matchLexeme(amountOfEntryBlock=0, matchedLexemes=[], sourceTail=source)
      					|(0, _::_, _)                                                                    => MatchResult.Success(sourceTail)
      					|(_, _, lexeme_::lexemes_)                                                       => 
      						match(lexeme_._value, amountOfEntryBlock)
      							|(value_, _) when endMatchingBlockLexemesByValue.Contains(value_)   => failure()						
      							|(_beginOfMatchBlock, _)                                            => matchLexeme(amountOfEntryBlock+1, lexeme_::matchedLexemes, lexemes_)
      							|(_, 0)                                                             => failure()
      							|(_endOfMatchBlock, _)                                              => matchLexeme(amountOfEntryBlock-1, lexeme_::matchedLexemes, lexemes_)
      							|(_, _)                                                             => matchLexeme(amountOfEntryBlock, lexeme_::matchedLexemes, lexemes_)
      							|_                                                                  => failure()
      					|_                                                                               => failure()
      				matchLexeme()
      , то сколько кода это займёт на императивном или любом другом нормальном языке или просто в красивом стиле?
      Функция просто ищит в потоке лексем первой лексемой _beginOfMatchBlock (например открывающася скобка). Если не нашла, то возвращает фейл, а если нашла, то смотрит, пропуская прочие лексемы, пока есть открывающиеся скобки и так находит последнюю парную закрывающуюся скобку (_endOfMatchBlock). Если список лексем закончился раньше, нахождения парной скобки, то засчитывает слив. В случае поражения возвращает список лексем неизменным, а если успех, то возвращет остаток лексем. Факт слива тоже возвращается.
      Ответить
    • Поздравляю с открытием персонального блога.
      Ответить
    • >5 за говнокод в этом треде, 2 против
      Посоны, может в этом коде нет говна? Вот 2 человека мне уже пытаются льстить. Я уже начинаю верить, что я прав, а просто 5 человек, что проплюсовали - типичное быдло, что не понимает в функциональный код?

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

        > |(0, _::_, _)
        Это паттернматчинг по аргументам функции?

        > ::
        Что делает этот оператор?
        Ответить
        • _ перед именем аргумента показывает то, что он не используется?
          Ответить
        • >> |(0, _::_, _)
          >Это паттернматчинг по аргументам функции?
          Да. Писать match(переменная) в функции не нужно, если первый же оператор матчинг "|".
          Матчинг доступен, тк все функции каррированны, поэтому аргументы представляют собой один кортеж. Поэтому это матчинг по одной переменной. Фактически ты можешь вызвать функцию f(args), если args - кортеж из аргументов, а можешь написать f(arg1,arg2,...).

          >> ::
          >Что делает этот оператор?
          Cons из lisp, : из Haskell. То есть добавление элемента в список.
          Ответить
        • >а особого желания изучать его пока нет
          Я тоже так думал, но крайне мощное метапрограммирование (лисп и рядом не стоял) и вывод типов позволило и ещё позволит сделать очень широкую автоматизированную библиотеку. Фактически весь язык и вся стандартная библиотека уже написана на макросах. Жаль метапрограммировать тяжело на нем. Я пока не осилил. Но использование готового (из автоматизации, расширенных проверок во время компиляции и библиотек) уже даёт о себе знать.
          Ответить
    • Что меня раздражает в большинстве функциональщиков (и в самом себе в частности): они старательно учат функциональный матан, поведясь на рассказы об идеальном функциональном мире, и со временем понимают прелести и недостатки столь дорогих сердцу ФЯ, спорят о невероятной полезности той или иной фишечки, но реально полезный софт на ФЯ пишут единицы.
      Если полистать блог хацкеля на хабре, легко заметить, что 99% статей - решение абстрактных студентозадач в вакууме, и лишь 1% - реальные success-story, от которых захватывает дух.
      Хотел бы я, чтобы было меньше споров о крутотени ФЯ и больше действительно удобного софта, написанного на этом отличном (с моей точки зрения) семействе языков.
      Ответить
    • Поделитесь, что это за язык? Стоит ли покопать? Ни одного ФЯ хорошо не знаю.
      Ответить
      • Nemerle, мультипарадигменный (притом не 2 парадигмы, а больше). Так что не ФЯ. Но может в ФЯ, так что переход от императивного, до функционального будет максимально безболезненным. Императивную парадигму поддерживает полностью. На код не смотри. Код так написан, что пугает даже функциональщиков. С императивной стороны в принципе близок к C#, если не изучать прочие возможности. Если Framework библиотеку знаешь, то будешь, как дома.
        Ответить
        • Ну меня код наоборот заинтересовал. Да и давно надо было в функциональное программирование всегда интересовало.

          И кстати, вместе с mono никаких проблем не будет?
          Ответить
          • > надо было в функциональное программирование податься, всегда интересовало

            fxd
            Ответить
          • >И кстати, вместе с mono никаких проблем не будет?
            Запускать скомпилированные программы под моно можно, а вот компилятор под моно не работает. Может в новых версиях моно исправили это, но сомневаюсь. Класс ответственный за emit кода в моно с багами. Не соответствует .net'овскому. Под JVM вроде порт компилятора скоро выйдет (может уже вышел), так что тоже в перспективе не проблема.
            Подсветка, автодополнение кода, формашлепка в студии работает хорошо для опенсорсного свободного продукта.
            Ответить
          • >Ну меня код наоборот заинтересовал.
            Чем?
            Ответить
        • Почитал на Википедии.

          Из плюсов (конкретно для меня):
          + Необычный синтаксис
          + Множество возможностей
          + Мультипарадигмальность
          + Удобная работа в системе Windows

          Из минусов (опять-же, для меня):
          - Привязка к .NET
          - Документации меньше, чем к тому-же хаскелю
          - Огромные проблемы с программированием на Nemerle в Linux

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

            По способностям близок только Lisp, кроме того, что он динамически типизированный. Может быть таким же мультипарадигменным. И так же сильно метапрограммировать, как и Nemerle.

            Из альтернатив:
            F#/OCaml или Scala
            Но вроде как 2 парадигмы в обоих и не более. Притом первый больше поощряет ФЯ. Про второй Роман тебе расскажет.
            Ответить
            • > Программировать под линухом можно, но в каком-нибудь вайне скорее всего или виртуальной машине.

              Т.е. я соберу под вайном хеловорлд.ехе и потом его тоже запущу под вайном? No way.
              Ответить
              • > и потом его тоже запущу под вайном?
                Нет, запустишь под моно в линухе без вайнов.
                Ответить
            • > И так же сильно метапрограммировать
              Хватит уже метапрограммировать, найди себе девушку.
              Ответить
              • Тролль. :p
                Ответить
              • Сначала я чего-нибудь добьюсь, а потом найду девушку.
                Ответить
                • В жизни всё происходит в обратном порядке - сначала находишь девушку, а потом чего-нибудь добиваешься.
                  Ответить
                  • http://www.youtube.com/watch?v=HoHq8ytj_hA&feature=related
                    Ответить
                  • > В жизни всё происходит в обратном порядке - сначала находишь девушку, а потом чего-нибудь добиваешься.
                    В жизни всё происходит через жопу - сначала ты добиваешься девушки, потом находишь как-нибудь от нее избавиться.
                    Ответить
                    • Я перешел к последнему пункту сразу.
                      Ответить
                      • Ыыы. Минусаторы завидуют.
                        Ответить
                      • Куда ты дел мёртвую шлюху?
                        Ответить
                        • Кто сказал рука?
                          Ответить
                        • Лол, вспомнились история Родригеса в 4-х комнатах.

                          >потом находишь как-нибудь от нее избавиться
                          Показать fluent-interface. Не:?
                          Ответить
                          • > Показать fluent-interface. Не:?
                            Устройство монады IO. Правда есть возможность, что она обладает настолько извращенным сознанием, что ей это понравится... тогда пункт про избавление можно и отменить.
                            Ответить
                          • >fluent-interface
                            Пффф. Нашел чем пугать. Да и монда IO её врятли испугает. Счас подумаю, что есть посложнее...
                            Ответить
                            • >fluent-interface
                              >Пффф. Нашел чем пугать.
                              Я вот и говорю никакой ты не олдфаг, а простое гумно, которое начиталось старых тредов.
                              Только неофитов и долбоёбов, которым нечего больше обсуждать заботят вопросы "олдфажности", люди которые тут сидят с самого начала никогда этим не кичились.
                              Ответить
                              • "Чем олдфажнее олдфаг, тем меньше он задумывается о своей олдфажности."
                                Кофнуций.
                                Ответить
                              • А ты сколько уже тут?
                                Ответить
                                • r/w где-то с апреля этого года, и до этого где-то месяц r/o.
                                  Ответить
          • Scala лишена практически всех перечисленных недостатков, имея почти те же достоинства. Под Linux на ней даже удобнее писать (лично мне). Интеграция с JVM для кого-то может быть большим плюсом, для кого-то - минусом. Есть IDE: scala-ide.org, годный плагин к intellij idea.
            Если интересно именно метапрограммирование и функциональность, можно поглядеть Clojure, он тоже на JVM.
            Как вариант можно посмотреть Haskell (разрыв шаблона гарантирован), он относительно кроссплатформенный.
            Ответить
            • >Как вариант можно посмотреть Haskell (разрыв шаблона гарантирован), он относительно кроссплатформенный.
              Даже без Template Haskell разрыв гарантирован, но метапрограммирование там не на что негодное. Я бы даже сказал, его нет. Но разрывы действительно будут.

              А если программировать с Template Haskell, то сказать не могу, возможно будет хорошое метапрограммирование, но я его пока не осилил. Ожидаю, что будут разрывы разрывов.
              Ответить
              • Что-то у вас идефикс на метапрограммировании...

                У меня интерес к метапрограммированию угас после увлечения лиспом. Поигрался, поюзал все эти приемы... и вдруг понял, что ставлю грабли человеку читающему этот код.

                Да, метапрограммирование удобно в библиотеках, в которых надо реализовать какой-то изврат, чтобы сделать их использование более-менее удобным. Но в самих программах оно только запутывает того, кто будет поддерживать код.
                Ответить
                • > идефикс на метапрограммировании
                  Именно, не нужно забывать, что "мета"-код занимает лишь малую часть приложения и нужен довольно редко (@bormand верно подметил: в основном, в библиотеках). При использовании с умом он может сэкономить много букв, но дорабатывать и чинить такой код сложнее. За всё нужно платить.

                  Подумайте о своих коллегах, которые будут ночью, просрочив дедлайны, допивая десятую чашку кофе коммитить хотфиксы (сам был в такой ситуации). Используйте сложные возможности языка в меру. Пишите максимально понятный код. Хорошенько тестируйте то, что написали. Пожалуйста...
                  Ответить
            • >> Есть IDE:
              IDE не надо. Пишу в sublime text 2, собираю из него же.

              >> Если интересно именно метапрограммирование и функциональность
              Только функциональность интересует.

              Правда займусь хаскелом, тем более компилятор есть и он кроссплатформенный. Да и sublime text подсвечивает.

              Буду благодарен если подкинете материалов для плавного изучения с нуля. Желательно что-то попроще трудов Кнута.
              Ответить
              • http://learnyouahaskell.com/chapters
                http://book.realworldhaskell.org/read/
                Первая очень легко читается и хороша для начинающих, во второй покрывается гораздо больше интересных и практичных вещей.
                Ответить
              • > Только функциональность интересует.
                Тогда зачем пошел Хаскель учить, спрашивается? Кроме факториалов на нем ничего не считают. Полезная функциональность отсутствует. Scala и то функционально полезнее.
                Ответить
                • >> функциональность интересует
                  > функциональщина интересует

                  fxd
                  Ответить
                  • Не надо учить функциональщину. Все равно на ней разрабатывать не будешь. А в обычные императивные языки веру уже потеряешь.
                    Ответить
                    • > Все равно на ней разрабатывать не будешь.

                      Ваш пост огорчает Столлмана.
                      Ответить
                      • > Ваш пост огорчает Столлмана.
                        Тем не менее Столлман давно уже ничего не разрабатывает.
                        Ответить
    • Вот что интересно, мой первый бот датируется ещё со времен, когда говнокод только появлялся, а именно среди первой 100ни. Ещё в те далекие времена, когда можно было постить говнокоды от гостей, указав любое имя. Ньюфаги конечно этого не знают.

      Но даже спустя довольно многое время, если человек приходил и говорил, что он насрал и предлагал на это посмотреть. Его люто бешенно минусовали. Также минусовали, когда ОП предлагал посмотреть на любую синтетику или не говнокод. Особо остервенелые возмущались, когда С постили в раздел С++. Такое просто не могли простить не при каких обстоятельствах, врываясь в тред и возмщенно крича: "Где здесь С++, %nickname%?"

      Сегодня говнокод уже не торт. Здесь постят код на разных языках и показывают на какахи в проектировании самого языка при этом нарушают все правила что только можно, в том числе постят синтетику без говнокода. И вы понимаете, их плюсуют! Со всей ответственностью старожила уютненького, стоявшего у истоков, заявляю: Это не здоровая канитель, господа.
      Ответить
      • >мой первый бот датируется ещё со времен, когда говнокод только появлялся, а именно среди первой 100ни
        На ресурсе всегда был небольшой процент долбоёбов.
        Отличить одних от других - проблематично. Долбоёбы они как сорта гумна для нормального человека неотличимы по виду и запаху.

        >Со всей ответственностью старожила уютненького
        И без подтверждений своих слов ты не старожил, и даже не простой хуй, ты просто Гумно.

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

          Рассказать историю говнокода? События могу иметь не верный порядок, но было примерно так:
          Сначала можно было постить говнокоды и комменты от гуеста, притом указывать ник прямо как на борде прямо при вводе поста\комента. Вроде даже и капчи не было. (На сколько я помню её ввели не для защиты от спам ботов, а для защиты от долбоёбов о_О много позже). И внимание: ник по дифолту был указан в поле ввода не гуест, а Говногость. Минусовать и плюсовать можно было даже гуестам, при том как топики, так и коменты (на +-1).
          Если говнокод уходил в минуса (порога не помню, но -1 помоему было достаточно ), то появлялась расстроенная мусорка над говнокодом и отсчитывала дату(время в часах если день последний) до удаления (две недели - день (точнее период не скажу, запамятовал)). Возможно не помню, тк этот период менялся.
          Ответить
          • Потом ввели возможность логинится и говногостей переименовали в guest. (К сожалению в этот момент я с этой борды ушел, тк старый дух был утерян). Вернулся незадолго до того, как гуестам разрешили изменять величину кармы коммента на уровне +-1, а говнокодов +-0.1 (раньше было +-1 везде) (но помоему во времена эксперементов было и 0.05 и 0.01, но точно очень не долго, если было). Чтобы всякие гуессты не сильно влияли на ситуацию. При уходе от ников указанных вручную во время поста к логинам при конвертировании базы эти имена были потеряны. :( Там и дизайн сайта где-то поменяли. Добавили Отзывы. Запретили в никах символы юникода из-за того, что я взял и зарегал бота с ником guеst (е русское) и поставил аватарку гостя. В те времена как раз гостя стали ущемлять (тк от него какието ублюдки начили постить хуйню), а я был под гостем, только номер у меня был другой, поэтому меня посчитали опасным элементом. Со мной абу боролся. Убирал у меня аватарку, разлогинивал и в конце концов переименовал в FakeGuest :( Так погибла ещё одна надежда на свободу. Но в тот момент я заразил говнокод уникодоманией в именах. После чего это было запрещенно. Потом абу забил на ресурс. Защимил гуестов совсем. А теперь и чтобы зарегать нового бота или запостить говнокод - нужно сидеть долго в бане. С каждым годом наша свобода тает. Дух говнокода потерян. Страйкер призывается к ответу.
            Ответить
            • так ведь с работы не напасешься говнокодов - они суки учатся и под бдительным оком пишут все лучше
              если случается говно - так рахитектурное, которое и на 10 страницах не уместить

              вот и остается синтетику рассматривать

              я тут обнаружил, что знаком лично с человеком из первого полтинника - тесен мир:)
              Ответить
              • А сам с какой 100ни будешь? Просто знаю, что ты недавно (для меня недавно), но вдруг у тебя тоже бот есть?
                Ответить
                • мой id отражает реальность - примерно тогда я и вступил
                  а ботов заводит у нас только тарас - причинять справедливость, если кто опрометчив к его божественным языкам
                  но он молод, горяч и из купчино, так что придется понять и простить

                  > мои не учатся
                  так ведь надо учить, если есть возможность и полномочия
                  Ответить
              • >так ведь с работы не напасешься говнокодов - они суки учатся и под бдительным оком пишут все лучше

                С Интернета можно. С его просторов.
                Элсо мои не учатся. Пишут также покакивая. :(
                Ответить
              • Есть много источников, тесно связанных с 1с и ПХП. Жаль только, там всё говно какое-то унылое, его и выкладывать стыдно.
                Ответить
            • > Со мной абу боролся.
              ШОК!! Раскрыта тайна века! Страйко == Абу. ЧИТАТЬ ДАЛЕЕ>>>
              Ответить
            • Буйство уникода было во время набега Вебкилла или я что-то путаю?
              Ответить
              • Да, относительно недавно. Но это я не по памяти говорю. Вспомнил, что в одной теме с вебкилом было много других вебкилов. Один из них точно был я (а там их было штук 5).
                Ответить
            • У нас уже был один олдфаг который кричал "Говнокод - УГ",
              но был быстро поставлен на место http://govnokod.ru/7736#comment105183
              и другой чудак Макса Прохорова форсил, а потом обосрался перед всем говнокодом.
              И ты повторяешь ту же ошибку. Ты старые треды забудь. Говнокод - это не геймдев, это не двач, таких "олдфагов" как ты тут презирают.
              Ответить
          • >Ты спроси что-нибудь.
            Говно со скольки лет употребляешь в пищу?

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

            > а для защиты от долбоёбов о_О много позже
            Неправда. Твои ж посты капча пропускает.
            Ответить
          • В общем тебе достаточно:
            а) зайти под своим самым старым id и написать пруфпост
            б) выложить сохраненный тред со старым дизайном.
            Есть еще третий способ, с которым ты будешь признан олдфагом:
            в) сфоткаться поедающим говно на фоне гк, с супом:
            "Я, Гумно Лиспович, находясь в здравом уме и твердой памяти, торжественно заявляю, что я олдфаг".
            Ответить
            • http://rghost.ru/41412407.view
              Ответить
              • Не видно - чья сессия.
                Но сходство поразительно!
                Ответить
            • У меня есть сохранённый тред со старым дизайном, и не один. Да я же олдфаг. Йаху-у-у-у!
              (И не спрашивайте меня, зачем я их сохранял. Хотя, на самом деле всё просто. Я хотел применить эти секретные технологии для обфускации ПХПшного кода.)
              Ответить
              • Вот-вот. Я кстати зарегался только после того как гостям запретили тут говнокодить.
                Ответить
                • А я - когда комментировать. Судя по нашим айдишникам, второе произошло некоторое время спустя.
                  Ответить
              • > И не спрашивайте меня, зачем я их сохранял.
                [заговор]Чтобы в будущем получить статус олдфага.[/заговор]
                Ответить
      • > Ньюфаги конечно этого не знают.
        Достаточно посмотреть первые посты, в которых дробные оценки и говны от гостей. Даже такой ньюфажина как я об этом знаю. (Хотя до этого момента я думал, что говнокоды от гостей это баг возникший при давнишней перезаливке базы).

        > в том числе постят синтетику без говнокода
        Годная синтетика стоит десятка индусских кодов.
        Ответить
        • Ага, всё, что описал LispGovno, восстанавливается по древним говнокодам и по Реформалу. Именно по дробным оценкам и по говнам от гостей у меня сложилась точно такая же картина.
          Ответить

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