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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
IT Оффтоп #53


#1: https://govnokod.ru/18142 https://govnokod.xyz/_18142
#2: https://govnokod.ru/18378 https://govnokod.xyz/_18378
#3: https://govnokod.ru/19667 https://govnokod.xyz/_19667
#4: https://govnokod.ru/21160 https://govnokod.xyz/_21160
#5: https://govnokod.ru/21772 https://govnokod.xyz/_21772
#6: (vanished) https://govnokod.xyz/_24063
#7: https://govnokod.ru/24538 https://govnokod.xyz/_24538
#8: (vanished) https://govnokod.xyz/_24815
#9: https://govnokod.ru/24867 https://govnokod.xyz/_24867
#10: https://govnokod.ru/25328 https://govnokod.xyz/_25328	
#11: (vanished) https://govnokod.xyz/_25436
#12: (vanished) https://govnokod.xyz/_25471
#13: (vanished) https://govnokod.xyz/_25590
#14: https://govnokod.ru/25684 https://govnokod.xyz/_25684
#15: https://govnokod.ru/25694 https://govnokod.xyz/_25694
#16: https://govnokod.ru/25725 https://govnokod.xyz/_25725
#17: https://govnokod.ru/25731 https://govnokod.xyz/_25731
#18: https://govnokod.ru/25762 https://govnokod.xyz/_25762
#19: https://govnokod.ru/25767 https://govnokod.xyz/_25767
#20: https://govnokod.ru/25776 https://govnokod.xyz/_25776
#21: https://govnokod.ru/25798 https://govnokod.xyz/_25798
#22: https://govnokod.ru/25811 https://govnokod.xyz/_25811
#23: https://govnokod.ru/25863 https://govnokod.xyz/_25863
#24: https://govnokod.ru/25941 https://govnokod.xyz/_25941

#25: https://govnokod.ru/26026 https://govnokod.xyz/_26026
#26: https://govnokod.ru/26050 https://govnokod.xyz/_26050
#27: https://govnokod.ru/26340 https://govnokod.xyz/_26340
#28: https://govnokod.ru/26372 https://govnokod.xyz/_26372
#29: https://govnokod.ru/26385 https://govnokod.xyz/_26385
#30: https://govnokod.ru/26413 https://govnokod.xyz/_26413
#31: https://govnokod.ru/26423 https://govnokod.xyz/_26423
#32: https://govnokod.ru/26440 https://govnokod.xyz/_26440
#33: https://govnokod.ru/26449 https://govnokod.xyz/_26449
#34: https://govnokod.ru/26456 https://govnokod.xyz/_26456
#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

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

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

    • Когда в пятницу будет среда,
      Когда вырастут розы повсюду
      Голубые, как яйца дрозда.
      Ответить
      • Хорошо меж подводных стеблей.
        Бледный свет. Тишина. Глубина.
        Мы заметим лишь тень кораблей.
        И до нас не доходит волна.

        Неподвижные стебли глядят,
        Неподвижные стебли растут.
        Как спокоен зеленый их взгляд,
        Как они бестревожно цветут.

        Безглагольно глубокое дно.
        Без шуршанья морская трава.
        Мы любили, когда-то, давно,
        Мы забыли земные слова.

        Самоцветные камни. Песок.
        Молчаливые призраки рыб.
        Мир страстей и страданий далек.
        Хорошо, что я в море погиб.
        Ответить
        • Ура, Всратые песенки!

          Ровный и тихий океан лежит
          Pequod захвачен в затишье
          Нет слабых ветров в парусах
          Обогрев соленым ковром сверху

          Изнуренная, выживающая команда
          Гигантские валы несут могущественную белизну
          Крики от перспективы: кит впереди!
          Я хочу этого кита, я хочу, чтобы он умер!

          Истерия на верхней палубе
          Бешеное пламя в глазах капитана Ахаба
          Суетиться, тянуть и тянуть
          Паника влияет на кита

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

          Портсайд полон гнева
          Одержимый нечеловеческим гневом
          Сердце смело качает кровь
          Сквозь марионетку ярости

          Лицо Ахаба становится красным
          Я хочу этого кита, я хочу, чтобы он умер
          Из бездны вырывается плавник
          Гордо волнистая плоть

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

      К сожалению, разработка затягивается, как по причине лени, так и по причине некоторых проблем с физическим отделом, поэтому как минимум следующий перекат IT-оффтопа (53 -> 54) всё ещё придётся делать Иньо.
      Ответить
    • На данный момент собраны индексы следующих оффтопов:
      IT Оффтоп
      Именно поэтому я за «PHP»
      Пиздец-оффтоп
      Политота
      Просто оффтоп
      Тестовый оффтоп
      Бесконечный оффтоп имени Борманда
      Электрика / электроника

      Сам индекс выглядит так: https://pastebin.com/LHGmS7Rq.

      Инженерный отдел будет благодарен за наводки на пропущенные оффтопы и их индексы.
      Ответить
      • >Электрика / электроника

        Это где Сёма покупал на алиэкспрессе Горячий нога рука лампа за $0.99?
        Ответить
  • @3.14159265

    >> Хочешь браузер? Ну вот тебе хромиум/хром или полумёртвый фф.
    > Это на самом деле неплохой выбор.
    - в сытые времена было 4 полноценных движка. Казалось бы, обновляйте алгоритмы шифрования и всё будет путём.

    > Кругом тормозные говносайты с кучей перделок, рекламы, трекеров, майнеров и просто питушни.
    - noscript + adblocker + запрет сторонних куков = жизнь более-менее
    Ответить
    • Не всё можно убрать адблоком. Сейчас появились сайты, у которых тормоза вызывает основной скрипт, который адблоком не уберёшь. И основного текста в HTML на некоторых сайтах нет, текст генерируется жопоскриптом.
      Ответить
      • > Сейчас появились сайты, у которых тормоза вызывает основной скрипт, который адблоком не уберёшь. И основного текста в HTML на некоторых сайтах нет, текст генерируется жопоскриптом.
        Казалось бы, причём здесь «NGK»…

        У инженерного отдела на эту тему были идеи, но ещё раз дублировать шаблоны для серверной генерации слишком лень.
        Ответить
          • У «AngularJS», к сожалению, свой собственный шаблонизатор, плюс для noscript-версии сам шаблон нужно незначительно менять. Конечно, можно сделать шаблонный шаблон и компилировать его… Но тогда уж легче сразу перевести на «TypeScript».
            Ответить
            • напишу вам джавапплет к ГК, верну 1998-й**

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

                  Так что даже проверить не получица
                  Ответить
                  • И «Сервелат», поди, тоже проверить не получится?
                    Ответить
                    • Не понял тебя

                      Сервелат работает на сервере, какая разница ему что у тебя в браузере?
                      Ответить
                        • А) Так давно уже закопали
                          Вы еще плоть бы вспо.. .хотя погодите-ка..:)


                          Еще была ЖабаЭфИкс. Она там же почила, где и остальное
                          Ответить
                          • А помните «Shockwave Director»?

                            «wvxvw» его вспоминал.
                            Ответить
                            • wvxvw вообще был знатоком плоти, когда он еще был мокрым медиа, а не хаткой.

                              Я еще помню macromedia freehand, какой блядь я старый(
                              Ответить
            • Зачем? Зачем?

              ngk супершустрый по меркам нынешнего вёба.

              html с сервера, это 90-00е.
              Ответить
              • Чойто 90-е?
                Вон, вся джанга из коробки такая, например:)

                SPA, кмк, нужно только если тебе нужна суперинтерактивность, а нафига она какому-нить новосному сайту, например?
                Ответить
                • >вся джанга из коробки такая, например:)

                  Джанга не нужна, то же php-smarty говнидло, только питушиное.
                  Уж лучше «JSP» или «ASP.net».

                  >а нафига она какому-нить новосному сайту, например?
                  Обновлять актуальные новости.
                  Ответить
                  • real-time communication в общем к интерактивности ортогонально и spa в обязательном порядке не требует.
                    Ответить
                    • Да.
                      Однако проще и эстетически приятнее гонять по сетке jsonы, а не говняшки из htmlя который нужно перерисовать.
                      Ответить
                      • html всё равно надо перерисовывать, собсно, для этого нам природа дала жабаскрипт.

                        Как пример: f1news.ru подтягивает обновление хедлайнов новостей по таймауту и думаю, что делает это при помощи json, но он вообще ни разу не spa.
                        Ответить
                        • Если он тянет json, то шаблонизация (трансформация данных в html) идёт на клиенте.
                          За исключением случая когда в json завёрнут кусочек htmlя. Видел я и такие извраты.
                          Ответить
                  • >Джанга не нужна, то же php-smarty говнидло
                    Вообще ни разу нет.
                    Это примерно как JavaEE назвать "JSP".

                    >Уж лучше «JSP» или «ASP.net».
                    И как там с SPA?

                    >Обновлять актуальные новости.
                    Если у тебя новости выходят раз в 20 минут, то да.
                    Ответить
                    • > И как там с SPA?
                      - а что spa? Мне кажется, что я под spa понимаю что-то не то, что вы с Пи
                      Ответить
                        • А как веб-фреймворк связан с браузерным SPA за пределами шаблонов?
                          Ответить
                          • Фреймворк может быть сделан для SPA, например GWT.
                            А может быть сделан для серверного рендеринга.

                            JSP это шаблонизатор для серверного рендеринга.
                            В ASP.NET возможно что-то есть для SPA, но по-умолчанию там WebForms, а это тоже серверный рендеринг.

                            Я просто подумал, что ПИ противопоставляет их Джанге в плане SPA.
                            А он нет
                            Ответить
                            • Я всё равно не отстреливаю твою классификацию.

                              Вот у меня есть SPA. Он может обновляться по user initiated events (пользователь нажал кнопочку, щёлкнул галочку и т.п.), может по server initiated events (обновление по сокетам). Разница только в том, по какому протоколу тебе прилетают данные. В первом случае это HTTP на пару с REST, скорее всего, во втором WS, а там голый JSON, STOMP, you name it.

                              Ты можешь нарендерить вебформу, шаблон которой spa. И как этому поможет или помешает твой бэкенд?
                              Ответить
                              • >(пользователь нажал кнопочку, щёлкнул галочку и т.п.
                                А что дальше произошло?

                                Страница перезагрузилась, и пользователю вернулся сгенернный на сервере HTML?

                                Или она послала запрос по сокету, и получила JSON, и на основе его перерисовала свой UI?
                                Ответить
                                • Сделала REST-запрос, получила JSON. Ну?

                                  А какая разница твоему SPA, что на другом конце провода: gwt, джанга или чунга-чанга?
                                  Ответить
                                  • Если сделала REST запрос (по AJAX) то это SPA.

                                    gwt это библиотека для генерации JS в том числе, так что GWT Будет не только на той стороне, но и на этой.


                                    JSP это шаблонизатор для генерации HTML.
                                    Вряд-ли им будут генерить JSON для твоей стрианицы, хотя могут, конечно
                                    Ответить
                                    • SPA это когда у тебя MVC реализовано на стороне браузерного JavaScript
                                      Ответить
                                      • SPA это когда ты не перезагружаешь страницу.
                                        Ты ее загрузил, и сидишь в ней.
                                        Ответить
                                        • Ну, да. Имеет стейт, сама управляет роутингом.

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

                                            JSP это шаблонизатор.
                                            JSP не имеет смысла использовать с SPA.

                                            ASP.NET WebForms это фреймворк, который диктутет тебе как должен работать сайт. Он говорит, что формочки должны рендериться на сервере.

                                            Ты можешь конечно связать его с SPA, но это будет криво, неудобно, и каша из топора.

                                            GWT это фреймворк, который работает и на беке, и на фронте. Он предлагает тебе сделать SPA, и помогает тебе в этом. Он генерит JS из Java, позволяя тебе писать логику один раз, и запускать ее и на фронте, и на беке.


                                            Django не содержит никаких средств, помогающих тебе сделать SPA (разве что ты можешь поставить стороннюю либу для REST).
                                            Потому SPA тебе придется делать вручную.


                                            Разные фреймворки и технологии диктуют разные архитектуры.
                                            Ответить
                                            • ASP.NET WebForms у тебя может вернуть одну форму, которая будет spa, лол. Но я согласен, это удаление гланд через жабры.

                                              Но я тоже скорее против монолита и за сайт как пользователя API. Тогда есть шанс, что бэкендщики сделают нормальный API, потому что им же самим и пользоваться, а не сварганят для клиентов шопопало в духе "смотрите в постман".
                                              Ответить
                                              • >ASP.NET WebForms у тебя может вернуть одну форму,
                                                Тогда зачем тебе WebForms?

                                                События форм нужно обрабаывать на сервере, на C#. Именно в этом же смысл.

                                                >Но я тоже скорее против монолита и за сайт как пользователя API.

                                                Если тебе нужен REST API для сторонних клиентов, то да.

                                                Единственный способ сделать нормальный API, это сразу отделить клиента.

                                                Если же сайт делают монолитом, а потом "сверху допиливают API", то всегда получается говно, и единственным API остается браузер под управлением селениума
                                                Ответить
                    • >И как там с SPA?

                      Я не говорю что «JSP» или «ASP.net» нужны. Серверная шаблонизация в html — это 00е.

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

                        >скриптухи

                        Тогда правильнее наверное сказать "java и C# лучше питона". Тут я соглашусь.

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

                        А smarty это ненужный шаблонизатор для ненужного шаблонизатора, притворяющегося ненужным языком программирования
                        Ответить
                        • >Чем они хуже spa? Тем, что грузятся быстрее, или тем, что от браузера не зависят почти?

                          Монолитностью. Невозможностью кешировать на клиенте небольшие куски, необходимостью высирать кучи перепитушни в виде htmlя.

                          >что грузятся быстрее
                          Очень спорное утверждение.

                          Во всём свои плюсы и минусы.

                          >что от браузера не зависят почти
                          Это плюс. Хотя часто можно видеть как монолитные приложухи тянут за собой паровоз тяжеленных скриптов.
                          Ответить
                          • >Невозможностью кешировать на клиенте небольшие куски
                            У нас перманентный кеш для статики (картинок, css и пр), но часть UI действительно не закешировать. Впрочем, пока что это не является боттлнеком.

                            >Очень спорное утверждение.
                            ну, по сравнению с true SPA вроде gmail.com -- ОЧЕНЬ быстро.
                            Ответить
                            • >У нас есть парочка сайтов вообще без клиентского говна, и всё работает, и функцию свою выполняет. Чем они хуже spa?

                              При клиентской шаблонизации можно закешировать статику (html/js/css) и гонять по сетке только голые данные, в компактном json-виде. Или даже в бинарнике (вёб-сокеты).

                              Причём можно закешировать на клиенте и некоторые микросервисы.

                              Так что клиентская шаблонизация на самом деле будет быстрее и экономнее по траффику тонн htmlя.


                              > true SPA вроде gmail.com -- ОЧЕНЬ быстро.
                              Нарочито выбран пример отборного Goвна. И на этом конкретном случае доказывается неудачность всего подхода.
                              Ответить
                              • Только чтобы всё это работало, сначала придется загрузить мегабайт джаваскрипта. Для сайта, на который ты не ходишь каждый день, это немного оверкилл кмк.


                                А можно пойти дальше, и сделать десктопное приложение на крестах с UI на MFC и протобуф.
                                Скорость будет офигенная.


                                SPA мы тоже как-то делали, на упомянутом выше GWT как раз, но там питух должен был сидеть в нем целый рабочий день, так что там это имело смысл
                                Ответить
                                • >сначала придется загрузить мегабайт джаваскрипта
                                  Раз скачал и больше не надо.

                                  А html нужно каждый раз грузить.

                                  >мегабайт джаваскрипта
                                  Ну враньё же.
                                  Тот же ngk грузит 4 скрипта:
                                  angular.min.js   58.74 KB	172.11Kb
                                  ngk.js	              7.09 KB	31.85 KB
                                  angular-route.min.js  3.28 KB	5.59 KB
                                  socket.io.slim.js     15.91 KB	52.22 KB


                                  Суммарно это меньше 100КB зожатого траффика.
                                  И около 250KB без зожатия.
                                  Ответить
                                  • >Раз скачал и больше не надо.
                                    Надо, как только ты поменял в верстке хоть один байт.

                                    >ngk грузит 4 скрипта:
                                    ngk еще очень простой сайт, и то у нас набижало 250К кода.
                                    А сколько времени оно будет работать еще.

                                    Сравни HTML и SPA версию gmail

                                    Алсо, тебе еще надо хендлить правильную работу с URL, которая в server-side из коробки.

                                    И правую кнопку мышки еще. Сделай "open in new tab" в spa
                                    Ответить
                                    • >Надо, как только ты поменял в верстке хоть один байт.

                                      Один раз перекачать небольшой шаблончик?

                                      Или на каждый клик, на каждом рефреше страницы скачивать заново эту самую вёрстку полностью? Раз-за-разом. Одно и то же.
                                      Ответить
                                      • И шаблончик, и ngk.js, который ты можешь править и либы и пр. А в server-side у тебя только шаблончик

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

                                          >ngk.js 7.09 KB 31.85 KB

                                          СЕМЬ жалких килобайт. А htmlка NGK c минимумом комментов в ней весит уже 55 килобайт.
                                          Ответить
                                    • > Алсо, тебе еще надо хендлить правильную работу с URL, которая в server-side из коробки.
                                      Ну, кстати, в «AngularJS» она тоже искаропки. Физически ты всегда находишься на / (ну или где там твоё приложение висит), а путь внутри приложения определяется через хэш (который после «#»). Так можно просто делать обычные кликабельные ссылки на нужные пути (https://gcode.space/#!/settings) и течь.
                                      Ответить
                                      • Это хорошо

                                        Вообще https://gcode.space это сайт, в котором генерятся по 1000 сообщений в день, полезность SPA для него очевидна даже мне
                                        Ответить
                                    • Во всех более-менее серьёзных js-фреймворках есть роутинг, если не из коробки, то в виде расширения
                                      Ответить
                                      • А вот в gmail нет

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

                                            В любом приложении без JSа я могу скопировать любой урл (ну полученный без POST) и открыть его в любом окне.

                                            Почему я не могу это в gmail сделать?
                                            Ответить
                                            • В том, что твой spa как бы ничего не знает ни про какой браузер.

                                              Роуты spa это там /user/profile, /user/login, это НЕ http routes. Как ты сюда хочешь вместить open in new tab?
                                              Ответить
                                              • Иными словами, "open in new tab" в общем случае в SPA не работает, верно?
                                                Ответить
                                                • Да.

                                                  Я не говорю, что это user friendly, но в целом это даже где-то логично.

                                                  Если у тебя нет ссылок в html, то что ты будешь открывать в табе?
                                                  Ответить
                                                  • Ну вот видите, свои минусы имеются.

                                                    Так что говорить, что обычный тупой сайт без JS это "говно из 90-х и не нужно" -- это несколько через чур (блядь, как это слово пишется?)
                                                    Ответить
                                                    • Так это зависит от.

                                                      Посмотри на ngk. Это spa, при этом всё, что тебе нужно, ты можешь открыть в новой вкладке.

                                                      Короч, еби своих сайтостроителей, шоб делали тебе нормально
                                                      Ответить
                                                      • Было бы круто подружить реакт с бекендовым фреймворком, чтобы был такой фуллстек, который описывал бы и бек, и фронт.

                                                        Вот джанго игнорит фронт принципиально: у нее поддержка фронта на уровне 2006-го года: она умеет все JSки собрать в одну папку, и все

                                                        Даже компиляцию вебпаком люди прикручивают вручную
                                                        Ответить
                                • > GWT
                                  пиздец

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

                                    Но тот проект делался в те времена, когда у JS не было ни модулей, ни сборки, ни кажется вообще даже ноды не было.

                                    Так что у SPA был выбор:
                                    * писать все на JS образца 2007-го года и плакать
                                    * писать всё таки на шестой джаве

                                    >джумлу
                                    ну вот опять: джумла это пых, GWT это джава.
                                    В проекте бывает удобно писать на джаве, а не на пыхе
                                    Ответить
                                    • зачем тогда обсуждать сорта говна 13 летней давности, если с тех пор многое поменялось?

                                      любая генерация жс на жабе это полный пиздец
                                      лютейший пиздец этот ваш JSF и ему подобные

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

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

                                        А кстати, как бы ты делал SPA? Чтобы взял для фронта и бека?
                                        Ответить
                                        • что значит "бы"
                                          выдумывать там ничего не надо

                                          бекенд котёл (жаба) в спринге или дотнеткор
                                          фронт реакт на тайпскрипте (vue не берите)

                                          на ± то же апи фронта если очень хочется можно и мобильное приложение насадить - будут небольшие нюансы по реалтайм уведомлениям, в частности
                                          Ответить
                                          • Отлично.

                                            Тогда такой вопрос.
                                            Есть формочка:
                                            Способ доставки:
                                            ** Получение в центре выдачи 
                                            **** Выберите центр выдачи
                                            ** Доставка до дома
                                            ****Укажите адрес


                                            Выбор "центра доставки" требует выбора этого центра собссно
                                            А выбор "дома" требует указания адреса.

                                            Хочется эту чудесную логику проверять и на клиенте (чтобы отключать ненужные пункты) и на сервере (чтобы неконсистентного говна не пихнули в базу).

                                            Как это лучше реализовать с учетом разных языков для фронта и бека?
                                            Ответить
                                            • Скорее всего никак.

                                              Для валидации отдельных параметров, можно кидать на клиент типы полей/или регулярки.

                                              Для валидации связанной питушни по уму нужно пилить декларативный язычок, с описанием что от чего и как зависит. Но это мороки много.

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

                                                Было бы круто придумать такой DSL, который описывал бы объект с типами, валидацией, и логикой этой валидации

                                                Я бы реализовал кодогереацию для TS и Java, и потёк бы

                                                Может, придумать такой, и спасти мир?
                                                Ответить
                                                • Хз. Может он есть, а мы не знаем.

                                                  Думаю в итоге получится какой-то Пролог c регулярками.

                                                  >В Йаже были встроены js-движки, с помощью которых можно было выполнять такую валидацию
                                                  Я вот об этом:
                                                  https://developer.oracle.com/databases/nashorn-javascript-part2.html

                                                  Можно было бы взять js-код с валидацией, вынести его отдельно.

                                                  ScriptEngineManager manager = new ScriptEngineManager();
                                                          ScriptEngine engine = manager.getEngineByName("nashorn");
                                                  
                                                          engine.eval("var intArray = [1, 2, 3];");
                                                          ScriptObjectMirror mirror = (ScriptObjectMirror) engine.get("intArray");
                                                          Integer[] intArray = mirror.to(Integer[].class);
                                                          System.out.println(intArray.length);

                                                  И валидировать им и на клиенте, и на сервере.
                                                  Ответить
                                                  • Да, в джаве есть носорог Рино, но он какой-то адски медленный вроде, ну и типобезопасности нет никакой
                                                    Ответить
                                                      • У, у меня сведения 15-ти летней давности как это обычно бывает

                                                        Тем не мнее, безопасности всё равно нет
                                                        Я хочу POJO а не строку с описанием объекта
                                                        Ответить
                                                      • нашорн же закопали, как я помню, уже пару лет как
                                                        мы сейчас graalvm юзаем в одном свежем проекте, работает заебись
                                                        Ответить
                                                        • А для чего? Вы скриптуете джаву на JS?
                                                          Хочу спросить "почему не груви", но стесняюсь:)
                                                          Ответить
                                                          • Груви есть в другом проекте.

                                                            В этом именно что надо было жс в жабе (котле на самом деле).
                                                            Ответить
                                            • Может, ты хочешь сразу эту логику проверять одним кодом ещё и на ведре с iOS'ом? 🙂

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

                                                Что плохого?

                                                Почему не бывает?

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

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

                                                    Я пишу:
                                                    class Petuh(models.Model):
                                                      name = models.CharField(required=True)

                                                    И получаю базу с notnull и формочку с input type=required.

                                                    Сделать бы такое без джанги -- было бы удобно
                                                    Ответить
                                                    • >базу с notnull и формочку с input type=required.

                                                      Охуенно. Только это имперации.

                                                      А хотелось бы, повторюсь, полностью декларативный и абстрактный питух.

                                                      Были бы здесь Роман или wvxvw, они бы наверняка подсказали какую-то упоротую рисёрч-питушню.
                                                      Ответить
                                                      • Типа такого
                                                        type PostomatAddr (...)
                                                        type Delivery (Home, Postomat)
                                                        object Form
                                                          delivery: Delivery
                                                          when (delivery):
                                                            Home-> address: Text(regex:[регулярка адреса])
                                                            Postomat -> PostomatAddr


                                                        Само собой, всё должно статически валидироваться
                                                        Ответить
                                                          • Базу с констреинтами, Java, C#, Swift объекты с валидацией, JS код с валидацией

                                                            А может даже HTML формочки, или WPF или как там в яблоке формочки делаются (хотя UI лучше сделать руками и набиндить компоненты на этот объект)

                                                            Всё понятно же: delivery это енум
                                                            В зависимости от него будет или home или postomat адрес, home адрес проверяется по регулярке
                                                            Ответить
                                                            • > хотя UI лучше сделать руками и набиндить компоненты на этот объект
                                                              - тут мы упираемся в жестокую реальность. На iOS ты можешь делать UI чисто в коде с UIKit, при помощи XIB'ов, Storyboard'ов, а теперь ещё и на SwiftUI. Задолбаешься поддерживать.

                                                              Вообще смотри куда-то в сторону
                                                              https://microsoft.github.io/bond/manual/compiler.html#custom-attributes
                                                              Ответить
                                                              • Я смутно помню посмтроение UI через Xib, а стори борды это же вроде почти тоже самое, но плюс сигвеи?

                                                                Там еще был прикольный autolayout, которому ты скармливал ограничения, и он их старался выполнять.

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

                                                                Так сделано в WFP примерно
                                                                Ответить
                                                                • Почти то же самое, только другое. Между собой очень тяжело совместимое.

                                                                  > вот эта проперти автоматически связывается с таким проперти объекта
                                                                  - нужно всего-ничего: разобраться с устройством xml от Эппла!
                                                                  Ответить
                                                          • Оно должно
                                                            а) генерить POJO, struct, create table
                                                            b) применять эти правила к модели данных.

                                                            И выдавать Either Valid | Error["Неправильно забит Postomat", "Не введён Home", "Какой багор )))"]
                                                            Ответить
                                                            • > create table
                                                              - если у меня не реляционная СУБД, я иду в восьмой кабинет?
                                                              Ответить
                                                              • Если не реляционная, ты просто не исопльзуй эту часть.
                                                                Ответить
                                                • Ок, бывает.

                                                  Можешь всё набросать на js, сервак на ноде, мобильные клиенты на cordova/react native. И даже на декстоп обернуть всё в электрон.

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

                                                Так что я даже немного удивлён, что какой-то калифорнийский школьник ещё не написал под кислотой такой DSL.
                                                Ответить
                                                • Унифицированные DSL обычно пишут для клиент-серверного взаимодействия (Protobuf, Thrift, ещё косвенно Avro, Bond).

                                                  Генерировать визуальное представление ну это кхм непросто, если платформ больше, чем одна, на мой взгляд. Не факт, что будет выигрыш по человекочасам
                                                  Ответить
                                                  • Джанго умеет генерировать UI по модели, но он хуевый, и подходит только для пруфофконцепта или MVP.

                                                    UI должен придумать дизайнер, а потом привязать его к объекту

                                                    впрочем, админку он генерит хорошо
                                                    Ответить
                                                  • >Генерировать визуальное представление ну это кхм непросто

                                                    Мы с гостем говорим о DSL для описания модели данных и её валидации, чтобы не поддерживать синхронно логику валидации на клиенте/сервере
                                                    И по возможности генерить из такого описания DDL для базы.

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

                                                        Не вижу там связи между параметрами. Восьмишку нужна логика предикатов, как в прологе.

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

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

                                                          А так-то:

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

                                                          // Псевдокод
                                                          struct Address {
                                                          concreteAddress: string nonnull
                                                          }

                                                          struct Order {
                                                          homeAddress: Address nullable
                                                          }
                                                          Ответить
                                                      • Давай объясню идею еще раз, и пойду делами заниматься.

                                                        Есть некоторая структура с полями.
                                                        Есть понятие её валидности. Структура валидна, когда выполнены некоторые ограничения, которые есть функции от ее полей.

                                                        Я описал структуру "Заказ говна".
                                                        Структура имеет поле "сорт говна" (это енум)
                                                        И способ доставки: Постомат или Дом
                                                        Если дом, то поле "адрес доставки" должно быть не пустым
                                                        Иначе оно должно быть пустым.
                                                        Если постомат, то должно быть поле "адрес постомата" (оно из enum)
                                                        Иначе поле "адрес постомата" пустое.

                                                        По этой структуре я могу сгенерировать:
                                                        * Реляционную СУБД с констреинтами
                                                        * UI на HTML и валидирующим его JS
                                                        * UI на чем-то еще
                                                        * Структуру для SOAP
                                                        * Код валидации такой структуры при приходе ее на сервер.

                                                        Разумеется, я не обязан использовать всё: я могу UI нарисовать руками, а потом валидировать его сгенеренным кодом
                                                        Или я могу базу не генерить вообще, если у меня базы нет.

                                                        Например, я могу сгенерировать простой UI, сделать пруф оф концепт
                                                        А потом нанять дизайнера, и перерисовать UI руками, и привязать контролы к полям этой структуры. Будет чуть больше работы, но только там, где это реально надо.

                                                        Или я могу выкинуть потом базу, и переписать запросы руками, когда у меня будет 100000 пользователей, и я упрусь в перформанс

                                                        Важно то, что я описал эту логику один раз на языконезависимом DSL, и получил ее реализации на куче разных языков.

                                                        Это, как мне кажется, упростило бы написание двух и трехзвенных архитектур.

                                                        Знание о том, что "если выбран постомат -- адрес дома не нужен" хочется записать один раз, а не много.
                                                        Ответить
                                                        • Ты ждёшь, что кто-то вспомнит название такой тулзы?
                                                          Ответить
                                                        • я влезу в дискуссию, тезисно
                                                          когда рассматривается абстрактный трехзвенный проект, то:
                                                          1) фронт обычно это даже не 50% костов на написание логики
                                                          2) когда меняется логика, почти всегда требуется соответствующее поведение элементов дизайна
                                                          3) логика валидации обычно не меняется по 2 раза в сутки
                                                          4) логические проверки редко являются ботлнеком
                                                          5) фронт почти всегда означает полное разведение языков и технологий с беком - ибо фронтов я могу навскидку назвать минимум 5 штук (веб, два сорта мобил, толстое приложение, внешний сервис)

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

                                                          из этих правил следует, что "блядь мне ОЧЕНЬ нужно не писать дважды одинаковые валидации, а писать их один раз" возникает КРАЙНЕ редко, поэтому тащить ДСЛ в каждый проект, или закусывать удила и терпеть говногенерацию фронта беком - это означает, ВОЗМОЖНО, решить одну задачу, сэкономив 5% бюджета и времени, но проебать 95% другого (а именно, невозможность сделать кучу других UI вещей, будучи ограниченным говнофреймворком бекенда, обеспечить юзеру тормоза на ровном месте, или суметь БЫСТРО решить первые 15% проекта, и потом обосраться на оставшихся 85% - с течением времени ВСЕ виденные мной проекты на подходе JSF просто переставали ворочаться и списывались в утиль, с резолюцей "хватит терпеть это говно, переписываем с нуля!")

                                                          некоторые вещи стоит решать точечно, и они решаются, это нормально
                                                          Ответить
                                                          • >из этих правил следует, что "блядь мне ОЧЕНЬ нужно не писать дважды одинаковые валидации, а писать их один раз" возникает КРАЙНЕ редко

                                                            На самом деле слабенькое оправдание анскильности. Вам не нужна фича Х, потому что не нужна и всё.

                                                            Из разряда: ну вам компилируемый язык не нужен, т.к. опечатки в программе возникают довольно редко.

                                                            Особенно когда код нужно продублировать более двух раз.
                                                            См. «минимум 5 штук (веб, два сорта мобил, толстое приложение, внешний сервис)»

                                                            > поэтому тащить ДСЛ в каждый проект, или закусывать удила и терпеть говногенерацию фронта беком - это означает, ВОЗМОЖНО, решить одну задачу

                                                            Вот и вопрос. Возможно уже есть готовый language agnostic фреймворк, который решает такую задачу.


                                                            И напоследок. Дело не в написании логики 2 и более раз.

                                                            Но в бремени поддерживать её идентичность и синхронность.

                                                            И том свойстве копипасты, что однажды скопированный код со временем имеет свойство разъезжаться.
                                                            Ответить
                                                            • Слишком длинный комментарий! Максимум 2000 символов!

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

                                                              нельзя всё под одну гребенку, вариантов много, но вариант с jsf на 1 преимущество даст 10 неимуществ

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

                                                              фронт = мобила

                                                              что я сделал? притащил монстра, который обязует на беке и фронте делать одинаковые валидации/алгоритмы действий? хер

                                                              я вынес "алгоритмы" в отдельную подсистему, которая натурально исполняет bpmn, она тесно привязана на "бек" (который из-за этого немного похудел), именно она знает куда и зачем и что, и более того, даже предоставляет возможность не останавливая систему вносить коррективы в эти "алгоритмы" (бизнес-процессы)

                                                              при этом и фронт, и бек не знают куда приведет действие пользователя, но, конечно, следят за адекватностью действий пользователя (там условно 3-4 вореции выбери/показывай/не показывай в рамках автономного шага, сложно?)

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

                                                              фронт при этом - овер 100 различных вьюх, а пригодилось лишь в 1 месте, да и то, лишь затем, чтобы быстрее ворочалось (надо было сотню проверок делать мгновенно)

                                                              при этом, и фронт (хамарин) и бек (дотнеткор) написаны были на c#, но была ли копипаста между ними? НЕТ

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

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

                                                                и беку про доставку (исходный пример) вообще поебать на ИСКЛЮЧИТЕЛЬНОСТЬ выбора юзера - пусть хоть два варианта фронт пришлёт, ему вообще надо проверить, что такой товар вообще есть и все еще зарезервирован, и всё ещё способен доставиться выбранным способом в связи с обновленным 30 секунд назад договором на логистику - на фронте это всё равно не сделать и не предугадать

                                                                с какого хера проверки на фронте и беке должны быть идентичны вообще?
                                                                Ответить
                                                              • > валидаций, которые вообще динамические (управляются админом системы, а не программистом)
                                                                >мы [...] решили декларировать однострочниками на сишарпе, компилировать при старте бекенда/рекомпилировать при изменении

                                                                Вот этот момент «декларировать однострочниками на сишарпе, компилировать при старте бекенда» не понял.

                                                                Реальный пример можно?
                                                                Ответить
                                                                • Считаем, что такой однострочник - тело анонимной функции с определенными типизированными аргументами, которая возвращает буль.

                                                                  "Программист" через тело такой функции может во время эксплуатации изменить поведение.

                                                                  Иногда там не однострочник а трехстрочник, сути не меняет.

                                                                  Считай скриптушня, но заведомо оптимизированная на скорость.

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

                                                                    Это я примерно понял.

                                                                    Я не понял про «компиляцию в СиШарп». Как это происходит?

                                                                    И на чём написан код однострочника?

                                                                    На универсальном подмножестве скриптухи, которая одинакова для js и С#? Или какой-то компилер переводит скриптуху на C#?
                                                                    Ответить
                                                                    • На сишарп он написан. В бекенд сишарпа притащен какой то компилер, который ребилдит натурально дллку и динамически ее связывает
                                                                      Ответить
                                                        • Уффф. Я потратил два часа.
                                                          Но нашёл подоходящее.

                                                          Apache Avro.

                                                          https://avro.apache.org/docs/current/spec.html#schema_record

                                                          Unions
                                                          
                                                          Unions, as mentioned above, are represented using JSON arrays. For example, ["null", "string"] declares a schema which may be either a null or string.
                                                          
                                                          (Note that when a default value is specified for a record field whose type is a union, the type of the default value must match the first element of the union. Thus, for unions containing "null", the "null" is usually listed first, since the default value of such unions is typically null.)
                                                          
                                                          Unions may not contain more than one schema with the same type, except for the named types record, fixed and enum. For example, unions containing two array types or two map types are not permitted, but two types with different names are permitted. (Names permit efficient resolution when reading and writing unions.)
                                                          
                                                          Unions may not immediately contain other unions.
                                                          
                                                          For example, the union schema ["null","string","Foo"], where Foo is a record name, would encode:
                                                          
                                                              null as null;
                                                              the string "a" as {"string": "a"}; and
                                                              a Foo instance as {"Foo": {...}}, where {...} indicates the JSON encoding of a Foo instance.


                                                          >Знание о том, что "если выбран постомат -- адрес дома не нужен"
                                                          Хуярим

                                                          union: ["Postomat", "HomeDelivery", "DeliveryPoint"]

                                                          Хуярим типы Postomat, HomeDelivery, DeliveryPoint.

                                                          В каждом свой набор полей.

                                                          До «Prolog» и «Datalog» с дизъюнктами Хорна далеко. Но описанный пример c Either решает.

                                                          Правда для моих извращённых вкусов типа логической предикатной валидации параметров, это не годится.
                                                          struct{
                                                          ...
                                                               Date dts;
                                                               Date dte; //dte должно быть >= dts, иначе структура невалидна
                                                          ...
                                                          }
                                                          Ответить
                                                          • Круто.

                                                            Дело за малым.

                                                            Генерировать формочки, добавить поддержку Свифта и JS и т.п.
                                                            Ответить
                                                            • Мне так же понравилось

                                                              1. Avro даже умеет описывать весьма сложные структуры данных.

                                                              For example, a linked-list of 64-bit values may be defined with:
                                                              
                                                              {
                                                                "type": "record",
                                                                "name": "LongList",
                                                                "aliases": ["LinkedLongs"],                      // old name for this
                                                                "fields" : [
                                                                  {"name": "value", "type": "long"},             // each element has a long
                                                                  {"name": "next", "type": ["null", "LongList"]} // optional next element
                                                                ]
                                                              }


                                                              2. Это бинарный протокол, то есть компактный, с быстрым парсингом. Одним словом: Царский!

                                                              3. Мало того что он бинарный, прямо в протоколе добавлены разные стандарты зожатия, включая современнейший ZSTD
                                                              Required Codecs
                                                              null
                                                              
                                                              The "null" codec simply passes through data uncompressed.
                                                              deflate
                                                              
                                                              The "deflate" codec writes the data block using the deflate algorithm as specified in RFC 1951, and typically implemented using the zlib library. Note that this format (unlike the "zlib format" in RFC 1950) does not have a checksum. 
                                                              xz
                                                              
                                                              The "xz" codec uses the XZ compression library.
                                                              zstandard
                                                              
                                                              The "zstandard" codec uses Facebook's Zstandard compression library.


                                                              > добавить поддержку JS

                                                              4. Схема записывается в json.
                                                              То есть формат browser-friendly. И наверняка есть либа для js.


                                                              Единственный недостаток, повторюсь, отсутствие регулярок и логических условий типа сравнений.
                                                              Ответить
                                                                • >CORBA
                                                                  Это такой оверинжинирный пиздец, что DCOM от MS кажется простой и понятной штукой.

                                                                  >какая-то статья 96-го года
                                                                  Похоже на сырой пропозал.

                                                                  И оно там не декларативно, а примеры на IDL (чем-то вроде Эйфеля), которые по сути похожи на Йажа-интерфейсы, с блокам валидационного кода выполняющиеся перед методом.

                                                                  Какая-нибудь аннотационая питушня, и то декларативнее:
                                                                  https://javaee.github.io/javaee-spec/javadocs/javax/validation/constraints/package-summary.html
                                                                  Ответить
                                                                    • MyResponseType:
                                                                        oneOf:
                                                                        - $ref: '#/components/schemas/Cat'
                                                                        - $ref: '#/components/schemas/Dog'
                                                                        - $ref: '#/components/schemas/Lizard'


                                                                      Почти оно?
                                                                      Ответить
                                                                      • Так это же почти что:
                                                                        https://json-schema.org/understanding-json-schema/

                                                                        Примитивные вореции
                                                                        {
                                                                          "type": "string",
                                                                          "minLength": 2,
                                                                          "maxLength": 3
                                                                        }
                                                                        
                                                                        {
                                                                           "type": "string",
                                                                           "pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"
                                                                        }


                                                                        А так же их кобенации
                                                                        https://json-schema.org/understanding-json-schema/reference/combining.html
                                                                        For example, in the following schema, the anyOf keyword is used to say that the given value may be valid against any of the given subschemas. The first subschema requires a string with maximum length 5. The second subschema requires a number with a minimum value of 0. 
                                                                        
                                                                        {
                                                                          "anyOf": [
                                                                            { "type": "string", "maxLength": 5 },
                                                                            { "type": "number", "minimum": 0 }
                                                                          ]
                                                                        }
                                                                        Ответить
                                                                          • Походу есть.
                                                                            Во-1 есть не только констатны, но и указатели на поля.
                                                                            https://json-schema.org/understanding-json-schema/structuring.html#the-id-property

                                                                            Во-2 есть рекурсия
                                                                            https://json-schema.org/understanding-json-schema/structuring.html#recursion

                                                                            В-3 есть кванторы [allOf, anyOf, oneOf, not]
                                                                            Из этих кванторов возможно наверное собрать почти всё.

                                                                            В-4 есть if else
                                                                            https://json-schema.org/understanding-json-schema/reference/conditionals.html

                                                                            Я не удивлюсь что оно Тьюринг-полное

                                                                            {
                                                                              "type": "object",
                                                                              "properties": {
                                                                                "street_address": {
                                                                                  "type": "string"
                                                                                },
                                                                                "country": {
                                                                                  "enum": ["United States of America", "Canada"]
                                                                                }
                                                                              },
                                                                              "if": {
                                                                                "properties": { "country": { "const": "United States of America" } }
                                                                              },
                                                                              "then": {
                                                                                "properties": { "postal_code": { "pattern": "[0-9]{5}(-[0-9]{4})?" } }
                                                                              },
                                                                              "else": {
                                                                                "properties": { "postal_code": { "pattern": "[A-Z][0-9][A-Z] [0-9][A-Z][0-9]" } }
                                                                              }
                                                                            }
                                                                            Ответить
                                                                            • Ну на if-ах это легко в говно превращается.

                                                                              Вот так у меня не работает:

                                                                              {
                                                                                "$schema": "http://json-schema.org/draft-07/schema#",
                                                                              
                                                                                "definitions": {
                                                                                  "address": {
                                                                                    "$id": "#address",
                                                                                    "type": "object",
                                                                                    "properties": {
                                                                                      "street_address": { "type": "string" },
                                                                                      "city":           { "type": "string" },
                                                                                      "state":          { "type": "string" },
                                                                                      "code":           { "type": "integer" }
                                                                                    },
                                                                                    "required": ["street_address", "city", "state"]
                                                                                  }
                                                                                },
                                                                              
                                                                                "type": "object",
                                                                              
                                                                                "properties": {
                                                                                  "billing_address": { "$ref": "#address" },
                                                                                  "shipping_address": { "$ref": "#address" },
                                                                                  "code": {
                                                                                    "type": "integer",
                                                                                    "minimum": { "$ref": "#address/code" }
                                                                                  }
                                                                                }
                                                                              }


                                                                              Пишет


                                                                              Unexpected token encountered when reading value for 'minimum'. Expected Integer, Float, got StartObject. Path 'properties.code.minimum', line 25, position 18.

                                                                              Проверяю тут
                                                                              https://www.jsonschemavalidator.net/
                                                                              Ответить
                                                                              • Так это же draft 7.

                                                                                Ждём пока IETF утвердит, а разрабы либ поддержат.

                                                                                Ведь XSD тоже не сразу строилось.

                                                                                А в итоге выросло в чудище с произвольными констрейнтами по XPaph.
                                                                                Ответить
                                                                                • Этот сайт шарит все драфты, проверь.

                                                                                  Есть ещё такой вариант:

                                                                                  "nonNegativeInteger": {
                                                                                              "type": "integer",
                                                                                              "minimum": 0
                                                                                          },
                                                                                          "nonNegativeIntegerDefault0": {
                                                                                              "allOf": [
                                                                                                  { "$ref": "#/definitions/nonNegativeInteger" },
                                                                                                  { "default": 0 }
                                                                                              ]
                                                                                          },


                                                                                  Не знаю, можно ли сюда прикрутить minimum и maximum
                                                                                  Ответить
                                                                                  • Да, ifы поддерживаются.

                                                                                    Я даже наговнячил примитивное рабочее сравнение двух полей:
                                                                                    {
                                                                                      "type": "object",
                                                                                      "properties": {
                                                                                        "dte": {
                                                                                          "type": "string"
                                                                                        },
                                                                                        "dts": {
                                                                                          "type": "string"
                                                                                        }
                                                                                          
                                                                                      },
                                                                                      "allOf": [
                                                                                        {
                                                                                          "if": {
                                                                                            "properties": { "dts": { "const": "0"} }
                                                                                          },
                                                                                          "then": {
                                                                                            "properties": { "dte": { "pattern": "[1-9][0-9]*" } }
                                                                                          }
                                                                                        },    
                                                                                        {
                                                                                          "if": {
                                                                                            "properties": { "dts": { "const": "1"} }
                                                                                          },
                                                                                          "then": {
                                                                                            "properties": { "dte": { "pattern": "[2-9][0-9]*" } }
                                                                                          }
                                                                                        },
                                                                                        {
                                                                                          "if": {
                                                                                            "properties": { "dts": { "const": "2"} }
                                                                                          },
                                                                                          "then": {
                                                                                            "properties": { "dte": { "pattern": "[3-9][0-9]*" } }
                                                                                          }
                                                                                        },
                                                                                        {
                                                                                          "if": {
                                                                                            "properties": { "dts": { "const": "3"} }
                                                                                          },
                                                                                          "then": {
                                                                                            "properties": { "dte": { "pattern": "[4-9][0-9]*" } }
                                                                                          }
                                                                                        },
                                                                                        
                                                                                      ]
                                                                                    }

                                                                                    То есть в теории можно строить сколь угодно сложные конструкты.
                                                                                    Ответить
                                                                                    • Причём о JSON Schema я знал давно, но if~then~else это что-то новенькое.

                                                                                      Посоны на SO в 2016 году тоже были убеждены, что связанность параметров никак нельзя проверить

                                                                                      >In JSON Schema, all validation keywords are scoped to the value that it applies to. In other words, you can't validate one value in terms of another
                                                                                      Ответить
                                                                              • >Unexpected token encountered when reading value for 'minimum'. Expected Integer, Float, got StartObject

                                                                                Да, похоже оно не настолько умное.
                                                                                И ссылки на цифровые объекты не могут быть переданы в minimum.
                                                                                Ответить
                                                                          • Грубо говоря я могу извратиться и сравнить поциферно
                                                                            "if": {
                                                                                "properties": { "dts-month": { "const": "1" } }
                                                                              },  "then": {
                                                                                "properties": { "dte-month": { "minimum": "1" } }
                                                                              }
                                                                              "if": {
                                                                                "properties": { "dts-month": { "const": "2" } }
                                                                              },  "then": {
                                                                                "properties": { "dte-month": { "minimum": "2" } }
                                                                              },
                                                                            ...

                                                                            Выйдет ОЧЕНЬ много бойлерплейта. Но зато это возможно в принципе.
                                                                            Ответить
                                                                      • > Unions в наличии, но похоже, что они какие-то сишные

                                                                        Из мануала видно что Franca завязана на йажа-инфраструктуру.
                                                                        И это не avro где схема пишется в json.
                                                                        Для франко-дерьма нужен полноценный лексер/парсер.

                                                                        А вот OpenApi мне зашёл.

                                                                        Во-1. Copyright © 2020 the Linux Foundation

                                                                        Во-2. Описание в json/yaml.

                                                                        В-3. Декларативность
                                                                        {
                                                                          "components": {
                                                                            "schemas": {
                                                                              "ErrorModel": {
                                                                                "type": "object",
                                                                                "required": [
                                                                                  "message",
                                                                                  "code"
                                                                                ],
                                                                                "properties": {
                                                                                  "message": {
                                                                                    "type": "string"
                                                                                  },
                                                                                  "code": {
                                                                                    "type": "integer",
                                                                                    "minimum": 100,
                                                                                    "maximum": 600
                                                                                  }
                                                                                }
                                                                              },

                                                                        Но опять же нельзя писать произвольные предикаты.
                                                                        Пример c dts/dte
                                                                        struct{
                                                                        ...
                                                                             Date dts;
                                                                             Date dte; //dte должно быть >= dts, иначе структура невалидна
                                                                        ...
                                                                        }
                                                                        Ответить
                                                          • Кстати, не потенциальный ли это багор:

                                                            Avro does not require that code be generated. Data is always accompanied by a schema that permits full processing of that data without code generation, static datatypes, etc. This facilitates construction of generic data-processing systems and languages.
                                                            Ответить
                                                            • > И наверняка есть либа для js.

                                                              https://github.com/mtth/avsc

                                                              Pure JavaScript implementation of the Avro specification.
                                                              
                                                                  Blazingly fast and compact serialization! Typically faster than JSON with much smaller encodings.
                                                                  All the Avro goodness and more: type inference, schema evolution, and remote procedure calls.
                                                                  Support for serializing arbitrary JavaScript objects.
                                                                  Unopinionated 64-bit integer compatibility.
                                                              Для вёб-сокетов самое оно.

                                                              Make Web tsar again!
                                                              Ответить
                                                    • Ты МОЖЕШЬ хотеть формочки
                                                      А можешь не хотеть

                                                      это твое право

                                                      Сгенерить формочки из этой модели можно
                                                      А можно и не генерить

                                                      Если есть модель, то я могу выбирать
                                                      Ответить
                                                  • >Protobuf, Thrift, ещё косвенно Avro, Bond

                                                    Да, оно самое.
                                                    Только в протобуфе максимум что можно сделать поставить required / optional и тип.

                                                    А нужна куда более навороченная валидация.

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

                                                      Взять условия Макаки и написать валидацию руками, например, на Йаже. Когда императивный вариант удовлетворит потребностям, попытаться переписать его на декларативный dsl.
                                                      Ответить
                                            • для начала у тебя есть на беке апи "дай мне подходящие под мои текущие условия центры выдачи", бек в итоге поселектит и пофильтрует
                                              для конца у тебя есть на беке апи "на тебе выбранный мной под мои текущие условия центр выдачи", бек в итоге практически то же самое сделает - поселектит и пофильтрует, и заодно пофильтрует "где выбранный центр - вот этот", в чем получит 1 или 0 множество, дальше он с ним может делать что хочет

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

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

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

                                                >для конца у тебя есть на беке апи "на тебе выбранный мной под мои текущие условия центр выдачи", бек в итоге практически то же самое сделает - поселектит и пофильтрует, и заодно пофильтрует "где выбранный центр - вот этот", в чем получит 1 или 0

                                                Да, здесь тоже дельно.

                                                Одобряю этот паттерн: бек отдаёт список, в зависимости от предыдущих фильтров.

                                                Реальный пример связанных полей:
                                                Выбрали страну => подгрузился список городов
                                                Выбрали город => подгрузился список улиц
                                                итд

                                                >какие-нить однострочные определяемые в админке правила на условном жс
                                                Тоже одобряю. В принципе я это и предлагал, только на условном прологе.
                                                Есть реальные примеры предкомпиляции?
                                                Ответить
                                          • > vue не берите
                                            - а чо? Я ковырял, мне понравилось. Какие там косяки?
                                            Ответить
                                            • насколько я помню, он херово дружит с ТС, не умеет многого того, что умеет реакт

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

                                              все другие проекты сразу (были и будут) на реакте, к реакту претензий почти нет
                                              я не сеньор фронтоблядь, мне достаточно того, что общепризнанно коллективом вью признан говнищем, и стратегически реакт дефолтный выбор
                                              Ответить
                                              • >и стратегически реакт дефолтный выбор

                                                За что такая любовь к реакту?
                                                Что в нём хорошего?
                                                Ответить
                                                • Это говно самое приемлемое. Ну и решает всё что нужно, из проекта в проект.

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

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

                                                    Пффф. Не надо мне про это говорить. Я же сам миллион раз на ГК твердил эти доводы функцианальным теоретухам.

                                                    Тут вопрос (человека слабо в нём понимающего) чем реакт лучше того же ангуляра?

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

                                                      Мы кроме реакта посмотрели вью, больше не хочется.
                                                      Ответить
                                                      • >я не настоящая фронтоблядь

                                                        Я тоже)))
                                                        Но ангуляр я более-менее знаю и понимаю.
                                                        А вот реакт мне показался жутко упоротой питушнёй где намешаны html и данные.

                                                        >4 года назад на старом месте работы был в фаворе ангуляр

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

                                        Д++ дело говорит.
                                        Ответить
                                        • Не томите

                                          На чем генерировать JS? Как не писать два раза для фронта и бека одно и тоже?

                                          Я не троллю, мне правда интересно ваше мнение
                                          Ответить
                                          • >Как не писать два раза для фронта и бека одно и тоже?

                                            А не нужно решать на беке задачи фронта и наоборот.

                                            Дублирующиеся вещи вроде валидации параметров можно сделать мапой с регулярками. Они кроссязыковые.
                                            Ответить
                                            • >1.1-1.3 раза в среднем, не более
                                              Ну или так.

                                              Конечно, TS гораздо лучше генерит JS: у него и интероп нормальный, и "слой" эмуляции гораздо тоньше, и TS обвязки есть для некоторых библиотек, позволяя вообще не трогать голый JS
                                              Ответить
                                  • >> я взял пока ещё теплое на работу

                                    Вкусняшка!
                                    Ответить
                                  • Кстати, а можно бекенд написать на TS, и запустить его в node?
                                    Ответить
        • >инженерного отдела
          Реквестирую запилить автокомплит для поля юзер в поиске.

          Надоело вбивать руками длинные ники.
          Ответить
      • Любой SPA прогнозировано насмерть разбивается о noscript, пнятное дело.
        Ответить
    • Жил как-то с «NoScript», не понравилось. Заходишь на любой сайт — и долго и нудно ковыряешься, пытаясь понять, какие скрипты ему ещё нужно включить, чтобы он хотя бы заработал.
      Ответить
      • Я привык.
        Обычно всё-таки на сайтах не так много источников скриптов, тем более, половина это всякие googletagmanager.

        Конечно, есть варианты типа fontanka.ru, где я насчитал шестнадцать источников, но отключение 90% из них на работоспособность сайта влияет мало.
        Ответить
        • Самое дерьмо — сайты банков и интернет-магазинов.

          Сайт «Эльдорадо» после полного отключения JS работает, и даже прекращает тормозить. А вот сайт «Леруа» без скриптов не работает.
          Ответить
      • >Жил как-то с «NoScript», не понравилось

        Потверждаю. Для обычного браузинга не то.

        Но в параноидальном режиме самое оно.
        Ответить
    • > noscript + adblocker + запрет сторонних куков = жизнь более-менее
      Знаем. Пользуем. Однако Муха выше сообщает что сами сайты тормозные.

      > в сытые времена было 4 полноценных движка.
      2 из которых closed-source.
      При всей искренней любви к старой Опере, я нисколько не жалею.

      На самом деле в некоторых аспектах стало только лучше: меньше багров с совместимостью. Выжил только опен-сорс.
      Ответить
      • Исходники «Оперы 12.15» под «Windows» попали в открытый доступ. Я проверял, собирается и работает. Жалко, что не 12.18, в которую добавили эпилептические курвы, и жалко что в утёкшем архиве нет кода под другие платформы.
        Ответить
        • Наверное сами разрабы и слили, которым обидно стало, что их вот так об хуй кинули ради говнохрома.

          Я на Опере во времена диал-апа сидел. Прекрасный был браузер.
          Всё умел: зожимал картинки, экономил траффик, были вкладки, жесты.
          Ответить
          • После перехода на говнохром в «Опере» сократили 2/3 сотрудников, потому что ядро больше пилить не нужно.
            Ответить
          • Да, я забыл. Вроде ещё и под Mac OSX собирается. А вот недесктопный код так и остался закрытым.
            Ответить
      • Просто возвращаемся во времена тотального доминирования IE. За Хромом корпорация ничуть не менее ебанутая, а может и более.

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

          Опере они прямо платил бабки за интеграцию трекинга и дефолтный поиск.
          http://www.searchenginejournal.com/opera-goes-free-with-help-from-google/2227/
          Насчёт Щозиллы не уверен, но судя по тому что она по дефолту всё сливает в Гугл...

          > Гугел возьмёт и заменит б-гопротивный жабаскрипт с лефтпадами на вменяемый йезык
          Судя по гмейлу и прочим тормознутым гвноуглосайтам будет только хуже.
          Ответить
          • «Гугл» рекламировал «Гігетох» до того, как у них появился «Снготе». А после того, как появился «Снготе», они сделали вид, что про существование «Гігетоха» не знают.
            Ответить
          • Да, я знаю. ФФ живёт в том числе на деньги и от Гугла. Он обновился, удалил у меня ddg из поисковых движков и поставил угадайте что? Правильно, гугел.

            Я за те деньги тоже кому-нибудь удалил бы ddg
            Ответить
  • Инженерный отдел сделал регистронезависимый поиск по нику (можно вводить «BoRmAnD» и течь) и простой API для автокомплита: https://gcode.space/api/autocomplete/user/name/Bor (да, я не умею правильно называть эти ваши конечные точки). Возвращает массив словарей «id, name, avatar», таких же, как в /api/user/name.
    Скрипты на фронтенде пилить пока лень.
    Ответить
    • Дорогой gost,

      хотел узнать у тебя, насколько сложно будет сделать выгрузку и загрузку списка уёбков и забаненных тредов, например, при помощи json или даже csv, чтобы его можно было экспортировать из одного браузера и импортировать в другой?

      С уважением,

      Десктоп
      Ответить
      • Как временный вариант, это можно делать через «Ко-ко-консоль браузера»: достаточно просто скопировать/вставить значения соответствующих ключей из «Local Storage»: https://i.imgur.com/Sr7UURC.png. Делать для этого UI… Не знаем, возможно, после автоперекатывалки и автокомплита.
        Ответить
        • Спасибо! Я посмотрю, может есть для лисы какое-то расширение уже.
          Ответить
          • Пожалуйста. Можно ещё прямо через консоль (на странице «NGK»):
            > localStorage.getItem('ignoredUsers');  // localStorage.setItem(...)
            < "{}"
            Ответить
      • Как вариант можно этот список в кастомный фильтр загнать. Там же любой код на жс можно писать.
        Ответить
  • Смотрим не сам твит, а реплаи:
    https://twitter.com/sua__twt/status/1288785383413747712

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

      >можно собирать биометрическую информацию
      Зачем? Зачем?
      Ответить
      • Банить за то, что пароль содержит матерное слово. Маму автора такого сервиса ебал.
        Ответить
      • «Все объекты класса Кетер
        Подросли на целый метр.
        И какой теперь длины?
        [ДАННЫЕ УДАЛЕНЫ]»

        Гениально!
        Ответить
        • Мы вдвоем с [УДАЛЕНО]
          Кетер изучали
          Я мудак, и он мудак
          [ДАННЫЕ ПРОПАЛИ]

          Мы с милёнком у метро
          Видели [УДАЛЕНО]
          Кетер то или Евклид
          Всё равно ████ болит
          Ответить
          • Можно смело использовать для сокрытия мата и одновременного добавления криповости:

            Опа, опа,
            Зелёная ограда.
            [ДАННЫЕ УДАЛЕНЫ]
            Так ему и надо!
            Ответить
            • Меня милый провожал,
              Всю дорогу [ванишд] жал.
              А у самых у ворот
              [Багор] засунул прямо в рот
              Ответить
              • Мимо [УДАЛЕНО] дома
                Я без █████ не хожу,
                То Евклида им подброшу,
                То им Кетер покажу.
                Ответить
              • Мы не сеем, мы не пашем,
                Мы валяем дурака,
                На объекте ████ машем.
                [ИНФА ВСЯ УДАЛЕНА]
                Ответить
                • Опа
                  Опа
                  Зелёная ограда
                  [ИНФА ВСЯ УДАЛЕНА]
                  Так ему и надо!
                  Ответить
                  • Я приехала в колхоз
                    Имени Мичурина.
                    Так и знала – класса Кетер,
                    Словно сердце чуяло!
                    Ответить
                    • Myxa. Я приехала в колхоз

                      Исаак Ильич Левитан, из частного собрания
                      Ответить
                      • >Myxa

                        Я муху безумно любил!
                        Давно это было, друзья,
                        Когда еще молод я был,
                        Когда еще молод был я.

                        Бывало, возьмешь микроскоп,
                        На муху направишь его -
                        На щечки, на глазки, на лоб,
                        Потом на себя самого.

                        И видишь, что я и она,
                        Что мы дополняем друг друга,
                        Что тоже в меня влюблена
                        Моя дорогая подруга.

                        Кружилась она надо мной,
                        Стучала и билась в стекло,
                        Я с ней целовался порой,
                        И время для нас незаметно текло.

                        Но годы прошли, и ко мне
                        Болезни сошлися толпой -
                        В коленках, ушах и спине
                        Стреляют одна за другой.

                        И я уже больше не тот.
                        И нет моей мухи давно.
                        Она не жужжит, не поет,
                        Она не стучится в окно.

                        Забытые чувства теснятся в груди,
                        И сердце мне гложет змея,
                        И нет ничего впереди...
                        О муха! О птичка моя!
                        Ответить
                  • Девки в озере купались,
                    SCP- ███ нашли.
                    Целый день потом ███████.
                    [ДАННЫЕ УДАЛЕНЫ]
                    Ответить
                    • Изучали ███ давеча
                      У сontainment breacha.
                      Он по виду как █████
                      А на вкус [УДАЛЕНО]
                      Ответить
                  • Из-за леса, из-за гор
                    Показал объект █████.
                    Но не просто показал.
                    [ДАННЫЕ ПОУДАЛЯЛ]
                    Ответить
                  • Я на севере жила,
                    ██████ копала.
                    Если бы не класс Евклид
                    [ИНФА ВСЯ ПРОПАЛА]
                    Ответить
                    • Кстати, давеча была годовщина Хоя.

                      Двадцать лет прошло, бля. А как вчера!

                      Этого не может быть
                      Промежуток должен быть!
                      Ответить
                    • На мосту стоял прохожий
                      На объект «Эвклид» похожий.
                      Вдруг откуда ни возьми
                      [ДАННЫЕ УДАЛЕНЫ]
                      Ответить
                      • Поработал почтальоном,
                        Есть письмо для Сатаны.
                        Я зашёл в приёмную:
                        [ДАННЫЕ УДАЛЕНЫ]
                        Ответить
                        • Из-за острова на Кетер
                          На простор речной волны
                          Выплывают расписные
                          [ДАННЫЕ УДАЛЕНЫ]
                          Ответить
                          • Захватите хлопцы Кетер,
                            И ложитесь отдыхать
                            А я выйду в сад зеленый
                            Для ██████ яму копать
                            Ответить
                          • Цветёт аномалия в поле у ручья,
                            Эвклида молодого обнаружил я.
                            Эвклида обнаружил на свою беду.
                            Не могу ██████, █████ я не найду!
                            Ответить
                            • Идёт солдат по городу,
                              По ██████████ улице,
                              И от объекта Кетера
                              Вся улица светла.

                              Не обижайтесь, девушки,
                              Но для солдата главное,
                              Чтобы [ИНФОРМАЦИЯ УДАЛЕНА]
                              Ответить
                  • На [УДАЛЕНО] мосту
                    Объект обокрали,
                    В ████ ██████ попа
                    [ДАННЫЕ ПРОПАЛИ]
                    Ответить
                    • [Удалили данные] по рязанской области
                      Раньше ██████
                      А теперь в автобусе
                      Ответить
                      • По реке плывёт █████
                        Из деревни Пердуны.
                        Ну и пусть себе плывёт
                        [ДАННЫЕ УДАЛЕНЫ]
                        Ответить
                        • По реке плывёт верблюд,
                          Его [VANISHED] ебут,
                          Этого не может быть,
                          Показать всё что скрыто
                          Ответить
                          • На недельку, до второго
                            Я уеду в ████████
                            Я за то, чтоб в ████ ███.
                            [ДАННЫЕ УДАЛЕНЫ]
                            Ответить
                            • Мы с приятелем █████
                              Выбивали косяки.
                              Кетер вырвался из ямы!
                              [ДАННЫЕ УДАЛЕНЫ]
                              Ответить
                            • На ██████████ именины
                              Испекли мы каравай:
                              Вот такой вышины,
                              Вот такой ширины
                              [ДАННЫЕ УДАЛЕНЫ]
                              Ответить
                              • Вдруг крикнул Кетер Эйлеру:
                                «Давай с лопаты жрать блины»,
                                Но тут случилось обнуление
                                и [ДАННЫЕ УДАЛЕНЫ]
                                Ответить
                              • Увидала бабка «Кетер»,
                                Зарыдала, как в бреду,
                                И меня ███али также
                                В ████████атом году!
                                Ответить
                                • Ой, налетели ██████ злые,
                                  Ой, да с восточной стороны,
                                  Ой, да сорвали чёрну шапку
                                  [ДАННЫЕ УДАЛЕНЫ]
                                  Ответить
                                  • Не ходите девки в Фонд,
                                    Ничего хорошего.
                                    То прорыв [УДАЛЕНО],
                                    То объект заброшенный.
                                    Ответить
                                  • По деревне мы идем,
                                    Звуки странные слышны.
                                    Но Эвклида мы найдём,
                                    [ДАННЫЕ УДАЛЕНЫ]
                                    Ответить
                                  • Я купил ████████ ███е,
                                    Чтоб порадовать ее.
                                    Свет погас во всем квартале,
                                    Что ж я сделал, е-моё?
                                    Ответить
                                    • В горнице моей светло,
                                      Это от ██████ звезды.
                                      Матушка возьмёт ведро,
                                      [ДАННЫЕ УДАЛЕНЫ]
                                      Ответить
      • ogost 10 июня 2020 насрал: „Я как-то пытался зарегистрироваться в wechat из-за китайских партнёров. Там нужно, чтобы вашу учётку подтвердил любой пользователь wechat с историей больше года. Так вот хотя мою учётку подтверждали партнёры-китайцы, гостившие у нас, каждый мои аккаунты были заблокированы в течении часа с припиской «за спам и/или подозрительную деятельность». Вот так вотъ. Как говорится, не очень-то и хотелось“.

        Может быть, заблокировали не за пароль, а за «подозрительную деятельность», к которой, например, относится вход с американского айпишника?
        Ответить
      • >> CjhjrNsczxJ,tpmzyD:jgeCeyekb<fyfy?

        Я почему-то сразу прочитал этот пароль (не глядя на клавиатуру). Я поехавший.
        Ответить
        • Я после твоей фразы сразу понял что там написано.
          Ответить
  • Я тут 3 дня комп не включал, а у меня вкладки сохраняются когда выключаю браузер. И вот какие намеки я обнаружил!
    Надо принести человеческую жертву чтобы настроить карандаш в gimp и нарисовать pixel art человечка и какие-то рога.
    https://i.imgur.com/x6lFCGg.png
    Ответить
  • https://habr.com/post/513368/
    > Задержаны подростки, взломавшие Twitter
    > Кларк (Kirk) в чате Discord говорит девушке, что является сотрудником Twitter и может дать ей любой аккаунт.
    > Кларк использовал социальную инженерию, чтобы убедить сотрудника Twitter в том, что он является сотрудником IT-отдела, и попросил его предоставить учётные данные для доступа к порталу обслуживания клиентов. Затем Кларк получил доступ к твиттер-аккаунтам известных людей, включая вице-президента Джо Байдена, бывшего президента Барака Обаму и компаний, таких как Apple и Coinbase. Затем Кларк разместил на своих аккаунтах в Twitter сообщение о том, что если биткоины будут отправлены на счета, то они будут удвоены и возвращены жертве.
    > ФБР пояснило, что хакера удалось вычислить через аккаунты на биржах Binance и Coinbase, где Кларк предъявил свои водительские права

    Блядь, в этой новости прекрасно всё: от феерических долбоёбов, искренне верящих, что «Биткоин» можно анонимно выводить на счета, привязанные к реальным ID, и до феерического долбоёба из «Твиттера».
    Ответить
    • А что, любое тело, официально работающее в Клиторе и имеющее доступ к «порталу обслуживания клиентов», что бы это ни было, может пойти и насрать в рандомный аккаунт?
      Ответить
      • Ну он же сосальный инженегр, он сперва сосально наинженегрил сотруднику клитор, а потмо от его лица сосально наинженегрил клитор другим долбоёбам.

        Я просто пересказал коммент выше более понятным языком, даже по ссылке не ходил. Классичесоке наебалово.
        Ответить
    • >>Кларк использовал социальную инженерию, чтобы убедить сотрудника Twitter в том, что он является сотрудником IT-отдела

      какой взлом :))


      from: it_twitter_2020@mail.ru
      subject: urgent: send me all creds you have
      Ответить
      • Помнишь серию x-files, когда чувак мог менять внешность и оплодотворил кучу цыпочек, у которых у всех потом родились дети с хвостами?

        Вот что-то похожее
        Ответить
  • Знаете, мне когда было лет от силы 13-14, я на полном серьёзе продвигал в IT-сообществе
    идею перехода с шестнадцатеричной системы счисления на мою, альтернативную, с нескучными
    обоями и возможностью грабить караваны.
    
    Её главным отличием от шестнадцатеричной было то, что она не содержала в себе цифр.
    Вообще. И я из-за какой-то засевшей во мне тогда навязчивой идеи просто будто помешался
    на этом: даже, помнится, пытался придумать этому логическое обоснование.
    
    Конечно, люди были недовольны. Я тогда не понимал ещё, отчего. Мне в то время казалось,
    что любая идея (в том числе и моя) имеет право на жизнь, вне зависимости от того, будет
    она потом где применяться или нет. В чём-то я действительно был прав — например, любая
    идея действительно имеет место быть.
    
    Но вот форсить это вовсе не обязательно. Из этой фантасмагории спустя несколько лет я
    извлёк важный урок — не всё, что кажется гениальным, — гениально в действительности.

    Михаил Подивилов, создатель «WCT»
    https://habr.com/ru/post/470289/#comment_20719275

    Какой каминг-аут )))
    Ответить
    • Какой каминг аут ))

      А когда мне было 13 лет, я ничего не форсил в IT-сообществе. А ты?
      Ответить
          • А IT-сообщество представляло собой сообщество профессоров в НИИ в очках на резиночке. Там особо не пофорсишь.
            Ответить
            • Ну слушай, я не настолько старый. Вполне себе было айти сообщество в фидо и юзнетах, когда мне было 13 лет.

              Просто я не знал о его существовании, а оно не знало о существовании меня (впрочем, оно и сейчас обо мне не знает)
              Ответить
      • В прошлом году копротивлялся Системе:
        >>> 30-минутный блэкаут в поддержку автора Nginx — Игоря Сысоева
        https://habr.com/ru/post/480204/

        В этом записался в преподаватели:
        >>> Привет, меня зовут Михаил Подивилов. Я специализируюсь на сетевых технологиях и преподаю в Сетевой академии Cisco.
        https://habr.com/ru/post/512110/
        Ответить
      • Я удивлюсь, если он не вляпался в какую-нибудь криптопарашу
        Ответить
          • Зато из его блока я узнал термин Игностици́зм и мне он понравился.

            А вообще тут нечего гыгыкать. Чувак создаёт нехилое визибилити. В сегодняшнем мире энтропия может быть полезна, ну если ты конечно 5 лет назад не назвал негра негром.
            Ответить
            • Визибилити нонче все создают.
              Свое мнение ведь как дырка в заднице -- у каждого есть. И каждый стремится донести его до максимального числа питушков посредством всех двадцати семи социальных сетей и прочих площадок
              Ответить
              • Не каждый. Я - нет. Ты - не знаю, но кажется, что тоже нет.
                Ответить
                • И что, даже твиттера тиктока фейсбука инстаграма телеграма вк одноклассники блога у тебя нет?
                  Ответить
                  • Даже если что-то из этого и есть, то с чего ты взял, что я там окучиваю каких-то петушков?

                    > тиктока
                    - фублять
                    Ответить
                • ГК у тебя есть, как минимум. И мы тут все доносим своё мнение до максимального числа питушков (трёх?).
                  Ответить
                  • Кстати, кто понимает феномен ГК?

                    Почему на каком-то заштатном сайте с говном на аватаре и хуёвом движке вдруг сконцентрировалось столько интересных чуваков?
                    Ответить
                    • > сконцентрировалось

                      Да большая часть уже расконцентрировалась, к сожалению 🙁
                      Ответить
                      • Осетинский рак всех выгнал

                        А может, просто позврослели
                        Ответить
                        • Чо уж на рака пенять.

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

                          Во-вторых, не так много народу потерялось за долгие годы. Тарас давно свалил, wvxvw тоже уже пару лет назад, но, я думаю, его можно засаммонить. Роман уехал в загнивающую и там окуклился, возможно, уже неоднократно, так смог побороть гк-зависимость.

                          Ну и, в-третьих, щас оффтоп-тред за двое-трое суток до краёв, неплохо для трёх петухов, которых вовсе не три: ты да я, да борманд, да гост, пи, д++, иньо, 1024--, инканус, снаут время от времени пробегает и jцифры, ну и ещё разные чуваки другие. Если ты давно тусишь, то должен помнить, как в своё время основной движ на гк был только благодаря тому, что лиспговно пиздел со своими файками.
                          Ответить
                  • Да, визибилити повышается конкретно) На собесе в гугел можно будет хвастаться, что на самом гк с питухами срался
                    Ответить
                    • --покажите гитхаб
                      --у меня нет гитхаба, но есть веточка на говнокоде: там мы с говногостем и питухом обсуждаем NP полные задачи
                      Ответить
                        • Почему у тебя нет гитхаба?

                          У меня есть на самом деле, но там форки питушни, куда я что-то контрибутил, и почти всегда по работе, а своего нету: потому что я не умею чем-то всерьез увлечься, и довести дело до конца(((
                          Ответить
                            • Не правильно это.

                              Надо выбрать язык и технологию, стать в этой области гуру, контрибутить, давать токи, а всё остальное объявить говном.

                              Завидую тем, кто так может
                              Ответить
                      • Гитхаб у меня есть, там конечно не очень много, где-то три репы, в которые стоит посмотреть.

                        Некоторым мало. На это я отвечаю: «Идите на███, я не картинная галерея»
                        Ответить
                      • -- покажите гитхаб
                        -- пожалуйста, вот тут у меня AES на шаблонах, а вот тут на препроцессоре...
                        Ответить
                        • Вы приняты в комитет C++. Ваша первая задача -- добавить header only реализацию AES в std (ну или хотя-бы вы приняты в boost)
                          Ответить
                        • Отлично, теперь переведите, пожалуйста, на «PHP»
                          Ответить
    • Подтверждаю, здесь есть доброе имя добрая слава.
      Ответить
    • Отличный комментарий:

      «Надо продолжать жить как юрлица»
      Ответить
  • https://habr.com/post/513450/
    > В конце июля 2020 года многие пользователи начали замечать, что их ПК на Windows 10 стали медленнее загружаться и подтормаживать при запуске различных приложений, при переключении между приложениями, также наблюдается падении FPS в играх. Оказалось, что во всем виновато автоматическое обновление KB4559309.

    Никогда такого не было — и вот опять!
    Ответить
    • >KB4559309 Update for new Microsoft Edge for Windows 10
      >наблюдается падении FPS в играх

      > оно автоматически в принудительном порядке обновляет старый браузер Edge в системе до новой версии Edge на базе Chromium

      >К сожалению, обновление KB4559309 нельзя просто так удалить из системы

      Нельзя просто так взять и вытащить анальный зонд.
      Ответить
      • Браузер обновили на chromium, и упал FPS.

        А если обновить драйвер видеокарты, то экселевские файлы открываться перестанут.

        А переставишь офис -- сеть отвалится
        Ответить
    • А я думал, что у меня hdd уже начинает того-сего.

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

      Правильная стратегия такая: накатывать новые обновления на спец станцию для проверки, обкатывать там, и потом накатывать их на основные машины.

      К сожалению, для домашних пользователей эта стратегия не работает, так что надо выбирать между говном и говном
      Ответить
      • У пользователей проблемы не из-за каких-то дыр, а из-за «я что-то нажала, и оно само». Много раз видел, как пользователи, обвешанные всякими антивирусами, жалуются на трояны и на винлоки. А всё потому, что запускают все подряд экзешники, скачанные с порносайтов.
        Ответить
        • ну АВГ обычно ловит подобное говно, но не всегда, конечно

          Просто много было случаев, когда хуита расползалась по сетке через дыры в SMB, которые уже год были залатаны, но никто не удосужился поставить апдейт
          Ответить
          • SMB — такая хуета, что интернет-провайдеры зачастую по умолчанию блокируют порты, связанные с этим протоколом.
            Ответить
              • И тут мы приходим к тому, о чём я уже говорил…
                Ответить
                • Напомню, что закрыть SMB на DC нельзя (см SYSVOL), так что отключение обновлений на DC тоже верной стратегией не является
                  Ответить
                  • В случае ядерного взрыва накройтесь простынёй и медленно ползите на кладбище. Медленно — чтобы не создавать паники.
                    Ответить
                    • ну правда, что делать? вариант "не используйте виндуос и AD" не предлагать:))
                      Ответить
                      • А на содержимом этого сисвола есть какие-то подписи? А то может и похуй? Положить его на бесправную тачку да и всё.
                        Ответить
                        • Могу ошибаца, но клиент знает имя DC, и идет именно на него, то-есть sysvol нельзя переложить на другой сервер

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

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

                            Какой сисвол )))
                            Ответить
                            • Чтобы подписать что-то в сисво, надо сначала клиенту в доверенные добавить какой-то серт, верн? Иначе как подпись проверить?

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

                                UPD: Про «OOBE» думал. У майков даже статья на эту тему есть:
                                https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/system-builder-deployment-of-windows-10-for-desktop-editions
                                Ответить
                                • sysprep.

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

                                          Я хочу в политику добавить скрипт petuh.bat.

                                          Мне что, готовить его на отдельной защищенной тачке вне домена, и потом переносить на DC?
                                          Ответить
                                          • > переносить

                                            А ты его по FTP SMB прямо на DC пилишь что ли?
                                            Ответить
                                            • я ничего не пилю к щастью, но виданные мною админы правили групповые политики через оснастку или у себя на машине или по RDP на DC.

                                              Политики превращаются в файлики, и хранятся в sysvol.

                                              Ну батник они могли бы у себя написать, не суть.

                                              Важно, что для установки групповухи в DC достаточно нажать пару кнопок

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

                                                      Я перевыпустил серт, положил его на DC, подписал старым (чтобы лиенты понимали, что его выпустил не хакер), и все клиенты его себе скачали?

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

                                                        > Тащимто, пока что всё выглядет логично, если не учитывать конечно необходимость наличия флешки или ключа для любого действия с AD
                                                        Ну, безопасность требует жертв. У некоторых, вон, проблемы посерьёзнее:
                                                        https://habr.com/post/488268/
                                                        >>> Церемонию подписания ключей Интернета DNSSEC отложили: не могут открыть один из сейфов с материалами для церемонии
                                                        Ответить
                                                        • если у меня спизили старый ключ, то мне придется вручную поставить новый ключ на все машины, а их может быть 10К)

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

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

                                                          А на самом деле поди пара бородатых чуваков с ноутом, вот и вся церемония.
                                                          Ответить
                          • Если в ней указан пароль, то он будет зашифрован AES 256 бит. Но в 2012 году Microsoft опубликовала в MSDN ключ, которым шифруется этот пароль.

                            Бляяя... зачем я полез это читать.
                            Ответить
                            • лолшто? зачем они это сделали?

                              В ком -- в ней? в политике, или в туле?

                              Вообще зачем локальный админский пароль?
                              Если бугур, то я загружусь с локсмита и сброшу его
                              А если нет, то буду под доменным работать
                              Ответить
                              • В туле для управления доменными тачками. Она тоже через sysvol всё это передаёт.
                                Ответить
                      • Запрещать и не пущать. Делать много бэкапов. Максимально изолировать сети, чтобы с компа уборщицы тёти Нины нельзя было достучаться до компа разраба, имеющего доступ к проду.
                        Ответить
                        • Уборщицу тогда придется в другой домен уводить, ведь если она сломает по SMB DC, то может и комп разраба засрать

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

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

        Я просто не знаю
        Ответить
        • Да полно, почитай чейнжлоги что у линукса что у венды.
          Ответить
      • Warning: Consider adding a lang attribute to the html start tag to declare the language of this document.

        Остальное збс
        Ответить
      • А можно, раз индекс есть, в нгк показывать возле номера треда его оффтопный индекс, если есть? Чтоб сразу понимать, это оффтоп-тред или нет
        Ответить
        • Пока что нет, перекатывалка с индексом оффтопов — это отдельное приложение на отдельном сервере. Об интеграции с «НГК» после релиза будем думать.
          Ответить