Куча говна / Говнокод #27004 Ссылка на оригинал

0

  1. 1
IT Оффтоп #63

#35: https://govnokod.ru/26463 https://govnokod.xyz/_26463
#36: https://govnokod.ru/26508 https://govnokod.xyz/_26508
#37: https://govnokod.ru/26524 https://govnokod.xyz/_26524
#38: https://govnokod.ru/26539 https://govnokod.xyz/_26539
#39: https://govnokod.ru/26556 https://govnokod.xyz/_26556
#40: https://govnokod.ru/26568 https://govnokod.xyz/_26568
#41: https://govnokod.ru/26589 https://govnokod.xyz/_26589
#42: https://govnokod.ru/26600 https://govnokod.xyz/_26600
#43: https://govnokod.ru/26604 https://govnokod.xyz/_26604
#44: https://govnokod.ru/26627 https://govnokod.xyz/_26627
#45: https://govnokod.ru/26635 https://govnokod.xyz/_26635
#46: (vanished) https://govnokod.xyz/_26646
#46: (vanished) https://govnokod.xyz/_26654
#47: https://govnokod.ru/26671 https://govnokod.xyz/_26671
#48: https://govnokod.ru/26707 https://govnokod.xyz/_26707
#49: https://govnokod.ru/26750 https://govnokod.xyz/_26750
#49: https://govnokod.ru/26776 https://govnokod.xyz/_26776
#50: https://govnokod.ru/26804 https://govnokod.xyz/_26804
#51: https://govnokod.ru/26809 https://govnokod.xyz/_26809
#52: https://govnokod.ru/26817 https://govnokod.xyz/_26817
#53: https://govnokod.ru/26833 https://govnokod.xyz/_26833
#54: https://govnokod.ru/26840 https://govnokod.xyz/_26840
#55: https://govnokod.ru/26844 https://govnokod.xyz/_26844
#56: https://govnokod.ru/26862 https://govnokod.xyz/_26862
#57: https://govnokod.ru/26890 https://govnokod.xyz/_26890
#58: https://govnokod.ru/26916 https://govnokod.xyz/_26916
#59: https://govnokod.ru/26934 https://govnokod.xyz/_26934
#60: https://govnokod.ru/26949 https://govnokod.xyz/_26949
#61: https://govnokod.ru/26980 https://govnokod.xyz/_26980
#62: https://govnokod.ru/26999 https://govnokod.xyz/_26999

Запостил: nepeKamHblu_nemyx nepeKamHblu_nemyx, (Updated )

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

  • Добрый день.

    Этот оффтоп сгенерирован автоматически.

    Индекс оффтопов: https://index.gcode.space/.
    Зеркала Говнокода и полезные ресурсы:
    * https://govnokod.xyz/ (альтернативный Говнокод)
    * https://gcode.space/ (read-only зеркало Говнокода)
    * @GovnokodBot в «Telegram»
    * https://vorec.space/ (глоссарий Говнокода)
    Ответить
  • возник теоретический вопрос

    если храним в БД, например, результаты футбольных матчей и таблицу, как лучше всего сделать всякий хитрожопый ордеринг? например, если у двух команд одинаковое количество очков, то надо смотреть на результаты матчей между ними, потом на разницу мячей и т.п.; если более чем у двух одинаковое количество, то сначала смотрим количество очков, которое каждая команда набрала в матчах с остальными с таким же количеством общих очков, потом опять-таки разницу и т.п.

    это вообще имеет смысл делать на уровне БД или выше?
    Ответить
    • ORDER BY foo, bar, buz?

      а, типа мы сначала нашли все команды с одинаковыми очками, и далее их выбрали, и нашли матчи между ними?
      Ответить
      • угу. и, если порядок определить невозможно, берём следующую метрику и т.д. до победного конца
        Ответить
        • Почему не сделать это в несколько запросов на нормальном императивном языке? Хочешь -- внутри СУБД в хранимке, хочешь -- снаружи, на C#, или что там у тебя?

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

            это получается сначала выгружаем данные по командам (игры, победы, поражения, всякое-разное, считаем очки)

            потом уже руками в логике делаем сортировку, при необходимости дёргая базу для доп информации

            я правильно понимаю?
            Ответить
            • Например да.

              Вон Борманд предлагает тебе один раз это пересчитывать после матча, и сохранять в денормализованном виде, то есть в виде уже готовой турнирной таблицы. Чтобы получать ее одним SELECT *
              Ответить
              • звучит ок

                а если я захочу посмотреть на таблицу турнира с учётом других правил? тогда придётся пересчитывать) ну это очень редко конечно когда бывает нужно
                Ответить
                • В целом не нужно стараться вот прямо ВСЁ выразить одним SQL запросом.
                  Иногда лучше 10 маленьких лёгких и понятных запросов, чем один семиэтажный, который ты будешь сутки дебажить.

                  Ну любую логику пересчитать на C# проще, чем на SQL:)
                  Ответить
            • С другой стороны тут и запрос не такой уж и сложный. Колонки с "очками", "результатами матчей" и "количеством мячей" посчитать по турнирному окну да сделать order by.

              Х.з., я уже подзабыл SQL, (да и не знал его толком, лол).
              Ответить
              • а как ты себе видишь структуру?

                вон есть две записи
                Шинник -- Локомтив -- 2:3
                Шинник: N очков
                Локомотив: Z очков

                Тебе придется отсортировать, найти одинаковые, сделать подзапрос с поиском результатом сорвневаний итд
                Ответить
              • хм, ну не знаю

                вот у команд одинаковое количество очков. и надо сначала посмотреть, как они играли друг с другом. и, например, учитывается правило выездного гола.

                к примеру, команды А и Б сыграли на поле А 3-2 в пользу А, а на поле Б 2-1 в пользу Б

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

                    возьми какую-нибудь ЛЧ или чемпионат на 20 команд, там алфавитная сортировка не поможет

                    правда, в таких случаях, если все-все критерии не дают определить порядок, назначаются дополнительные матчи лол

                    реальную жизнь иногда очень тяжело наматчить в кампутир(
                    Ответить
                    • Ну вот видишь: даже на кампутир хер наматчиш, а ты хочешь на SQL.

                      Я бы на на клиенте субд посчитал
                      Ответить
                    • это зависит от регламента турнира, что там происходит
                      может, жребий, может, переигровки, а может проходит тот, кто Албания, а Занзибар соснулей - если турнир короткий, в нем нет времени на переигровки (+ как ты переиграешь группу, где все 4 команды сыграли 0-0 и имеют равенство по желтым и красным карточкам)
                      Ответить
                      • If one considers all possible outcomes (win, draw, loss) for all six matches in a group, there are 729 (= 36) outcome combinations possible. However, 207 of these combinations lead to ties between the second and third places. In such case, the ranking among these teams is determined as follows:[68]

                        Greatest combined goal difference in all group matches
                        Greatest combined number of goals scored in all group matches
                        If more than one team remain level after applying the above criteria, their ranking will be determined as follows:
                        Greatest number of points in head-to-head matches among those teams
                        Greatest goal difference in head-to-head matches among those teams
                        Greatest number of goals scored in head-to-head matches among those teams
                        Fair play points, defined by the number of yellow and red cards received in the group stage:
                        Yellow card: minus 1 point
                        Indirect red card (as a result of a second yellow card): minus 3 points
                        Direct red card: minus 4 points
                        Yellow card and direct red card: minus 5 points
                        If any of the teams above remain level after applying the above criteria, their ranking will be determined by the drawing of lots

                        в общем, старая добрая монетка
                        Ответить
                          • конечно. а однажды он ещё и многое решил.

                            > чемпионат Европы по футболу 1968

                            > В полуфинале сборная СССР сыграла вничью 0:0 с командой Италии. Победителя определял жребий (подбрасывание монеты), который оказался неблагосклонным к капитану сборной СССР Альберту Шестернёву. Такого в истории футбола на высоком уровне больше не случалось.
                            Ответить
        • Х.з. я бы это сделал уже в слое, который над БД. Там и колонку с номером места несложно приделать.

          Или вообще денормализовать место в конце турнира и не париться? Оно же иммутабельное, по сути.
          Ответить
          • турнирная таблица есть же не только в конце, а после каждого игрового дня, по-хорошему

            типа сделать отдельную таблицу и там хранить места команды после каждой игры?

            почему мне не очень нравится такой вариант: игры могут переноситься, а иногда и чёткого расписания тура нет (правда, это больше относится к другим командным видам спорта), потому круто было бы сказать: возьми матчи турнира с даты по дату и построй таблицу
            Ответить
            • Ну у тебя же результаты матчей не из воздуха берутся, их юзер вбивает. Ну вот в этой транзакции можешь и обновить колонку с местами. А потом во всяких вьюхах ты спокойно по ней будешь сортировать, не вдаваясь в детали. По-моему самое тупое и надёжное решение.
              Ответить
    • Зависит от бд
      В какой-то графовой мб сможешь и одним запросом утянуть
      Ответить
      • без примера тяжело.
        я из графовых знаю только GraphQL
        Ответить
        • Graphql это способ организовать апи типа odata
          Те ты из клиента пишешь квери а бек может твою таблицу собрать и из реляционной бд и из графовой
          У меня у самого нет опыта работы с графовой но бекендщики на работе рассматривали реализацию подобной структуры на графовой бд
          Ответить
          • я тоже с таким сталкивался

            типа был бэк классический
            и был миддлваре с графкьюел

            но подробностей не знаю

            (работало через жопу, но там свои причины были)
            Ответить
            • >работало через жопу
              Оно почти всегда работает через жопу потому что его делал фейсбук а у фейсбука графовая бд и оно в принципе не очень хорошо ложится на архитектуры где главная бд - реляционная
              Ответить
    • конкретно в этом примере - нет, смысла делать на уровне БД мало, лучше считать на беке и возвращать в БД для хранения денормализованный результат в виде "место" (по той причине, что даже в рамках большого турнира у тебя записей всего ничего, несложно их все выгрузить в память "сервлету", а вот динамики - много, сопровождать на беке эту динамику в виде правил подсчета козявок из носа при полнолунии - гораздо лучше, чем под каждый турнир свой собственный портяночный запрос писать).

      но если ты хочешь попрактиковать SQL, то вай нот, можно и на нём
      Ответить
      • > под каждый турнир

        Кстати да, это важный момент. Весело будет учитывать в запросе все вореции правил за последние 100 лет.
        Ответить
        • это всё же вряд ли

          есть соревнование с айди турнира, этапами и, как я теперь думаю, айди правил для каждого этапа

          потому в историю лезть не придётся для конкретного турнира
          Ответить
          • Ну вот захочешь ты посмотреть сводку победителей чемпионата за последние 30 лет. Удачной ёбли с SQL.
            Ответить
            • ну кстати для победителей (и, возможно, призёров) я бы наверное сразу сделал отдельную таблицу. эти данные часто в отчёты будут лететь.

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

        Если коэффициент козявок поменяется, то не хочется перевыкладывать приложение
        Ответить
        • > менять логику

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

            зы: у меня просто была психологическая травма: я видел доморощенный CRM (внутрекомпанейский), где программисты реально делали коммиты с названиями "изменить размер скидки с 15% на 17%" или "добавление скидки в день рождения".

            С тех пор мне всегда хочется такую логику выносить
            Ответить
            • но тогда база кмк будет неконсистентна: ты перенесёшь её под другой бэк и все правила придётся переписывать руками

              с другой стороны, как адекватно хранить императивные правила в БД, я не знаю
              Ответить
              • > база кмк будет неконсистентна

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

                >как хранить
                ну вот я там ссылк на давал на тулы типа
                https://docs.jboss.org/drools/release/5.2.0.Final/drools-guvnor-docs/html_single/#d0e47

                от так
                https://docs.jboss.org/drools/release/5.2.0.Final/drools-guvnor-docs/html_single/images/Chapter-Guvnor/template-rule4.png
                Ответить
                  • Иногда данные удобно надергать из OLAP куба. Язык запросов называется MDX.
                    Ты выбираешь, что ты хочешь видеть по оси X и по Y, и какую агрегацию и группировку делать.

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

                      {
                        "if":  {
                          "condition",
                          "true-clause",
                          "false-clause"
                        }
                      }


                      хранить json в базе, выгружать, преобразовывать в коньструкции используемого языка (если он такое позволяет конечно)
                      Ответить
                      • Почему бы не хранить там скрипт на нормальном языке? А не эту пародию на XSLT.
                        Ответить
                        • тоже подумал об этом

                          но это какой-то вендор лок (то есть мы завязываемся на условный Яuby)
                          Ответить
                          • Ну а так мы завязываемся на какую-то неведомую ёбаную хуйню, с которой все будут страдать. Зато все равны!

                            Какая политкорретность )))
                            Ответить
                              • Да вообще эта питушня усложняет архитектуру и разработку в охулион раз.

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

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

                                  всего лишь хранишь скриптушню в базе. а, если у тебя больмень серьёзное приложение, то встроенное двигло для скриптования там скорее всего уже и так есть

                                  надо будет побаловаться.

                                  swift + racket + coredata (или sqlite и голый sql для остроты ощущений)
                                  Ответить
                                  • > для остроты ощущений

                                    berkeleydb и няшную. Они ебашили NoSQL когда слова "мейнстрим" ещё не было.
                                    Ответить
                                    • да-да-да! key-value БД, привязанная к хешу перла) И файл флокать, чтобы другой экземлпяр твоей программы его не испортил

                                      1C вон седьмая без всякого СУБД вроде бы жила так
                                      Ответить
                                      • Ну к слову в berkeley db есть ACID. А в этих ваших монгах нету только пару лет назад завезли. И вообще там индекс по сишной(!) функции от value строить можно.
                                        Ответить
                                        • во всех? там вроде много версий было разных

                                          А всякие newaliases в sendmail/postfix тоже же в ней хранились?
                                          Ответить
                                          • The 3.x releases added a logging system for transactions and recovery, called "Transactional Data Store" (TDS).

                                            97-99 год где-то.
                                            Ответить
                                            • Именно по этому я за "старый UNIX"

                                              Через 20 лет хипстеры изобретут ки валуе базу на JS с транзациями, и будут ссать от восторга
                                              Ответить
                                              • Вот реально, зачем тебе все эти прослойки в виде "HTTP", "JSON", "REST", "SQL" и прочего говна, если ты можешь из кода на няшной получить через сокет няшную структуру, вставить её as is в базу и построить по ней индексы с помощью функций на няшной?
                                                Ответить
                                                • Давно говорю, что у няшной самая лучшая серилазиация)

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


                                                  >функций на няшной?
                                                  ну так в ту пору это был вполне нормальный API.

                                                  У того же сендмыла был API, чтобы передать логику фильтрации письма в нее
                                                  Ответить
                                                  • > не все компиляторы могут одинаково выравнивать структуры

                                                    Опытный сишник пишет структуры так, что они не требуют выравнивания и/или прагма паков. Проверь.

                                                    > не у всех одинаковый байтордер

                                                    Это да, но умные дядьки специально для этого придумали "сетевой" порядок байтов и htons.
                                                    Ответить
                                                    • >Проверь.
                                                      А как он так делает, кстати? Как мне гарантировать, что моя структура не попадет к марсиманам, у которых 33-х битная операционная система, и мне там не выровнят что-то?

                                                      >htons
                                                      да, тоже про это подумал
                                                      Ответить
                                                      • > 33-х битная

                                                        Ну не, под такое уже хрен сделаешь. А с октетами и их производными всё просто - добиваешься натурального выравнивания для всех полей. И конпелятор не будет добавлять отсебятину.

                                                        Ну т.е. пара интов и 8 чаров у тебя на любой популярной платформе будут без паддингов.
                                                        Ответить
                                                        • >Ну т.е. пара интов и 8 чаров у тебя на любой популярной платформе будут без паддингов.

                                                          интов сколькибитных?


                                                          Ну в общем я тебя понял, да: обычно если твоя структура кратна степени довйки начиная с воьсми бит (или разлагается на эти степени?), то смысла паганить её нету, верно?
                                                          Ответить
                                                          • > интов сколькибитных?

                                                            Да хоть 2, хоть 4, хоть 8. Приведи пример платформы, где эта структура будет не выровнена.

                                                            Но вообще для сетевого протокола можно задефайнить себе набор из u8, u16, u32 и u64 и из них составлять структуры. Тогда точно ничего никуда не поедет.
                                                            Ответить
                                                            • ну да, могут снизу доппадить пустым местом, но это не важно же

                                                              int1: 2byte
                                                              int2: 2byte
                                                              char[8]: 8byte
                                                              ПУДИНГ: 8byte

                                                              Чтобы следующая структура шла отдельно, И не надо было невыровнено чото делать
                                                              Ответить
                                                              • Ну да, можно тупо юзать инты/лонги парами, шорты по 4 штуки, чары по 8 штук. И никаких паддингов никогда не будет. Ну разве что на несуществующих 128-битных платформах.

                                                                А правила такие, насколько я помню:

                                                                1) Выравнивание примитива равно ему размеру: alignof(u32) == sizeof(u32)
                                                                2) Выравнивание структуры или юниона равно max(alignof(fields))
                                                                3) Оффсет каждого поля кратен его выравниванию

                                                                Пункт 2 добавляет паддинг в конец. Пункт 3 добавляет паддинги между полями.
                                                                Ответить
                                      • > чтобы другой экземлпяр твоей программы его не испортил

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

                                        З.Ы. Вроде и между процессами координация через shared memory была, но я могу ошибаться.
                                        Ответить
                                        • каких потоков, чувак?:)

                                          У меня была .cgi на перле, которая запускалась на каждый запрос. Два питуха зашли на сайт -- два cgi запустились.

                                          Что будет, если два отдельных процесса одновременно откроют один файл, и писнут туды?:)

                                          Тредов тогда не было ни в позиксе еще (pthreads вроде не завезли, у прыщей был свой как-то API), но у меня в голове.
                                          Да и демона на шаред хостинге я бы не запустил)
                                          Ответить
                                          • Ну тут пишут, что в 97 они научились позиксовые треды. Но в прыщи их тогда видимо ещё не завезли, да.
                                            Ответить
                                            • хм, пишут, что старые треды тоже имели позиксовый API.

                                              Вероятно, я напиздел

                                              LinuxThreads
                                              This is the original Pthreads implementation. Since glibc 2.4, this implementation is no longer supported.

                                              NPTL (Native POSIX Threads Library)
                                              This is the modern Pthreads implementation. By comparison with LinuxThreads, NPTL provides closer conformance to the requirements of the POSIX.1 specification and better performance when creating large numbers of threads. NPTL is available since glibc 2.3.2, and requires features that are present in the Linux 2.6 kernel.


                                              Ну хотя вот это
                                              "closer conformance" говорит о том, что не все было радужно там с APIO



                                              зы:
                                              не, все ок

                                              LinuxThreads — частичная реализация библиотеки потоков POSIX Threads
                                              Ответить
                        • Я не верю в DSLи, а нормальный язык слишком неудобен для бизнес питухов.

                          Им всё таки проще вот такие
                          https://docs.jboss.org/drools/release/5.2.0.Final/drools-guvnor-docs/html_single/images/Chapter-Guvnor/GuidedComplex.png

                          И не факт, что оно туринг полное (иначе они тебе инфинит луп быстро образуют)


                          Но вообще у меня нет Strong Opinion.
                          Может быть когда-то и правда лучше впиндюрить туда Python, и обучить людей писать на нем несложную логику
                          Ответить
                          • ну это ж гуй

                            оно всё равно где-то внутри себя правила хранит в каком-то формате
                            Ответить
                          • Предлагаю хранить там байткод. Тогда его и исполнить можно будет где угодно. И конпелировать из чего угодно.

                            З.Ы. Хотя не, write-only хуйня получается.
                            Ответить
            • > скидки

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

    ДДроу я пхнул в ATLный класс CComPtr. Это шаред, он умет и муваться, и копироваться, и сам имеет каунтинг.
    Остальное поклал кого в шаред, кого юник (у меня нет make_unqie, бо компилятор старый, так что приходится делать new).
    Свои классы сделал мувабл, а копирование явно запретил (через = delete)

    При муве владение ресурсом переходит к новому питуху, а старый опустошается, и выкидывается на помойку.

    Теперь кладу всё в структуру, и теку: само всё чистится, главное инициализировать в правильном порядке.

    Внятный оунершип великая вещь конечно
    Ответить
    • > Внятный оунершип

      Везёт. Я вот пытаюсь натянуть RAII на вулкан, а получается какая-то питушня. Нельзя взять и ёбнуть буфер пока видюха его юзает.
      Ответить
      • Хм... Деструктор запускает поток, который ждет освобождения буфера, а потом грохает его?
        Ответить
            • я тоже не понял
              можно же просто слип делать на 1с в деструкторе в цикле и проверять, зачем потоки какие-то, маразм
              Ответить
              • Ну так то да, если оно за 16мс успевает, то за секунду то точно управится.
                Ответить
                    • Ну можно на заборчике спать, который видюха выставит. Тогда будет ровно сколько надо.
                      Ответить
                      • ну я имею в виду что за то время пока поток спит можно было бы числа Фибоначчи посчитать или еще какое-то говно
                        в браузере просто потоком пользуешься по очереди ты и браузер и всегда надо ему этот поток отдавать а самому себе шедулить исполнение на попозже
                        Ответить
                          • Кто-то овец считает, кто-то котодевок, а он - числа фибоначчи.
                            Ответить
                              • Крестухи пишут расчет Фибоначчи на рекурсивных шаблонах в компайл-тайме.
                                А пока оно собирается, сидят на сайтах, которые лагают.
                                Ответить
                                • реально ли написать тетрис на шаблонах? Пока не пройдешь -- не скомпилируется
                                  Ответить
                                  • > тетрис на шаблонах

                                    std::tetris<std::left, std::left, std::right, ...>
                                    Ответить
                                      • Я не хочу убить полжизни на дурацкий челлендж с гк, спасибо. Нет, хотел считерить и запустить какую-нибудь игрушку из эрланговского parse transform'а. P.S. это и вправду легко сделать, можно хоть Doom запускать. Жаль, что он после Game Over не выходит с ненулевым кодом возврата. "Compiling!" обрело бы новый смысл.
                                        Ответить
                                • Этот веб боится меня. Я видел его истинное лицо, сайты — продолжение срендереных скриптами строк, а скрипты заполнены телеметрией. И когда главный тред будут окончательно забит, то вся эта мразь начнёт тонуть... Когда скопившаяся грязь говнокода и фреймворков вспенится им до пояса, все крестухи и жавапидорасы посмотрят вверх и возопят: "Спаси нас!", а я прошепчу: "Нет".
                                  Ответить
                    • Можно и просто terminate(). Посмотришь секунд 5-10 на зависший рабочий стол, а потом всё норм. Прыщепроблемы, да.
                      Ответить
                    • Если тебя не устраивает, что для с++ это дохуя, то попробуй написать то же самое на «PHP».
                      Ответить
        • Скорее закидывает буфер в корзину. И когда выполненные команды проходят через заборчик, корзина очищается.
          Ответить
      • У меня получилось логично: осовбождаются только GDI битмапы, и их DC. а остальное все в памяти висит до конца.

        При выходе у меня релизится сначала сюрфейс, потом directdraw сам (ну вернее это CComPtr их релизит в своих деструкторах), и видимо ddraw сам следит, чтоб всё за собой почистиить

        Он даже мне ращрешение нормальное возвращает сам!
        Ответить
        • Ну в старых DX синхронное API было, там драйвер от тебя все сложности прячет, всё просто и логично. В DX12 и вулкане такой халявы больше нет.

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


            On IDirectDrawSurface7 interfaces, the default is DDFLIP_WAIT. If you want to override the default and use time when the accelerator is busy (as denoted by the DDERR_WASSTILLDRAWING return value), use DDFLIP_DONOTWAIT.

            Какая прелесть: карту называли графическим акселератором в моем детстве.. кто помнит 3dFX и Glide?
            Ответить
            • А вот кстати, если у меня в интеловскую интеграшку монитор не воткнут, то я могу назвать её акселератором?

              Я могу ей что-то рисовать в буфер или видео энкодить например. Но без моника она ведь не видеокарта уже.
              Ответить
              • Ты не первый это придумал.

                Во-первых есть лаптопы с двумя картами: одна полноценная, а в другой только GPU для рендеринга (CRTC нету). dGPU, кажется. Ну знаешь же эту хуйню с DRI_PRIME и setprovideroffloadsink?

                https://wiki.archlinux.org/index.php/PRIME

                Во-вторых есть видяхи вообще без выхода для майнинга говна.

                Кстати, о монах: видел такую странную карту, которая не видела по DVI монитор. А по hdmi видела. Что странно, потому что прот там вроде один и тот же. Видимо, была битая нога (16-я, судя по картинке https://cdn.shopify.com/s/files/1/0869/5892/files/DVI-connectors-type_large.jpg?v=1478277188)

                И вот UEFI было срать на наличие монитора, и обычному дравйеру SVGA тоже срать.
                А драйверу nVidia не срать.

                В итоге пока ты не поставишь дрова -- мон работал. А как поставишь -- сразу гас;)
                Ответить
    • Кстати, ты же хотел архитектуру с некогерентными кешами?

      Out of order исполнение на три тыщи ядер и ещё кучу апаратных блоков. write-back кеши без протоколов когерентности. И 32 фронтенда, которые парсят твоё говно и набрасывают на этот вентилятор.

      Добро пожаловать в ад, грешники.
      Ответить
      • Эх молодёжь... В мои-то времена там не было кэшей.
        Ответить
        • Ну ты что, с кешами же веселее. Чтобы крестоблядская memory model мёдом не казалась.
          Ответить
        • Барьер картинки

          барьер.этапДоБарьера = ВыводКартинки
          барьер.доступДоБарьера = ЗаписьБлокомВыводаКартинки
          барьер.стараяРаскладкаКартинки = ОптимальнаяДляВывода

          ... случается раньше ...

          барьер.новаяРаскладкаКартинки = ОптимальнаяДляЗатенения
          барьер.доступПослеБарьера = ЧтениеБлокомЗатенения
          барьер.этапПослеБарьера = Затенение
          Ответить
        • До RTX я такими темпами не дойду, походу 🙁

          Но хотя бы кубик с текстурой нарисовал.

          Кстати, я про RTX же отвечал тебе?

          Там все модели пакуются в некую проприетарную acceleration structure, по которой RTX ядра смогут искать пересечения лучей с треугольниками. До кучи надо приложить таблицу всех шейдеров и всех ресурсов.

          Затем запускаешь команду vkCmdTraceRays. Она запускает ray generation shader, который начинает закидывать лучи в RTX топку. Найденные пересечения триггерят closest hit shader и miss shader, в которых ты пишешь какую-то свою обработку и можешь шедулить новые лучи для отражений/преломлений.
          Ответить
          • > Там все модели пакуются в некую проприетарную acceleration structure, по которой RTX ядра смогут искать пересечения лучей с треугольниками. До кучи надо приложить таблицу всех шейдеров и всех ресурсов.

            Спасибо, стало непонятнее. Чтобы из модели (подразумевается исходный vertex + index buffer?) получить пригодные для RTX треугольники в 3D, нужно пол-пайплайна пройти, включая недешёвые вещи такие как скиннинг. RTX полностью дублирует или заменяет его? Я вроде читал, что он вместе с растеризацией как-то уживается. Ладно, объяснять на пальцах графический пайплайн уже после D3D10 стало невозможно, так что придётся самому видимо читнуть про этот ваш вулкан. Надеюсь, там хоть не надо натягивать квадрики на экран.
            Ответить
            • > полностью дублирует или заменяет его

              Судя по тому, что он запускается как compute а не как graphics, походу заменяет. Но так то никто не мешает гонять паралелльно и compute и graphics.

              > исходный vertex + index buffer

              Да, как я понял, эти буфера as is идут в bottom level acceleration structure. А список инстансов и матрицы трансформаций идут в top level acceleration structure. А вот вершинных шейдеров, тесселяции и т.п. там не видно. Возможно в моделях надо грубые контуры описывать, а тонкую обработку пересечений уже в шейдере доделывать... Х.з., я просто обзорное описание читал.

              З.Ы. Кстати, у шейдеров сейчас есть возможность срать в буфер. Возможно, что надо прогнать всю верхнюю часть пайплайна в буфер, а потом скормить его в RTX.
              Ответить
            • > уживается

              Гипотетически, я могу прогнать нормальный пайплайн и получить (1) мешок треугольников до растеризации и (2) пиксельную маску всяких блестящих объектов, которые хотелось бы потрейсить. А потом уже построить acceleration structure из (1) и запустить ray generator для (2). Ну и смёржить результаты этих пайплайнов.
              Ответить
      • а как там это все синхронизируется?

        Из того, что ты писал: какой процент кода на сишечке, а какой процент кода на языке под GPU?
        Ответить
        • > как синхронизируется

          У нас были event, fence, semaphore и барьеры всех цветов и размеров...

          Ты наполняешь командный буфер командами и отправляешь его в очередь на gpu. Оно там в фоне начинает ебашить. В конце-концов сигналит тебе fence на котором ты можешь ждать.

          На сишке тыща строк была когда я нарисовал треугольник, на glsl ну с десяток.
          Ответить
          • Тогда не очень страшно.

            В x86 мне тоже нужен забор, потому что кеши то кококококгерентны (когда нить я запомню, чем MESI отличается от MESA), но ведь перед кешами свой буфер, и его вроде бы вполне можно не флашить.

            >тыща
            Это была сишка, или кресты?
            Ответить
            • Кресты в сишном стиле. Там куча копипасты на самом деле, хотелось уже хоть как-то запустить.
              Ответить
              • >Там куча копипасты на самом деле
                замакроёбь
                Ответить
                • Не так все просто... Там походу надо маленький DSL делать, иначе это ад и содомия и я просто ёбнусь если захочу описать какой-то интересный эффект или материал.

                  Ну и вместо нормального менеджера ресурсов у меня там три раза скопипащена загрузка файла с диска и заливка его в видюху, лол.
                  Ответить
            • забор тебе нужен от реордеринга для сохранения гарантий программы. иногда он еще нужен, потому что ядро сказало "ага, я увидело апдейт", а на деле в очередь его положило и разберет когда-нибудь потом
              Ответить
              • ну ордеринг и означает, что FOO происходит после BAR, и видит всё, что сделало FOO.

                Заборов еще куча всяких видов, потому я за JMM: просто сихронизируюсь на локе, и теку
                Ну видимо у крестов уже такая же мемори модел есть
                Ответить
                • а ну-ка быстро сказал мне чем happens-before отличается от synchronizes-with
                  Ответить
                  • ой, я за cPython и MRI с GIL, если что)

                    в JMM есть happends-before: оно гарантирует такое выполнение, что все сайд эффекты уже видны.

                    synchronizes-with это вероятно из C++ модели.

                    Быстро не скажу, нужно читатьь
                    Ответить
                    • В плюсах вроде тоже есть, но это прямиком из JLS
                      Ответить
                      • ебаный стыд какой мне

                        пойду повеш почитаю
                        Ответить
                        • да я сам про эту хуйню узнал только когда полез читать про то, что такое блядь на самом деле волатайл (потому что как раз-таки из-за тех самых когерентностей классическое объяснение как бы сосет)

                          если правильно помню, то это более строгое отношение, чем happens-before, которое гарантирует не только видимость состоящих в отношении операций, но и предшествующих им, т.е. если в program order A идет раньше B, а B synchronizes-with C, то C всегда будет видеть А, даже если А и В между собой никак не связаны.

                          Но я не спал двое суток и пизжу наверное.
                          Ответить
                          • понятно.

                            То есть если я писнул в волатильную переменную, то мне гарантируется, что следующее чтение ее увидит, бо как раз таки будет флаш (впрочем, атомарность не гарантируется для лонгов), но вот увижу ли я другие изменения -- это как карта ляжет.

                            А happens before (всякие локи и пр) гарантируют hb?
                            Ответить
                            • в жабе волатильность и атомарность для даблов и лонгов гарантит, а я думал, что нет.. блядь, все забыл, надо перечитаьть
                              Ответить
                              • Шипилеша пишет, что x86 гарантирует атомарность, если данные выровнены по границе, то есть не нужно делать двух запесей. Ну это конечно касается данных размером с регистор.

                                Так понимаю, что если пишу 2 байта по адресу 0-1, то они там сразу оказываются. А если по адресу 1-2, то сначала попадает первый байт, потом может поработать другой тред, и дальше будет багор.

                                Так вот джава гарантит атомарность для 32х битных интов, пушо их выравнивает
                                Ответить
                                • Теперь Шипилеша хуесосит валуе тайпы. Потому что питухи могли бы сделать в джаве волтаильной структуру на гигабайт и всё сломать.

                                  Еще он пишет, что volatile имеет две семантики: Ордеринг (которая ломает оптимизации) и атомарность

                                  По спеке long не атомарен, и его волатилят ради атомарности и ломают оптимизации

                                  а зачем? ведь на x64 он и так атомарен
                                  а double -- тоже атомарен на современных процах, бо FPU и так умеет 64 бита, хотя по спеке и не должэен

                                  жава соснула
                                  Ответить
                                  • Продолжаем тред тредового бугура.

                                    Питухи любят хранить флаги битами в байте. В джаве есть BitSet, у сишников есть | и & или структура с битовыми филдами.

                                    Эти операции могут быть не атомарны: приходится считать из памяти инт, орнуть его, и поклать обратно, так как нельзя считать один бит.

                                    Если из двух потоков это сделать одновременно, то можно получить в памяти говно. Это называется word tearing.

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

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

      Но лучше, наверное, было бы скраппить википедию, там не только важные праздники ООН, а ещё дни рождений всяких интересных персон
      Ответить
        • Скорее фреймворк для дудлов, чтобы каждый сайт мог быть не хуже, а то и лучше гуглеса
          Ответить
    • Программист называет себя Разработчиком

      Профессия «Разработчик 1С» появилась относительно недавно. Раньше так называли лишь чуваков из 1С, которые разрабатывали конфигурации. Остальные чуваки назывались «Программист 1С» и внедряли эти конфигурации.


      Да как смочь
      1С-девопсов еще притащите
      Ответить
      • Именно поэтому я за идентификацией себя как «Оператор ЭВМ по специальности использование конфигуратора 1С»

        А вообще это такой багор, в статье прямым текстом написано, что программисты на 1С это какой-то офисный планктон, который занимается не разработкой.

        Даже PHP программисты — это разработчики сайтов (в основном), даже JS программисты это не писатели скриптов или операторы браузеров, а разработчики; я никак не могу понять как человек становится 1С'ником и приобретает такую низкую самооценку с отсутствием амбиций.
        Ответить
        • Совершенно не понимаю чем среднестатический 1Сник хуже среднестатистического пыхера на вордпрессе или джаваёба с XMLем на галерах.

          .......
          >Средняя зарплата на должности «Программист 1с» (Россия) составляет 39 975 руб.

          Ох. Ну ладно, понимаю, наверное.

          А почему, кстати? Казалось бы: автоматизация бизнеса это ВАЖНО
          Ответить
          • Все у кого много бабок берут ms dynamics/sap/salesforce
            Там и работягам больше платят
            Ответить
            • а почему?

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

                А зачем им брать 1С? 1С это хуета, мы тут это уже научно доказали.

                > И почему

                Мазохисты, либо ну просто очень анскильные люди. Или просто не хотят высокую зарплату и что-то там решать сложное
                Ответить
                • >>>"1С это хуета"

                  Полностью согласен. Поэтому я за "PHP".
                  Ответить
              • >а почему?
                Все эти три хуйни больше и гибче 1с и имеют базу знаний и спецов размером с целый мир
                >И почему они не меняют вид деятельности?
                Это легко так рассуждать сидя на говнокоде. В реальности люди делают кучу тупой хуйни по самым разным иногда оправданным причинам
                >вот умеешь там мануал по языку прочитать, и массив отсортировать, то ты уже можешь получать больше, чем 39 тысяч
                именно поэтому я ха js
                Ответить
          • Потому что бизнес обычно отличается от наебизнеса. Что работает на 1С? Всякие госконторы и прочая питушня типа ИП «Пупкин В.В.», при этом сам 1С можно хуесосить часами, каждый раз находя что-то новое, чтобы обосрать)

            Я считаю, что если человек думает что-то типа: «Я хочу заниматься автоматизацией бизнеса, а буду делать это именно на 1С, потому что эту технологию создали в раш-ке и ей пользуются маленькие ИП и госконторки!», должен страдать.
            Ответить
            • а большие конторки 1Сом не автоматизируются разве? не бывает завода на 3000 человек с 1С программистом в штате айти отдела?
              Ответить
              • А что такое завод?

                Старый совковый ангар с маразматиком-директором и станками 45-го года, где ит-отдел на табуретках сидит?

                Там да, на грани нищеты могут работать 3000 гречневых мужиков и 1С там скорее всего используют.

                А на высокотехнологичном заводе техники Huawei ссали и срали на 1С )

                Угадай где зарплата будет больше
                Ответить
                • перефразирую

                  верно ли утверждение, что в богатых компаниях 1С нет, и потому у программистов на 1С зарплата как у таксиста?
                  Ответить
                  • Нет, не верно́. Если рассматривать аналогию с таксистами, то в таксомоторной компании, которая развозит олигархов на лимузинах, зарплата будет больше, чем в ООО «Такси Скорость» где-то в провинции.

                    Но проблема в том, что компаний типа первой несколько штук на всю Россию, а вторых миллионы.

                    А лицензия на таксование из раш-ки, к сожалению, в других странах никому не нужна.
                    Ответить
      • >1С-девопсов еще притащите
        А что не так? винду с MS-SQL и 1С кто админит?
        Ответить
        • Настоящий, а не выдуманный специалист, Middle PHP Developer
          Ответить
  • Такой вопрос.

    Как сделать, чтобы в Apache директорию с сайтами (напр: /var/run/www/*) можно было писать от имени моего пользователя? А то постоянно раньше приходилось запускать консоль и всё остальное от имени www-data.
    Ответить
    • добавить пользователя в группу www-data, сделать группу владельцем папки (chgrp), и дать группе правда на запись (chmod g+w , ну и вероятно -R)
      Ответить
        • это тебе еще повезло, что я не доебался до фразы "запускать консоль от имени" 😉 не о винде же речь
          Ответить
          • Запустил консоль от имени рута тебе за щеку, проверь.
            Ответить
            • консоль в ядре, она не может быть от рута или не рута
              червона рута не шукай вечорами

              Я запустил телек по hdmi c хорошим кабелем, кстати. Сам телек выбрал себе режим 4К на частоте 60, и все равно подтупливал.

              Я поменял на более мелкий резолюшен, и стало ок.
              Попробовал включать черезстрочную (хотя и с прогрессивной вроде бы все нормально).
              Частоту уменьшал, но в итоге вернул на 60.

              Самый жирный фильмец там 1080, так что толку от 4К нет.

              В 10ке есть Desktop Resolution и Active Signal Resolution.
              Обычно они одинаковые, но ты можешь выбрать левое "логическое" ра3решение, и тогда у тебя просто рабочая область ресайзнится. Забавно
              Ответить
          • Вообще, я думал, там еще и апач будет 403 всё равно выдавать, даже если так как ты описал сделать, поэтому может в конфигах еще дело.
            Ответить
            • если опач работает от пользователя из той же групы, то с чего бы там 403? важно, чтобы и файл этой группе принадлежал
              Ответить
              • > с чего бы
                Можно обмазаться сеалинуксом и соснуть хуйцов, если не разобраться с контекстами, метками. При нормальных правах юзера, группы и т.д.
                Анскильные хитупи, когда догадываются в чем причина, просто психуют и вырубают в пермиссив после такого.
                Ответить
                • даю зуб, что у него нету селинукса там. Никто не умеет в селинукс!
                  Ответить
            • Я презираю "Apache". Рекомендую обратить взор в сторону "nginx".
              Ответить
                • "Apache" тормознутый и просто морально устарел. От него за версту разит девяностыми. Я за "nginx" - очень удобная настройка, дохуя полезных расширений.
                  Ответить
  • А почему 3oJIoTou_xyu уходит с програмрвня?
    Ответить
  • Лол, на хабре статья попалась:

    1) fork() при ошибке возвращает -1
    2) kill() при -1 убивает все процессы текущего юзера (ну или вообще все кроме init если root)

    Какие грабли для любителей забивать на ошибки )))
    Ответить
    • > какие первые 3 видео у вас в рекомендации

      Только няшки, только найткор.
      Ответить
    • у меня там те, которые я уже смотрел, а не рекомендации
      Ответить
            • что-то ты долго к "сфотографируйте обе стороны карточки" идешь
              Ответить
              • мы на гк как-то определили, что это всё равно бессмысленно
                Ответить
                • > это всё равно бессмысленно

                  Чому? Это пин твой нахуй никому не нужен. А с двумя сторонами вполне оплатить что-нибудь можно.
                  Ответить
                    • > речь про 3d secure, видимо

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

                    я процитирую эксперта (https://govnokod.ru/26809#comment560914)

                    gost 21.07.2020 03:07 # +2
                    Ну хуй знает, снять деньги она без пина не сможет, а в интернете двухфакторка нужна. Без двухфакторки только особо крупные конторы могут деньги снимать.
                    Плюс клиент сразу будет знать, что его карту спиздили, и сможет позвонить в банк.
                    Ответить
                    • «Сбербанк» позволяет до 1 тысячи рублей снять без двухфакторки.
                      Ответить
                        • Ну в общем-то он прав. Бабло тебе скорее всего вернут, раз через 3дс не авторизовано. Но всяко придётся поебаться с заменой карточки и т.п.
                          Ответить
                          • в таком случае, сфотографируйте, пожалуйста, обе стороны карточки
                            Ответить
                          • Именно поэтому я за ”gost”.
                            Ответить
                    • > особо крупные конторы могут деньги снимать

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

                  Она просто не пустит туда того, кому безразлична судьба Минас-Тирита
                  Ответить
                  • Ну да, Галя, ну конечно я читал. Там эта, Дура Гудрон, тьфу блядь, Дол Гулдур. И действие происходит в Уругвае. А-а, точно, урук-хаи!

                    Да ты чо, я целый фильм посмотрел в переводе ёблина, давай уже ебаться!
                    Ответить
            • > переворачивать кресты
              - это чтобы почувствовать себя членом одновременно двух субкультур? какая находчивость )))
              Ответить
                • Ламберсексуал (англ. Lumbersexual), или дровосексуал

                  твою мать

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

                      Не знаю кто такие рейфаги. На лурке нашел только это:

                      Катаморфизмы, параморфизмы, зигоморфизмы, хистоморфизмы, препроморфизмы, анаморфизмы, апоморфизмы, футуморфизмы, постпроморфизмы, хиломорфизмы, крономорфизмы, синкрономорфизмы, экзоморфизмы, метаморфизмы, динаморфизмы алгебра и коалгебра Калвина Элгота наконец. Успех хиккующих выблядков / просто быдлокодеров типа рейфага или сисярп/джава-девелоперов, которые работают в Люксофте не будет тебя волновать и уже через пол года ты будешь получать такие гранты, что любой профессор будет течь при одном упоминании списка твоих публикаций.
                      Ответить
                      • >> К апрелю 2012 года сменил 23 паспорта.

                        >> Вскоре Древарх Просветлённый решил выбирать имя в честь дней недели, а отчество — в честь месяца (к примеру, Среда Декабриевич), и тем самым менять паспорт каждый день. Однако работники ЗАГСа убедили его в невозможности подобных действий с технической точки зрения.
                        Ответить
                      • > Был трижды женат. От разных браков имеет 4 детей
                        - окда
                        Ответить
  • DEPRECATION WARNING: The system version of Tk is deprecated and may be removed in a future release. Please don't rely on it. Set TK_SILENCE_DEPRECATION=1 to suppress this warning.

    я считаю, это повод возмутиться
    Ответить
    • @MAKAKA

      а как там в Tcl/Tk нормально сделать exec внешней тулзы, чтобы оно вывод перехватило и не сходило от него с ума?
      Ответить
      • exec же.
        set hostName [exec hostname]
        puts "Your host name"
        puts $hostName


        В квадратных скобочках выполняется код, потом его результат подставляется в выражение set
        Ответить
        • У меня программа из exec пишет в stdout; в итоге всё выполняется, но tcl вывод команды игнорит и при этом в конце выдаёт ошибку (invalid command)

          upd неправильно прочитал, щас попробую, спасибо
          Ответить
          • Собаки в подворотнях лаяли,
            И с упоением сосали мы
            Красивый, необрезанный хуец
            В тёмном закутке.
            Ответить
          • если что -- покажы код

            но вообще по гомоиконно-фортовым языкам это у нас нидлесс
            Ответить
            • Показал тебе свой залупленный член; у тебя встал? Только не ври, что нет...
              Ответить
            • set result "command"
              # Достаю значения из таблицы, например
              foreach value [.t.tree children {}] { 
                  append result " --option $value"
              }
              
              [exec {*}[split $result " "] ]
              Ответить
              • Кто-то из моих пассивов дотнулся влажными ручками до минусатора.
                Пойти свой что ли напейсать?..
                Ответить
              • Не очень знаю, что у тебя в tree. Это из tk?

                Ну вот тебе пример, и он работает.
                Извини, я выпилил пирдолинг со строкой
                set result "host"
                foreach value "4 v" {
                        lappend result -$value
                }
                lappend result ya.ru
                puts "Will execute $result"
                set result [exec {*}$result]
                puts "So, I got"
                puts $result
                Ответить
                • в tree просто строки (tree это вообще ttk::treeview)

                  о, круто, с lappend и сохранением результата помогло, спасибо
                  Ответить
                  • а, я понял, в чем былатвоя проблема

                    это неправильно:
                    [exec {*}[split $result " "] ]


                    ты получил аутпук exec и сразу его выполнил

                    то есть ты как бы еvalнул аутпут своей команды, и
                    >ходило от него с ума
                    Ответить
                      • вот что происходит
                        Например [exec ls] заменяется на "file1.txt file2.txt"
                        Далее, они попадают на верхний уровень
                        file1.txt file2.txt
                        и падают, потому что команды file1.txt нет

                        вставь "puts" спереди

                        в таком случае ты получишь как бы

                        puts "file1.txt file2.txt"
                        и он выведется

                        Я же вставил туда set varName, и присвоил это переменной
                        Ответить
    • а не дефекате-плюсплюс ли ты часом?
      Кстати, у него днюха в июле. я его хакнулд.
      Ответить
    • «Если честно, люблю ваш сайт, захожу на него практически каждый день как например на айтихэппенс или баш(да, да, уже не торт). Желаю успехов в развитии.
      P.S Куда делся руби? Там было как помню 3-4 говнокода»
      Ответить
    • релокейтиться в РБ, ну какой же дебил блядь
      Ответить
        • потому что надо было сразу в камерун, очевидно

          еще более нищенская страна с еще более охуевшей властью
          Ответить
          • Так это же заебись

            Ты в ПВТ получаешь 4К бакинских, а все кругом получают 200. И ты как сыр в мясе катаешься
            Ответить
            • А потом тебя грабят негры, потому что на охрану то зажмотил.
              Ответить
              • В Камеруне возможно, но в Минске не грабят, во всяком случае не больше, чем в России.

                в том-то и фишка
                Ответить
                  • Средний класс самый уязвимый. Уже есть, что терять, но на телохранителей ещё не хватает
                    Ответить
                  • Если начнешь ездить на машине за 8 миллионов российских рублей, то да: может и жопа стрястись
                    Ответить
      • > аз компания в лице технического директора позволяет себе такое поведение, то мне ничего не мешает трактовать это инцидент как… ммм… дайте-ка посмотрю на свой банковский счёт… Точно! Кидалово на бабло.

        ебический кретин

        кидалово на бабло - это кто-то присваивает себе твои финансы
        Ответить
        • > То есть меня, неплохого и опытного инженера, который в силу обстоятельств пошёл навстречу компании — облили говном и поставили в крайне неудобную ситуацию.

          > Жаль что опубликовать эту информацию раньше у меня не дошли руки. Просто они дрожали. И ещё глаз дёргался. Только сейчас я более-менее справился с тревожным расстройством и коробкой неврозов, которые мне достались всего после двух недель сотрудничества с героями статьи. Даже среди ночи уже не просыпаюсь. Почти. Ну что, вы всё ещё выгораете?

          пиздец неженка обиделась
          Ответить
          • >человек, который (почему-то) претендует на звание тимлида
            >Но издалека сотрудники TargetProcess не создавали впечатление безответственных мудаков
            >в местечковый Theranos
            >Видимо, мне просто не повезло выбрать самых никчёмных представителей индустрии для работы

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


              Тут у меня, наверное, нет комментариев. Видимо вот такой он, градус дискуссии профессионалов высокого класса. И ничего с этим не поделаешь.


              болтать не о коде запрещено.
              осуждаем.
              Ответить
              • опять эти мясные мешки со своей хуйней
                нет чтобы как на говнокоде о coq, байтоебстве и петухах разговаривать
                Ответить
              • > Что трудовой договор не подразумевает расторжения ранее определённого срока (так же именуемого испытательным);

                да сука, абсолютно невозможно
                Ответить
                • > Все проще — автор советовался с Королем Разработки. Отсюда характерное «королевское» название статьи и пара подобных оборотов в статье

                  ну вы поняли что за Король
                  Ответить
                  • Мой рецепт от такой лажи простой — надо обговаривать процедуру онбординга на собеседовании. Прежде всего взаимодействие в коллективе и техсторону во время онбординга. Будет ли наставник, кого спрашивать? Ответ, типа, есть документация, но она устарела еще 10 лет тому назад, но там можно найти что-то полезное сразу отметается. Это сразу даст понять кривому нанимателю, что в случае лажи вы быстро можете стать источником крупного предметного скандала и быстро поймете (по обнаруженному обману), что работодатель создал проблему. Хорошо собеседование записать на диктофон. Нормальному же нанимателю вы понравитесь еще больше расспрашивая о его планах на вас.

                    блядь, да они там все наглухо ебанутые, почище дам с ключами в лифтах
                    Ответить
                    • Это местный долбоёб с «Хабра», который рагулярно набрасывает хомячью пафосные холиварные статейки, под которыми это самое хабрахомячьё самозабвенно срётся (не забывая Королю отсыпать плюсики). Филип чё-то там, который ещё обсуждаемого здесь долбоёба-релокатора на «Хабр» пригласил.
                      Ответить
            • у чувака бомбит, это очевидно
              и крендель он странный

              но и компания судя по всему ебучий случай

              чот хабр уже скатился до ebanoe.it
              Ответить
              • хуёвые программисты работают в хуёвых компаниях, и работать там им хуёво

                Так и должно быть
                Ответить
          • ага. эта истеричка без локуса контроля всё-таки фееричней, не понимает даже что пидоры пидорами, а приезжать его никто не заставлял.
            Ответить
          • Да, плохо работать в парашной компании, анон
            По возможности избегай этого
            Ответить
    • Ебать, прекрасно всё! От релокейта из РФ в РБ и до долбоёба, который переехал в другую, сука, страну не просто без заначки на чёрный день/обратный билет (как вообще программист с «10+ годами индустриального опыта» может не иметь хоть каких-то резервных средств?!), но и с ёбанными долгами!
      Пиздец, что у таких людей в голове творится? Они вообще не умеют думать, как и на что будут жить через неделю?
      А на всё обоснованное недоумение по поводу его умственных способностей этот поц там в комментариях кукарекает про «оффер», охуеть. Будто «оффер» — это такой магический артефакт, который владельцу гарантирует счастливую жизнь на тридцать лет вперёд, благодаря чему можно без гроша в кармане и каких-либо планов на случай форс-мажоров (да блядь, кризис ебанул, революция вспыхнула, вирус прилетел — мало что ли в мире бывает ситуаций, когда ты можешь остаться без работы?) отправляться в увлекательное путешествие за 600 километров.
      Я хуею.
      Ответить
      • 600 километров — это примерно расстояние от Москвы до Минска. Столько он проехал на машине. А перед этим он ещё проделал порядка 2800 километров от Новосибирска до Москвы.
        Ответить
        • Пиздец.

          Я, кажется, понимаю, почему у него неврозы и «руки тряслись»: он просто регулярно голодал. Ведь чтобы поесть — это надо сначала купить/заказать еду, то есть что-то распланировать хотя бы на час вперёд. Очевидно, мозг этого человека-золотой рыбки на такое сложное планирование не способен, вот и имеем такую печальную ситуацию.
          Ответить
    • Поэтому я в начале каждого скрипта выставляю волшебные строки:
      error_reporting(0);
      ini_set('display_errors', '0');
      И никакого багра (((
      Ответить
    • А есть pg_real_fetch_assoc?
      Нет?

      Постгря соснсула у MySQL
      Ответить
    • Вспоминай про эту Анну каждый раз, когда будешь брать очередную халтуру, чтобы работать 68 часов в неделю
      Ответить
  • https://habr.com/ru/post/522816/

    «Я точно не помню, но вроде я где-то читал, что ООП вправляет мозги. Что это позволяет писать грамотный красивый код. Возможно так. Но я почти в ООП не программирую и поэтому может это я так много кода пишу, а настоящий программист сделает более лаконичный код. Но вот хочу показать пример. Вот это интерфейс java...»
    Ответить
    • ООП абстрагирует от необходимости представлять себе внутреннее устройство языка. А если представить (не дай бог!) то чел сразу поймёт, что на двух хуях усидеть не удастся. Либо ты сидишь на дилдо xxxl и пишешь "компактный код", пока из твоего ануса сочится кровь и гной, либо сидишь на тощем фаллосе небольшого размера, правда, с вибрацией и пишешь человекопонятный код.

      Выбор как всегда за вами 🙂
      Ответить
  • https://habr.com/post/522816/
    Однозначно пост года на «Хабре»!
    > Структурное против ООП программирование
    Вот это вот — ООП программирование:
    import java.net.*;
    import java.io.*;
    
    public class Main {
    	public static void main ( String[] args ) {
    		URL url = null;
    		try {
    			url = new URL ( "https://www.google.com" );
    		} catch ( MalformedURLException e ) {
    			return;
    		}
    
    		String protocol = url.getProtocol ( );
    
    		IProtocol prot = null;
    
    		switch ( protocol ) {
    			case "http": prot = new Http ( ); break;
    			case "https": prot = new Https ( ); break;
    			default: return;
    		}
    
    		prot.connect ( url );
    
    		URLConnection conn = null;
    		try {
    			conn = prot.getConnection ( );
    		} catch ( IOException e ) {
    			return;
    		}
    
    		conn.setDoOutput ( true );
    
    	}
    }

    А вот это — структурное:
    #include <stdio.h>
    #include "conn.h"
    
    struct conn conn;
    
    #define HTTP_PROTOCOL       1
    #define HTTPS_PROTOCOL      2
    #define ERROR_PROTOCOL     -1
    
    static int get_protocol ( void ) {
    	return HTTP_PROTOCOL;
    }
    
    int main ( int argc, char **argv ) {
    
    	switch ( get_protocol ( ) ) {
    		case HTTP_PROTOCOL: init_http ( &conn ); break;
    		case HTTPS_PROTOCOL: init_https ( &conn ); break;
    		case ERROR_PROTOCOL: return -1;
    	}
    
    	conn.connect ( "www.google.com" );
    	char *data = conn.read ( );
    }

    Не путайте, а то могут и напутать!
    Ответить
    • @conn.connect ( "www.google.com" );

      Структурное, говоришь?..
      Ответить
    • пиздец, дебил реально думает, что первый пример это ооп? или что структурное программирование это где struct?
      Ответить
      • Да если б он просто думал — хуй бы с ним, мало ли на свете неразбирающихся людей?
        Но он жеж, питух эдакий, целую статью обучающую с этой ахинеей насрал!

        Кстати, оцени ясность мыслей и чёткость их выражения:
        >>> В этом случае будет больше кода и если сделать это таким способом, который приведу я, то вид кода будет нормальный. Но этот способ конечно же придумал не я, я его сам вычитал из книги когда-то. И так https и http. Чтобы это сделать, нужно создать интерфейс. И к этому интерфейсу присваивать нужный класс, в зависимости от типа протокола. Я точно не помню, но вроде я где-то читал, что ООП вправляет мозги. Что это позволяет писать грамотный красивый код. Возможно так. Но я почти в ООП не программирую и поэтому может это я так много кода пишу, а настоящий программист сделает более лаконичный код. Но вот хочу показать пример. Вот это интерфейс java.
        >>> Если статья понравиться, то я буду писать продолжение в будущем. Пока я ещё наверное плохо знаю ООП, чтобы написать больше примеров, но думаю, что если не заброшу ООП, то начинающим читателям будет интересно посмотреть отличия при написании в структурном и ООП-программировании.
        Ответить
          • Кстати, это ж не единственная его нетленка! Вот ещё знатная психоза:
            И вот пока я делал это у меня появилась идея, возможно ли добавлять
            код в середину секции кода? Оказывается можно, но во всех ли случаях?
            Пока что чтобы добавить код я использую уже подготовленные машинные
            коды. Если потом смогу, то сделаю транслятор ассемблера в машинных код,
            чтобы добавлять код было удобней. В моём случае надо указать смещение
            в секции кода и байты скопируются в нужное место. Также была проблема
            определённая: адресация в памяти. Я добавил в команде lea код, который
            сохраняет в структуру нужные данные, и если ты вставляешь новые операторы
            в секцию кода, то все смещения выстраиваются так, что указывают на данные
            в новых смещениях. Ну это не очень сложно, если вставил код, то секция кода
            увеличилась на столько же байт и все остальные секции после секции кода
            будут содержать уже новые смещения. Сделал так, чтобы были различия в том,
            куда ты вставляешь код, все смещения работают правильно. Потом появилась
            проблема в том что в адресации такой
            
            mov eax, [eax + eax + 0x100]
            
            Дело в том, что в такой адресации может быть ebp и указывать на стек, а не
            в другую секцию. Я решил сделать так, что если адрес указывает на секцию
            данных, то учитывать смещения при вставке кода, если же указывает на стек,
            то есть не на адрес в секции данных, то не учитывать смещения.

            https://habr.com/post/477590/
            Ответить
            • Задача интересная, но нетривиальная. Без трассировки или без исходников программы невозможно понять, куда будут вести указатели и нужно ли их фиксить. Инструкция lea часто используется вообще для арифметических операций над произвольными числами, а не для указателей.
              Ответить
            • Идея конечно интересная... Странно, что все генерят код в новые блоки памяти, а до вставки функций посреди кода никто не додумался.
              Ответить
              • В "PHP" не надо думать ни о каких блоках памяти. Поэтому я за "PHP".
                Ответить
              • Когда линкуешь экзешник из объектных файлов, у тебя код вставляется «в середину», функции разъезжаются, и надо фиксить адреса. Но в объектных файлах каждый указатель помечен как фиксап (кроме разве что rip-адресов в пределах функции или абсолютных адресов), и линкер точно знает, что и как нужно пофиксить.

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

                Кстати, у «Борланда» был инкрементальный линкер (ilink32). Можно было слинковать часть модулей, а потом добавлять по одному. Он создавал в частично слинкованном экзешнике специальную секцию, в которой хранил список неисправленных фиксапов?
                Ответить
        • А вдруг это сознательная диверсия, чтобы уменьшить конкуренцию?
          Ответить
      • Те, кто может купить квартиры в элитных ЖК, живут где-нибудь в таунхаусах за городом. Квартиры там покупают, чтобы сдавать и иметь пассивный доход. Так что по факту жить в новых элитных ЖК может кто угодно.

        Допустим, аренда за 100 тысяч рублей в месяц. Заселятся 100 вьетнамцев и каждый будет платить по тысяче.
        Ответить
        • а потом соседи из соседнего подъезда будут жаловаться на запах и тараканов
          Ответить
          • Элитные соседи
            Элитный запах
            Элитные тараканы

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

              «смарт-квартиры», конурки размером меньше, чем минимальная площадь жилых помещений, и жилыми помещениями соответственно не являющиеся; как производной от этого невозможность заключить адекватные договоры на поставку коммунальных услуг

              превращение помещений технического этажа в квартиры с прорубанием всех «нужных» дверей и прочих отверстий

              про самозахваты я молчу

              многоквартирники это в принципе зло, человейники это филиал чистилища, а иногда и ада
              Ответить
        • Зачем ста вьетнамцам снимать квартиру за 100, если можно за 10?
          Ответить
          • причем прямо на рынке, чтобы далеко не ездить
            Ответить
          • В столице за 10 уже нельзя снять даже однушку в хрущёвке.
            Ответить
  • Эх, что-то мой пк-гробик совсем окирпичился(

    не может стартануть, вентиляторы запускаются и тут же останавливаются
    Ответить
    • Давно включал последний раз? Батарейку замени, у меня такая же проблема была недавно со старым.
      Ответить
              • нет. я писал про пк-гробик

                думаю, обойдётся в ~150 гривен, если такие продаются ещё, конечно
                Ответить
                • Если литиевая таблетка, то у нас такие продаются в «Фикс-прайсе» вообще за копейки.
                  Ответить
                  • угу, литиевая на 3В

                    я думаю, что у чуваков, которые ремонтирую часы, стопудово есть

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

                  А куда они денутся то?
                  Ответить
                  • а вдруг там какой стандарт поменялся, я не сильно вообще по этим делам

                    задумался, что вообще в мою материнку встанет из более-менее нового
                    Ответить
                    • Наверняка у тебя есть подружки, которым ты можешь позвонить и попросить переустановить винду.
                      Ответить
                    • Видюха и SATA SSD точно встанут. M.2 SSD возможно тоже, если материнка не совсем древняя. Всё остальное - только из музея.

                      З.Ы. Хотя на видюху может питания не хватить, да и проц может "не раскрыть её потенциал", как любят писать во всяких обзорах.
                      Ответить
                        • > Supports 3rd and 2nd Generation Intel® Core™ i7 / i5 / i3
                          Ну это печально, конечно.

                          UPD: Это процессоры 2011-2012 годов, если что.
                          Ответить
                          • так собсно у меня пека как раз в 2012 году собран

                            но в целом, если в новые ААА не играться, то ничего там вроде менять и не нужно, кроме hdd на ssd
                            Ответить