Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Подтверждаю.
Ровно с тех пор, как разработчики браузеров осознали, что переучивать веб-макак (а среди них программистов практически не было) писать валидное говно - себе дороже. Проще напидорасить костылей. Тут забыли закрыть тег? Похуй, где-нибудь сами закроем. Незаэскейпленный амперсанд в урле? Сами заэскейпим. Макака не знает про doctype? Ну и хуй с ним, нам тоже не особо-то и нужен. Невалидный CSS? Проигнорим, и без него что-то отображается. Макака передала не все аргументы в JS-функцию? Ну пусть будет undefined, вдруг прокатит.
Так и живем, и теперь это хуйня пиздит уже самих веб-макак -- надо теперь зубрить, в каком браузере что и как закостылено, и отлавливать примитивные баги всю ночь, оставаясь в офисе на неоплачиваемый овертайм.
Что ты подтверждаешь-то? Речь шла про то, что html - говно, как и весь веб. А ты макак приплёл зачем-то. Уж макака из говна философский камень точно никак не сделает
Всё он правильно подтверждает. «HTML» и весь веб — говно потому, что при их проектировании в первую очередь учитывались анскиллябры. Это была основная идея создания всей этой питушарской экосистемы: сделать так, чтобы создавать сайты могли даже самые тупые макаки. Благородно, не спорю, но неосуществимо. Тупая макака пишет говно не потому, что инструменты слишком сложные, а потому что тупая.
Есть какие-то документальные подтверждения фразе "при их проектировании в первую очередь учитывались анскиллябры"? Так-то rfc на html2.0 это портянка на 70+ страниц с кучей страшных слов; не слишком ли круто для макаки?
Может, проблема в том, что веб стал решать совсем не те проблемы, для которых изначально создавался? Что HTML, CSS и тем более JS это в принципе не лучшие инструменты для SPA с кучей медиа и канвасами?
Это вообще один из самых мощных инструментов XSS. В основном, правда, скрипт вставляется в более экзотические атрибуты, «<img src="huj" onerror="alert('hacked')">», например. А ещё в древние времена можно было сделать <a href="javascript:alert('huj')"> и получить много лулзов — особенно с форумов, говнодвижки которых такое не фильтровали и позволяли вставлять в [url]/[link]/etc.
То есть оригинальный HTML это что-то типа сегодняшнего мракдауна (ну ок, чуть сложнее, но не суть). Достаточно простая штука для элементарных вещей. Ну как заметку добавить. А потом кто-то решил, что ПОРА: вебдваноль, виджеты-хуиджеты, спа, анимации и фейерверки, резиновый дизайн, мобильные версии, вебсокеты.
Представим себе, что браузеры начали нативно поддерживать маркдаун. И уже через полгода в нём: img, svg, call, angularMd, MarkDart...
This version of HTML has been designed to remain easy to learn and adequate
for many common publishing needs. The language offers more complex constructs
(e.g., forms, scripting) for more sophisticated tasks, but even these mechanism
will become easier to use as powerful HTML authoring tools flourish.
Принято, хотя я и не совсем согласен. Я думаю, что почти про каждый %languagename% можно найти подобный маркетинговый булшит.
И вообще, макаке всё равно на каком языке говнометать, на простом для обучения или на сложном. А вот царю нужна простота и эффективность и массив
> сделать так, чтобы создавать сайты могли даже самые тупые макаки
> неосуществимо
Осуществимо, просто нужно идти не от требований макак, а от требований людей и далее упрощать интерфейс между человеком и машиной, делать его удобней. А также набираться духу и вовремя сливать старые версии в унитаз и создавать язык с нуля, оставляя интерпретатор старой версии в браузере только с правками безопасности.
Например, foreach делает работу удобной, UB - неудобной и непредсказуемой, автокасты - удобной до какой-то степени, исключения - удобной и непредсказуемой и т.п.
>Если стандартизовать ВМ, в которую компилятся ололоязыки
Ну вот Жабу уже стандартизировали.
Почему-то jvm-ололоязычки не особо взлетели.
Самый жопулярным жвм-языком остаётся эта самая жаба.
>оставляя интерпретатор старой версии в браузере только с правками безопасности
И что это даст? Мало того что в старых браузерах не работает новая хипстерская срань, так ещё и новые будут пухнуть от кучи разных интепретаторов старья.
Кложура и Груви стараются быть слишком непохожими на сына маминой подруги, потому в основном популярны только среди выступающих на конференциях.
Тот же Котлин занял свою нишу и в ней потихоньку становится стандартом. С Жабой в целом сравнивать смешно, но - повторюсь - ниша застолблена.
Кроме jvm есть ещё пример llvm. Вопрос же в целесообразности и политической воле. Почему нельзя встроить в браузеры интерпретатор байткода llvm или что там у него?
> в старых браузерах не работает новая хипстерская срань
Как раньше не работала - так и потом не работает. Сейчас ровно то же самое. Даже страница Гугла (одно сраное поле ввода) уже скорее всего в IE5 нормально не откроется.
> новые будут пухнуть от кучи разных интепретаторов старья
Сейчас они всё равно пухнут от интерпретаторов новья и реализации хаков для использования хаков в стандарте для борьбы с предыдущими хаками для предыдущих хаков в стандарте. Что проще, реализовать новый продуманный язык без говна, или впиливать питушню для поддержки "use script", править код в неожиданных местах, который уже никто не помнит, что делает, вставлять затычки для новых багов?
Видимо не дали им возможности запустить код на 2 и 3 в одной программе?
Иначе можно было оставить старые классы на 2, а новые писать на 3. Вот NodeJS поддерживает и свои модули CommonJS, и модули новомодных версий JS, можно элементарным образом в одном сервере использовать сразу и старое говно, и новое говно.
Есть же питухизация типов, чтобы JS поднять в TypeScript без переписывания? Есть же сишные библиотеки, которые работают в питоне без переписывания алгоритма? Так почему с C на Python переписывать не надо было, а с Python на Python - надо?
Так в 2->3 совместимость сломали. А если мы говорим про виртуальную машину — то однажды нам таки придётся поломать какое-нибудь ABI — и всё, привет блядскому цирку с переписыванием/переконпелированием либ на 10+ лет.
> совместимость сломали
Ну вот работает же оно как-то вместе. У меня под Windows с интелловским процессором можно запускать как Python2, так и Python3. Работают на одном и том же железе.
И вообще, я же писал про C. Почему модули на C, языке без ГЦ, обязательных табов и с указателями вместо ссылок, смогли прокинуть в python? Почему в C++, где имена функций компилятся в совершенно другие иероглифы, чем было бы в C, в стандарте описывается несовместимая питушня, и где было норм, стало УБ, смогли прокинуть сишную питушню?
> У меня под Windows с интелловским процессором можно запускать как Python2, так и Python3.
Это потому, что и «Python2», и «Python3» — это программы, написанные на «C» и переведённые на мышиные коды одного и того же ISA.
> Почему модули на C смогли прокинуть в python?
Аналогично, потому что интерпретатор «Python», сконпелированный в мышиные коды, позволяет дёргать другие мышиные коды.
Да, идея создания единой ВМ с едиными инструкциями и полной совместимостью всех со всеми а-ля asm выглядит круто, но у этого подхода есть несколько крупных подводных камней.
1. Неизменность ВМ. Мы не можем вносить изменения в то, как работают уже задокументированные инструкции — иначе сломается вообще всё. Да, перекомпиляция может быть частичным выходом — но, будь у нас полный и тотальный опенсорс, жить вообще было бы легче.
2. Несовместимость высокоуровневых абстракций. Любые структуры данных и уникальные концепции языка придётся переводить сначала в термины ВМ, а потом — обратно, причём делать это по каким-то сложным правилам. Эти правила тоже могут (а на длительном отрезке времени — будут) меняться, и в результате мы получим, что в одной версии языка какая-нибудь UTF-строка будет с квадратиками, а в другой — со смайликами. Всё, потеря совместимости, цирк, пиздец.
3. Сложность межязыковых и межверсионных вызовов. Далеко ходить не надо, достаточно попробовать сделать библиотеку с функцией, возвращающей std::string. Спойлер: работать будет только с модулями, скомпилированными одной и той же версией компилятора, на одной и той же машине и с одними и теми же флагами. И то не факт. С сишкой всё было куда проще, потому что по факту в ней не нет никаких высокоуровневых абстракций, а всё что есть — плюс-минус идеально ложится на x86. Она, по сути, просто удобный ассемблер с хорошим препроцессором
Вообще, x86 ассемблер — это очень хороший пример, во что такая «Единая ВМ» превратится через 50+ лет. В эпических размеров нагромождение костылей, хаков, тухлого легаси и неортогонального говна.
> А если мы говорим про виртуальную машину — то однажды нам таки придётся поломать какое-нибудь ABI — и всё, привет блядскому цирку
Поломаются только компиляторы старых версий языка, и их заставят компилировать код под новую ВМ. Может быть, это будет медленней, но это не важно, т.к. рост производительности восполнит эту потерю, а свежее производительное говно будут клепать под новые версии. Но ничего из пользовательского кода переписывать не надо будет.
Совсем старые версии будут медленно отмирать как отмерла сейчас 16битная питушня. Но это будет всё равно лучше, чем сейчас, когда твой код не отмирает явно и сразу по чьему-то приказу о конце поддержки, а постепенно становится невалидным из-за множества мелких изменений.
Да, кстати, ведь сейчас уже есть такая ВМ, называется «Common Language Runtime». Под неё даже куча языков есть с приставкой «#» или «.NET». Но увы, Всеобщего Единения не получилось: её набор инструкций заточен под «C#», для остальных языков это неудобное и ненативное говно. Более того, в общем смысле он заточен под ООП-языки, а потому компилировать в него какую-нибудь, например, функциональщину — абсолютно бессмысленная затея.
Добавлю ещё всякой ООП-питушни.
Множественное наследование, наследование реализации, интерфейсы, миксины;
Поддержка свободных функций. В «Java», например, нет никаких «функций» (только «методы»), и именно поэтому в «JVM» у инструкций invoke* есть обязательный параметр объекта/класса. Хочешь компилить под «JVM» язык со свободными функциями — изволь городить ёбанные костыли со скрытыми классами-пространствами имён.
Модификаторы доступа — начиная тем, что в каких-то языках могут быть более хитрые модификаторы, типа недавно обсуждавшегося на «ГК» «strict_private» (поля, к которым есть доступ только из «private» методов), и заканчивая языками с полным их отсутствием.
В общем, так можно продолжать до бесконечности, а решение всех этих проблем было придумано давным-давно: спуститься на несколько уровней ниже, где ничего, кроме байтов, и нет. А над всеми этими питушарскими абстракциями пусть конпеляторы пыхтят.
Это Философский Камень и Великая Мечта j123123, которую он впервые обнародовал в https://govnokod.ru/15967#comment232055. Гомоиконы всё исправят, всё пофиксят, и написать любую программу на любом языке с ГОМОИКОНАМИ (такое написание, кстати, является каноническим) будет так же легко, как выпить чашечку кофе.
А вот — главный артефакт гомоиконистов, Первая Гомоикона:
(((L I S P )( L I S P ) ( L I S P ) ( L I S P )))
* ( \ \ ) \ *
B( ) \ ) ) B
e( `. ) ) : e
a` ) ) \) ) a
t \ ) ) ) \\\ --__ \\ : t
i \ \) _--~~ ~--__) \ ) i
n \ \_-~ ~-_\ ) n
g \_ \ _.--------.______\) ) g
\ \______(( _ ___ _ (_(__H \ )
t \ . S ___) ______ (_(____t ) ) t
h (\ ) I ____)) APPLY\ (_____D )_) h
e ( (\) C_____) EVAL ) (___P ) \ e
( ( _P_____)\______) )) _) ) \
a ( \ )__ \\_________)) (__) ) a
v ( \ \____) `---- --' ) v
e ( \_ ___\ )_ _) ) e
r ( ) ( ) \ ) r
a ( ) ( λ ) \ ) a
g ( ) ) ( ) \ )g
e ( ) ) (__)(___) ) )e
s ( ) ( ) ) )s
* ( ) ( ) ) )*
(((L I S P )( L I S P ) ( L I S P ) ( L I S P )))
> В сиподобных языках, реализация гомоиконности мне кажется принципиально невозможной.
Так а в чём проблем? Дать доступ пргорамме к своему АСТ.
Или можно сделать как в форте, дать программе доступ к исходнику, переменным и подпрограммам транслятора и конпелятора, дать доступ к мискоуровневому коду.
Наипервейшая проблема в том что нотация инфиксная. То есть код невозможно выразить как формат данных.
Это не лисп где нотация префиксная, и не форт, где она постфиксная.
>Дать доступ пргорамме к своему АСТ.
Это не будет гомоиконность. Мы должны манипулировать не АСТ, а исходными кодом-данными. Должен быть так сказать self-eval.
Так а в лишпе ты тоже не исходным кодом оперируешь, ты оперируешь уже готовыми списками которые получены из исходного кода, и синтаксис которых ты не можешь изменить, можешь только мутить что-то на их основе. С аст та же питушня, только по более сложным правилам.
А если делать гомоиконы по образу форта, то уже будет реальный доступ и к исходному, и к скомпилированному коду, ибо гомоиконы там царские, императивные и низкоуровневые: в нём есть доступ к сырому исходнику, как к байтам в памяти, такой же доступ к скомпилированному коду, к записям в словаре и т.д. Вдобавок форт могут парсить сами же фортовские определения по мере исполнения, т.е. в форте нотация постфиксная только для начального набора слов, и то не для всех, многие слова являются префиксными, особенно определяющие слова, так же есть слова берущие аргументы сразу и из стека, и из исходного кода — эти слова вполне можно считать инфиксными. Т.е. в отличии от лиспа и всех прочих языков в форте нет ни какого-то фиксированного синтаксиса, ни даже фиксированного лексического строения, в программе на форте можно встретить абсолютно любую конструкцию и охуеть, я даже встречал интерпретатор васика на форте, который являлся просто набором форт-слов, такую же питушню можно проделать и для си-подобного синиаксиса.
>Гомоиконных фортраноподобных языков не может быть по определению (т.как в доисторические времена, люди которые планировали Алгол считали, что язык должен состоять из трех уровней, "машинного кода", т.е. непосредственно набора инструкций, "обобщенного представления", т.е. непосредственно правил языка, "конкретных интерпретаций" правил языка, например, локализаций, экстрапозиций и т.д.)
Реально за все эти годы я осознал, что Философский Камень всегда был у нас в кармане — и это С++
Просто не понимаю главного аспекта: как совместить гомоиконность с быстрым исполнением кода.
Лисп-машины остались лишь фантазиями wvxvw. Может какая-то извращённая форма AOT. Однако неизбежно остаётся интерпретируемый eval.
Если под гомоиконностью понимается простота, что я могу за день написать парсер и тормозной, но рабочий интерпретатор байт-кода вм (в отличие от жабы или питона), то это ок.
C без ОО, без именованных аргументов, без ГЦ. Pythob - с ними, но прокинуть удалось.
Думаю, обратно тоже можно прокинуть, если нужно.
А уж сделать такое, когда вся логика компиляторов подчиняется тебе, вполне реально.
* Исключения - обернуть try-catch и кодом возврата,
* кодам возврата сгенерировать исключения,
* имена классов вписать в имена методов, если классы были, не не стало,
* сгенерировать класс по имени файла, если классов не было, но появились,
Главное - чтобы старый код внешне работал как раньше, а новый уже может в случае смены парадигмы приспосабливаться и вызывать fileX_Pitux22E1_kokok(&p) из старой библиотеки вместо p.kokok();
>Поломаются только компиляторы старых версий языка, и их заставят компилировать код под новую ВМ
Не хотелось разрушать ваши фантазии, но дело в том что совершенно разные языки не смогут гладко взаимодействовать между собой.
Это профанский взгляд человека, который никогда не линковал/перелинковывал разные abi с разными вызовами.
У нас есть бибилотека собранная под процессор интел. Она написана на языке с определённой фичей (например exceptions).
Мы пытаемся слиниковать её с другим языком где этой фичи нет.
Какой выход из ситуации?
Или у нас есть исключения, но на уровне VM реализованы они с разной семантикой (dwarf, sjlj).
Сделать такое, когда вся логика компиляторов подчиняется тебе, вполне реально.
Гладкое взаимодействие не нужно. Старый код должен работать как раньше, новый код может использовать костыли для вызова старого.
Старый код может вызываться через дополнительные абстракции, т.к. он был написан под старые машины, которые требовали меньше.
ABI не нужно. У нас же браузер, компилятору все исходники доступны. Совместимость версий проверена авторами компилятора, код просто компилируется новым компилятором и работает.
Да, будут ситуации, когда какой-то пидор использовал недокументированную питушню, и его код сломался, но его предупреждали.
Изначально речь шла о VM. Я, правда, всё это время подразумевал и, к сожалению, не писал, что исходники желал бы иметь, как и в современном вебе.
Идея была в том, чтобы иметь возможность перегонять исходники в VM всё более и более свежими компиляторами, а байткод под VM уже единообразно оптимизировать/исполнять/кобенировать каким-нибудь мощным питуизатором. Так, чтобы компиляторы в байткод были наиболее простыми, и всякая сложная питушня, связанная со строением VM и алгоритмами питуизации, менялась редко и мало.
Зато я постоянно натыкаюсь на программы, которые работают только в восьмой джаве… или только в седьмой… или в одиннадцатой, а в старых не работают — и так до бесконечности. А ёбанный адобе взял да скрыл старые архивы JVM. В итоге чтобы запустить какое-то старое говно нужно лазить по файлопомойкам в поисках подходящего говножвма.
Для тебя целый Apache Thrift придумали и всякие там gRPC, чтобы ты мог писать клиент и сервер не на одном языке, а оно всё равно б работало! Так что не надо ныть
Нет, не осуществимо. Ты можешь сколько угодно упрощать интерфейс «человек-машина», но это никак не сделает тупых макак умными. А тупые макаки ничего умного создать не могут просто по определению.
Главное отличие тупой макаки от человека в том, что макака в принципе не учится. Она пишет гостевуху с инъекциями и течёт. Она писала говно десять лет назад, пишет сейчас — и через десять лет будет писать точно такое же говно. Ей в принципе не надо обучаться, она этого не хочет, ей это нинужно. Она осознанно не желает учиться, ей достаточно копировать код с «SO».
Не может быть. Макака учится, как минимум, в современных супермаркетах, где раз в некоторое время делают большую перестановку. После перестановки макака учится находить продукты, между перестановками закрепляет знания.
Ну и если макака уже научилась нагугливать работающий код на SO, научилась вставлять его в нужные места, это говорит о её потенциале и способности учиться.
А ты думаешь, что какой-то из бесчисленных клонов Хрома вдруг станет user-friendly и вернёт нам наш 2007-ой? Я думал, они существуют только для того, чтобы заебенить тебе очередной яндекс-бар
Ещё все забывают про великолепную «Picasa» (серьёзно, это самый лучший просмотрщик фото: предельно быстрый, очень простой и совершенно не перегруженный ненужным говном) и «Google Inbox», который запускали с огромным пафосом, закрытой бетой, инвайтами (кажется, их даже продавали поначалу!) и всем таким… а потом тихо слили в унитаз.
Вот я со своей «Пикасой» два раза щёлкаю по фоточке — и она мгновенно появляется на полупрозрачном затенённом фоне. Я её могу подвигать, позумить (с очень красивым анимированным изменением масштаба), убрать фон и оставить висеть маленьким окошком, развернуть в фуллскрин. А тот же «Xnview», который я только что проверил, сразу открывает несворачиваемый фуллскрин, на колёсике мышки имеет листание фоток вместо зума (зачем? зачем?), фотку подвигать не даёт, в левом верхнем углу показывает какую-то дрисню, да ещё и после закрытия оставляет висеть какое-то говноокно. Это неудобно.
Нет, я не спорю, что эти комбайны наверняка дают куда больше возможностей по организации галерей, систематизации гигабайт фотографий и тому подобное — но вот этого предельного функционального минимализма, который был (увы, в прошедшем времени) визитной карточкой «Гугла», у них нет.
> листание фоток вместо зума (зачем? зачем?)
Мерзкая питушня. Привязывать что-то такое к колёсику - грешновато. В самой Windows есть настройка, сколько у.е. значит один щелчок колеса. Но есть ведь ещё и тачпады, где собственное ПО может оверрайдить эту настройку и накручивать какую-то логику. Но что важно, если даже на мыши можно легко прокрутить больше, чем надо, на тачпаде ты вовсе не чувствуешь, что есть один щелчок, а что - много.
Колёсико мыши - зло.
> обрезать JPEG без потерь
Это как в ворде, когда посылаешь резюме с твоим фото по грудь, а ихний админ вдруг узнаёт всех твоих друзей-бухариков и обстановку вашего гаража?
Клёвая система инвайтов была: вбиваешь чей-нибудь е-мейл в поле для отправления инвайта, «Гуглоплюс» показывает имя и аватарку пользователя и вроде даже ссылку на его страницу. Великолепное средство деанона по е-мейлу, просто кнопку сабмита нажимать не надо.
Когда нормальный человек регистрирует почту, он подразумевает, что с ней связаны имя-фамилия, которые будут стоять в поле From. Обычно это Иван Иванов <ivan.ivanov@gmail.com> Иначе заводить почту не требуется, т.к. теряется вся суть. И если кто-то узнал, что ivan.ivanov@gmail.com принадлежит Ивану Иванову, то это просто удобно, и удобно как для Ивана Иванова, так и для его адресантов.
Когда человек хочет остаться анонимным, он создаёт учётную запись почты с логином, который не напоминает о его имени и вводит фэйковые имя-фамилию. Разве не логично?
Из тех списков:
• «iGoogle» — это самый настоящий проект «веб-джва-ноль». Ты мог собирать страницу из виджетов. Что-то типа расшаренного рабочего стола. Таких проектов было немного. У «Яндекса» и у «Яху» было что-то аналогичное, были отдельные проекты «Pageflakes» и «Netvibes». Последний вроде даже живой.
Всё прочее, что называют «вебджванольным», на самом деле не передаёт суть «Web 2.0».
• «KNOL» — было столько шума. Называли убийцей «Википедии».
• «Google Buzz» — предок «Твиттера» и «Гуглоплюса». Его создатели потом создали «Friendfeed», который был выкуплен и закрыт «Фейсбуком».
• «Jaiku» — ещё один «Твиттур».
• «Google Answers» — «Ответы@Mail.ru», только другого поставщика.
• «Google Talk» — по сути сервер «XMPP» («Jabber»).
Помню, что много шума было про «Google Wave», но его закрыли сразу после бета-тестирования, так что я даже не успел узнать, что это такое.
> в гугловом ютубе хер найдёшь нужный коммент
Слава богам! Там обычно пишут такое, что не то что найти не хочется, но наоборот - только развидеть и больше никогда не встречать.
Такое ощущение, что аудитория Ютуба по большей части - идиоты. И тут даже не надо говорить о "давайте зарядем мобильник автора адин лайк адин працент". Даже к приличным видео популярны метакомментарии "а что просмотров меньше, чем лайков" или "90% комментариев про А, 10% про Б" или "никто: абсолютно никто: автор: <какая-то херня>" и подобное. И все они повторяются. Отдельный шик - повторять одну и ту же быдлошутку по быдломему.
Ээээ.
Компания, имя которой мутировало в глагол, обозначающий интернет-поиск, не может сделать нормальную индексацию текстовых комментариев НА СВОЁМ же сайте.
Мне одному кажется, что здесь какой-то подвох?
>что не то что найти не хочется, но наоборот - только развидеть и больше никогда не встречать
Просто не надо искать такое.
>или "никто: абсолютно никто: автор: <какая-то херня>" и подобное
Меньше надо смотреть видео «в трендах».
Не знаю, но лично мне такие коменты почти не попадаются.
Это уже зависит от конкретной реализации и конкретного читателя.
Например, x = /<b>(.*?)<\/b>/ легче понять, чем раздутую грамматику XML или даже возню с нодами после парсинга стандартным парсером.
Нельзя не потому, что теоретические ограничения есть, ,͉̬͉͚̩͙ а͇͚́ ̫ͅп̶̞̰от̝̮о̫͕̹̩͕̥̭м̦̭̤͖̝̞̙у̪̯ ̣͡ч̱͘то̢ ̮̖̮͞е͏̶̖͓̥̞с̴̩̣͜л̡͓̣̳͘и̙̮͖̰̗ͅ ͉͙̗̹̹̝̜͙͜т̵̶̰̗̥̬а̮̤̰͎̕к̨̭̙̰͠͠ ̡̛͕̹́д̧͚̺е̴̝̬͍̘̘̕л̶̺̰а̳̣̪̤̣̮̺̣͕т̹͍͕̦͈̣̖͝ ь͖̬̠ ̘͔͢—̤͎͕͕̫̠ ̯̠̫̟̗̀͞т͚̪͟͟͝о̱̀ ̴̠̪̠̗̦м͓̰̦͔̘̭̻̈ͦ̈͗̂̓͢͞о̽̆̌͊ͫ̋͜҉̠̣̪̹ж̷̠̓͗ ͇̤е̭̖̝̲͈̬̲̙̑ͣͣ̾ͥт̗͈͇͕̘͍͆̓͐̇̐͂ͧ̋͢ ͚̩̈͋ͮ̂̅͒п̡̺̳̜͕̀ͬ͜р̦̺͚̘̙̬͕̼ͦͤ́и̡͍ͮ̇̊̌̍ͮ̄͘ ̻й̛̯͓̼́̈̋̌̏̿ͫ͠ͅт̪͙͇͎̣̟̬̓ͨ̉ͭ̉͊͗ͅи̝̟̋̄ͩ͑ͧ̚ ̖̞̠̳̮ ̢͇̠̟͉͎̝̺̹̼̈̓ͪ̈́͐ͬ̆̃́О̧̠͇̭͔̲͍̹̒̈Н̶̝̫͛́̃̇̓. ̧͛ͮͧ͋̀̓ͮͪ͏͎̹̤̬̘̲̳̺̟
> Ну ты дебил.
А я при чём? Это к разработчикам «f-строк». А r да, надо на rb заменить.
> lxml пробовал?
>>> Я даже больше скажу: сейчас содержимое [code] — тег <pre> — в постах вываливается внутрь описания, которое из себя представляет элемент <p>. А внутри <p> использовать блочные теги нельзя. Такой HTML — невалидный. Умный же браузер (и столь же, мать его, умный lxml.etree.HTMLParser) просто тихо закрывает тег <p> перед <pre> — поэтому в сток и попадал только текст.
При том, что «f-строк» для байтов не завезли, а «b'<{' + new_tag + b'} class="description">'» я посчитал бо́льшим говном.
> Я там вроде написал
Не нашёл, проверь.
> тестовыми данными
HTML-код https://govnokod.ru/26373.
> рабочий проблемный кусок
«parse_post» в NGK до последнего коммита. Ну или можешь открыть https://govnokod.ru/26373 в браузере и в «Инспекторе элементов» полюбоваться на <p>, закрытый сразу перед <pre>. И на «<p></p>» в конце.
Кстати, почему в первом сообщении об ошибке кавычки двойные, а во втором — одинарные? Почему первое с маленькой буквы, а второе — с большой? Почему двоеточие только во втором сообщении? Разные люди писа́ли обработку ошибок?
А в «Python» вообще с самосогласованностью беда. Тяжёлое наследие времён, когда он писался на коленке в одно рыло. К счастью, Гвидо оказался поумнее Эйха, а потому совсем уж вонючего дерьма наклал не много. Сейчас в основном остались мелочи и багры с именованиями, вроде задепрекейченных Thread.getName()/setName() и незадепрекейченных PrettyPrinter.isreadable() с heapq.heappushpop().
Рагуляркм не нужны, в Сноболе прекрасно без них жили, тем более хтмл не рагулярен:
BEGIN
SOURCE = "<p>bla<p>bla bla</p></p>"
TAG_CONTENT = ARB *TAG ARB | ARB
TAG = "<p>" TAG_CONTENT "</p>"
SOURCE TAG . OUTPUT
END
ARB — наименьшая строка произвольных символов
*TAG — отложенное вычисление, значение TAG получают только при обращении к TAG_CONTENT, это нужно чтоб работала рукурсия в паттерне
| — наверное и так понятно, что это "или"
SOURCE TAG — собсно сам паттерн матчинг.
Точка присваивает совпадение в переменную справа, OUTPUT — "переменная" для вывода.
Любой формат с тегами используют только идиоты.
HTML имеет смысл только для страницы браузера, читаемой человеком.
Очевидно, что всё остальное - ненужно.
На базе этого говна ты ничего нормального не сделаешь.
Любой теговый формат - мусор.
Любая обработка тегов - мусор.
Любые данные в теговом виде - мусор.
Ровно с тех пор, как разработчики браузеров осознали, что переучивать веб-макак (а среди них программистов практически не было) писать валидное говно - себе дороже. Проще напидорасить костылей. Тут забыли закрыть тег? Похуй, где-нибудь сами закроем. Незаэскейпленный амперсанд в урле? Сами заэскейпим. Макака не знает про doctype? Ну и хуй с ним, нам тоже не особо-то и нужен. Невалидный CSS? Проигнорим, и без него что-то отображается. Макака передала не все аргументы в JS-функцию? Ну пусть будет undefined, вдруг прокатит.
Так и живем, и теперь это хуйня пиздит уже самих веб-макак -- надо теперь зубрить, в каком браузере что и как закостылено, и отлавливать примитивные баги всю ночь, оставаясь в офисе на неоплачиваемый овертайм.
https://www.setwalls.ru/pic/201304/2560x1440/setwalls.ru-19347.jpg
Может, проблема в том, что веб стал решать совсем не те проблемы, для которых изначально создавался? Что HTML, CSS и тем более JS это в принципе не лучшие инструменты для SPA с кучей медиа и канвасами?
Они начинаются с тегов <script> <link> <iframe>
<img src="javascript:scriptushok.koko()">
Но с появления вёба, таких трюков придумали миллионы.
И каждый раз в браузеры впиливают всё новые костыли, проверки и говнотехнологии типа corsов, js-only кукисов, SameSite.
говно. ЧТД
HTML говно выглядит как говно, и работает как говно.
Поскольку является ёбанным, неортогональным, избыточным, оверхедным, ансекьюрным говном.
То есть оригинальный HTML это что-то типа сегодняшнего мракдауна (ну ок, чуть сложнее, но не суть). Достаточно простая штука для элементарных вещей. Ну как заметку добавить. А потом кто-то решил, что ПОРА: вебдваноль, виджеты-хуиджеты, спа, анимации и фейерверки, резиновый дизайн, мобильные версии, вебсокеты.
Представим себе, что браузеры начали нативно поддерживать маркдаун. И уже через полгода в нём: img, svg, call, angularMd, MarkDart...
И вообще, макаке всё равно на каком языке говнометать, на простом для обучения или на сложном. А вот царю нужна простота и эффективность и массив
> неосуществимо
Осуществимо, просто нужно идти не от требований макак, а от требований людей и далее упрощать интерфейс между человеком и машиной, делать его удобней. А также набираться духу и вовремя сливать старые версии в унитаз и создавать язык с нуля, оставляя интерпретатор старой версии в браузере только с правками безопасности.
Например, foreach делает работу удобной, UB - неудобной и непредсказуемой, автокасты - удобной до какой-то степени, исключения - удобной и непредсказуемой и т.п.
Python 3.
Не взлетит.
Компилим всё под ВМ, а там уже оптимизации и жиды.
Ну вот Жабу уже стандартизировали.
Почему-то jvm-ололоязычки не особо взлетели.
Самый жопулярным жвм-языком остаётся эта самая жаба.
>оставляя интерпретатор старой версии в браузере только с правками безопасности
И что это даст? Мало того что в старых браузерах не работает новая хипстерская срань, так ещё и новые будут пухнуть от кучи разных интепретаторов старья.
Тот же Котлин занял свою нишу и в ней потихоньку становится стандартом. С Жабой в целом сравнивать смешно, но - повторюсь - ниша застолблена.
Кроме jvm есть ещё пример llvm. Вопрос же в целесообразности и политической воле. Почему нельзя встроить в браузеры интерпретатор байткода llvm или что там у него?
Кресты, Кресты, Кресты.
Написан крестовиками на крестах, как бекэнд для clang (компилятор крестов).
>Почему нельзя встроить в браузеры интерпретатор байткода llvm или что там у него?
Царь недавно всё объяснил.
https://tsar1997.blogspot.com/2019/10/wasm.html
Так царь типа за wasm?
Как раньше не работала - так и потом не работает. Сейчас ровно то же самое. Даже страница Гугла (одно сраное поле ввода) уже скорее всего в IE5 нормально не откроется.
> новые будут пухнуть от кучи разных интепретаторов старья
Сейчас они всё равно пухнут от интерпретаторов новья и реализации хаков для использования хаков в стандарте для борьбы с предыдущими хаками для предыдущих хаков в стандарте. Что проще, реализовать новый продуманный язык без говна, или впиливать питушню для поддержки "use script", править код в неожиданных местах, который уже никто не помнит, что делает, вставлять затычки для новых багов?
Хаха. Да в мире кодинга, пожалуй нету задачи сложнее, чем реализовать такой язык «без говна».
https://xkcd.com/927
Опять же не понят мой исходный коммент.
Не передать сколько боли было в питух сообществе при портировании сырцов с 2ки на 3ку.
Иначе можно было оставить старые классы на 2, а новые писать на 3. Вот NodeJS поддерживает и свои модули CommonJS, и модули новомодных версий JS, можно элементарным образом в одном сервере использовать сразу и старое говно, и новое говно.
Есть же питухизация типов, чтобы JS поднять в TypeScript без переписывания? Есть же сишные библиотеки, которые работают в питоне без переписывания алгоритма? Так почему с C на Python переписывать не надо было, а с Python на Python - надо?
Ну вот работает же оно как-то вместе. У меня под Windows с интелловским процессором можно запускать как Python2, так и Python3. Работают на одном и том же железе.
И вообще, я же писал про C. Почему модули на C, языке без ГЦ, обязательных табов и с указателями вместо ссылок, смогли прокинуть в python? Почему в C++, где имена функций компилятся в совершенно другие иероглифы, чем было бы в C, в стандарте описывается несовместимая питушня, и где было норм, стало УБ, смогли прокинуть сишную питушню?
Это потому, что и «Python2», и «Python3» — это программы, написанные на «C» и переведённые на мышиные коды одного и того же ISA.
> Почему модули на C смогли прокинуть в python?
Аналогично, потому что интерпретатор «Python», сконпелированный в мышиные коды, позволяет дёргать другие мышиные коды.
Да, идея создания единой ВМ с едиными инструкциями и полной совместимостью всех со всеми а-ля asm выглядит круто, но у этого подхода есть несколько крупных подводных камней.
1. Неизменность ВМ. Мы не можем вносить изменения в то, как работают уже задокументированные инструкции — иначе сломается вообще всё. Да, перекомпиляция может быть частичным выходом — но, будь у нас полный и тотальный опенсорс, жить вообще было бы легче.
2. Несовместимость высокоуровневых абстракций. Любые структуры данных и уникальные концепции языка придётся переводить сначала в термины ВМ, а потом — обратно, причём делать это по каким-то сложным правилам. Эти правила тоже могут (а на длительном отрезке времени — будут) меняться, и в результате мы получим, что в одной версии языка какая-нибудь UTF-строка будет с квадратиками, а в другой — со смайликами. Всё, потеря совместимости, цирк, пиздец.
3. Сложность межязыковых и межверсионных вызовов. Далеко ходить не надо, достаточно попробовать сделать библиотеку с функцией, возвращающей std::string. Спойлер: работать будет только с модулями, скомпилированными одной и той же версией компилятора, на одной и той же машине и с одними и теми же флагами. И то не факт. С сишкой всё было куда проще, потому что по факту в ней не нет никаких высокоуровневых абстракций, а всё что есть — плюс-минус идеально ложится на x86. Она, по сути, просто удобный ассемблер с хорошим препроцессором
Питон сочетает лучшее из двух миров: портабельность сишки и скорость интерпретируемой скриптухи.
Поломаются только компиляторы старых версий языка, и их заставят компилировать код под новую ВМ. Может быть, это будет медленней, но это не важно, т.к. рост производительности восполнит эту потерю, а свежее производительное говно будут клепать под новые версии. Но ничего из пользовательского кода переписывать не надо будет.
Совсем старые версии будут медленно отмирать как отмерла сейчас 16битная питушня. Но это будет всё равно лучше, чем сейчас, когда твой код не отмирает явно и сразу по чьему-то приказу о конце поддержки, а постепенно становится невалидным из-за множества мелких изменений.
Почему?
Для связки языков нужны некие интерфейсы.
Вызовы старых кодов js (как стандарта де-факто) будут возвращать «новым» «улучшеным» версиям языка jsные объекты. Потому что ничего другого там нет.
А это старые-добрые костыльные мапы с valueOf и toString.
То есть из «нового» языка всегда будут торчать уши старого.
Потому сишка до сих пор — основа. Минималистичная и божественная.
Если baseline язык использует исключения, придётся везде иметь исключения (-fno-exceptions никто не будет пилить).
Если там есть рефлексия или рантайм инфа по типам, то и её нужно везде поддерживать.
Если есть именованные аргументы — без них ABI опять поломаются.
Добавлю ещё всякой ООП-питушни.
Множественное наследование, наследование реализации, интерфейсы, миксины;
Поддержка свободных функций. В «Java», например, нет никаких «функций» (только «методы»), и именно поэтому в «JVM» у инструкций invoke* есть обязательный параметр объекта/класса. Хочешь компилить под «JVM» язык со свободными функциями — изволь городить ёбанные костыли со скрытыми классами-пространствами имён.
Модификаторы доступа — начиная тем, что в каких-то языках могут быть более хитрые модификаторы, типа недавно обсуждавшегося на «ГК» «strict_private» (поля, к которым есть доступ только из «private» методов), и заканчивая языками с полным их отсутствием.
В общем, так можно продолжать до бесконечности, а решение всех этих проблем было придумано давным-давно: спуститься на несколько уровней ниже, где ничего, кроме байтов, и нет. А над всеми этими питушарскими абстракциями пусть конпеляторы пыхтят.
Ах да, и чтоб гомоиконы!
Что это такое?
В каждом треде какой-то ФП-мемчик, который я пропустил.
Сепульки какие-то нетрадиционной ориентации?
А вот — главный артефакт гомоиконистов, Первая Гомоикона:
ЛООООЛ. Вот теперь всё стало ясно.
Картинка вместо тысячи слов.
>Это Философский Камень и Великая Мечта j123123
Н-н-н-нооо тут есть логическое противоречие.
В сиподобных языках, реализация гомоиконности мне кажется принципиально невозможной. Это как постройка вечного двигателя.
Именно в силу царской императивности и нерегулярности синтаксиса.
Скорее как поиск девяти миллиардов имён Бога. Стремление к Абсолюту, к Вечности.
https://ru.wikipedia.org/wiki/Девять_миллиардов_имён_Бога
У Аллаха, мир Ему, C99 имён.
>Стремление к Абсолюту, к Вечности.
Так это и есть С++. Должен быть миллион парадигм. Одновременно ноль, одна, сто, девять миллиардов и бесконечность.
Это помогает понять суть и даёт умение облекать её в произвольные формы.
Разные парадигмы, в которых можно сказать одно и том же.
С++ учит мыслить шире и не привязываться к синтаксической конкретике, помогает уйти от операторов к голым идеям и архетипам.
Как учил Платон, который доработал сишный идеализм Сократа, в объективный идеализм.
А заедушники увязли в балаболии, так и не научившись абстрагировать идею от формы.
https://ru.wikipedia.org/wiki/99_имён_Аллаха
Так а в чём проблем? Дать доступ пргорамме к своему АСТ.
Или можно сделать как в форте, дать программе доступ к исходнику, переменным и подпрограммам транслятора и конпелятора, дать доступ к мискоуровневому коду.
Наипервейшая проблема в том что нотация инфиксная. То есть код невозможно выразить как формат данных.
Это не лисп где нотация префиксная, и не форт, где она постфиксная.
>Дать доступ пргорамме к своему АСТ.
Это не будет гомоиконность. Мы должны манипулировать не АСТ, а исходными кодом-данными. Должен быть так сказать self-eval.
А если делать гомоиконы по образу форта, то уже будет реальный доступ и к исходному, и к скомпилированному коду, ибо гомоиконы там царские, императивные и низкоуровневые: в нём есть доступ к сырому исходнику, как к байтам в памяти, такой же доступ к скомпилированному коду, к записям в словаре и т.д. Вдобавок форт могут парсить сами же фортовские определения по мере исполнения, т.е. в форте нотация постфиксная только для начального набора слов, и то не для всех, многие слова являются префиксными, особенно определяющие слова, так же есть слова берущие аргументы сразу и из стека, и из исходного кода — эти слова вполне можно считать инфиксными. Т.е. в отличии от лиспа и всех прочих языков в форте нет ни какого-то фиксированного синтаксиса, ни даже фиксированного лексического строения, в программе на форте можно встретить абсолютно любую конструкцию и охуеть, я даже встречал интерпретатор васика на форте, который являлся просто набором форт-слов, такую же питушню можно проделать и для си-подобного синиаксиса.
Он орбя кеда в землю врос.
Под щосы — эми баровиты
И добиламо так всерьёз.
Смотрел горобыва сосами
И жеск обеск тотина вес:
Когута, межерамо фами,
Кейритомода... шефсимез...
Здесь неровек таропы ыше
Голомарода небосклон,
Щочаса вотра огомишек —
Доир, довутак, соросон!
>Гомоиконных фортраноподобных языков не может быть по определению (т.как в доисторические времена, люди которые планировали Алгол считали, что язык должен состоять из трех уровней, "машинного кода", т.е. непосредственно набора инструкций, "обобщенного представления", т.е. непосредственно правил языка, "конкретных интерпретаций" правил языка, например, локализаций, экстрапозиций и т.д.)
Реально за все эти годы я осознал, что Философский Камень всегда был у нас в кармане — и это С++
Лисп-машины остались лишь фантазиями wvxvw. Может какая-то извращённая форма AOT. Однако неизбежно остаётся интерпретируемый eval.
Если под гомоиконностью понимается простота, что я могу за день написать парсер и тормозной, но рабочий интерпретатор байт-кода вм (в отличие от жабы или питона), то это ок.
Но опять же... Слишком широкое понятие.
Думаю, обратно тоже можно прокинуть, если нужно.
А уж сделать такое, когда вся логика компиляторов подчиняется тебе, вполне реально.
* Исключения - обернуть try-catch и кодом возврата,
* кодам возврата сгенерировать исключения,
* имена классов вписать в имена методов, если классы были, не не стало,
* сгенерировать класс по имени файла, если классов не было, но появились,
Главное - чтобы старый код внешне работал как раньше, а новый уже может в случае смены парадигмы приспосабливаться и вызывать fileX_Pitux22E1_kokok(&p) из старой библиотеки вместо p.kokok();
Да нихера не удалось. Точнее удалось вызвать менее мудрённый язык из более мудрённого.
Но для этого не надо много ума.
Питух вызывает Сишку, но не наоборот.
Сишка — основа.
Питух не может быть основой, ибо это анскильная скриптуха.
В противном случае питух3 пилился бы на основе питуха2.
Не хотелось разрушать ваши фантазии, но дело в том что совершенно разные языки не смогут гладко взаимодействовать между собой.
Это профанский взгляд человека, который никогда не линковал/перелинковывал разные abi с разными вызовами.
У нас есть бибилотека собранная под процессор интел. Она написана на языке с определённой фичей (например exceptions).
Мы пытаемся слиниковать её с другим языком где этой фичи нет.
Какой выход из ситуации?
Или у нас есть исключения, но на уровне VM реализованы они с разной семантикой (dwarf, sjlj).
Гладкое взаимодействие не нужно. Старый код должен работать как раньше, новый код может использовать костыли для вызова старого.
Старый код может вызываться через дополнительные абстракции, т.к. он был написан под старые машины, которые требовали меньше.
ABI не нужно. У нас же браузер, компилятору все исходники доступны. Совместимость версий проверена авторами компилятора, код просто компилируется новым компилятором и работает.
Да, будут ситуации, когда какой-то пидор использовал недокументированную питушню, и его код сломался, но его предупреждали.
Эээ. Изначально речь, насколько я помню была о VM.
Там уже не будет исходников, а будет скомплированная в байт-код новомодная скриптуха. Причём совершенно произвольная.
В теории много разных скриптух, оперирующих разными парадигмами будут конпелироваться в единый байт-код.
Идея была в том, чтобы иметь возможность перегонять исходники в VM всё более и более свежими компиляторами, а байткод под VM уже единообразно оптимизировать/исполнять/кобенировать каким-нибудь мощным питуизатором. Так, чтобы компиляторы в байткод были наиболее простыми, и всякая сложная питушня, связанная со строением VM и алгоритмами питуизации, менялась редко и мало.
Говно это.
Есть такое. Но мало того.
Они же в последних версиях сломали компиляцию старых исходников. Write once — ебись everytime.
Если раньше был валидный ява-код, использующий например переменную-подчёркивание _
То в новых версиях явы он тупо не скомпилится.
Потому что получилось говно непортабельное. Есть ВМ машина, и есть нативные костыли из сишных либ.
Реально единственная вещь где ничего не нужно было переписывать с сишки — это кресты. И то, здесь их все регулярно обсирают.
Ну и если макака уже научилась нагугливать работающий код на SO, научилась вставлять его в нужные места, это говорит о её потенциале и способности учиться.
Оно изначально нацеливалось на заедушников.
В самом прямом смысле этого слова.
HTML делали для биомусора, который «пишет» «сайты» за жратву.
Питушня теоретиков, оторванных от жизни. Уууух, как бесит!
Вариант 1. В Perl, PHP, boost::regex можно рекурсивными питухами описывать ко-ко-контекстно-свободную питушню.
https://www.boost.org/doc/libs/1_64_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html#boost_regex.syntax.perl_syntax.recursive_expressions
Вариант 2. Часто, как и в обсуждаемом коде, регулярки используются внутри кода под машину Питуринга, который уже может парсить всё, что угодно.
Вариант 3. Используется не сам HTML, а его подмножество.
Вариант 4. Парсить надо не весь HTML, а его подмножество.
https://cs.pikabu.ru/post_img/2013/07/10/0/1373402952_1118716031.jpg
https://edge.alluremedia.com.au/m/g/2013/03/ggrave.jpg
http://www-bgr-com.vimg.net/wp-content/uploads/2011/11/7723.Google_Graveyard2.jpg-550x0.jpg
>Хром будет единственным браузером
>предельно быстрый, очень простой и совершенно не перегруженный ненужным говном
Geeqie
Xnview-mp
Нет, я не спорю, что эти комбайны наверняка дают куда больше возможностей по организации галерей, систематизации гигабайт фотографий и тому подобное — но вот этого предельного функционального минимализма, который был (увы, в прошедшем времени) визитной карточкой «Гугла», у них нет.
Мерзкая питушня. Привязывать что-то такое к колёсику - грешновато. В самой Windows есть настройка, сколько у.е. значит один щелчок колеса. Но есть ведь ещё и тачпады, где собственное ПО может оверрайдить эту настройку и накручивать какую-то логику. Но что важно, если даже на мыши можно легко прокрутить больше, чем надо, на тачпаде ты вовсе не чувствуешь, что есть один щелчок, а что - много.
Колёсико мыши - зло.
Это настраивается.
В нём оч. удобно сразу редактировать фотки, типа обрезать JPEG без потерь.
Да, это я заметил, когда пытался сдвинуть фотку к краю экрана.
Это как в ворде, когда посылаешь резюме с твоим фото по грудь, а ихний админ вдруг узнаёт всех твоих друзей-бухариков и обстановку вашего гаража?
Надо будет орнуть и так сделать в следующий раз.
Короче, не происходит Generation loss. То есть не проводится iQ+iDCT => raw => DCT+Q.
2. https://jpegclub.org/losslessapps.html
3. https://www.betterjpeg.com/crop.htm
Оно также умеет делать loseless rotate 90/180/270
И resize 1 к 8.
Какой скилл )))
Спасибо!
Так же и Google+
Когда нормальный человек регистрирует почту, он подразумевает, что с ней связаны имя-фамилия, которые будут стоять в поле From. Обычно это Иван Иванов <ivan.ivanov@gmail.com> Иначе заводить почту не требуется, т.к. теряется вся суть. И если кто-то узнал, что ivan.ivanov@gmail.com принадлежит Ивану Иванову, то это просто удобно, и удобно как для Ивана Иванова, так и для его адресантов.
Когда человек хочет остаться анонимным, он создаёт учётную запись почты с логином, который не напоминает о его имени и вводит фэйковые имя-фамилию. Разве не логично?
На сайтах гугла ещё почему-то иногда скидку предлагают.
• «iGoogle» — это самый настоящий проект «веб-джва-ноль». Ты мог собирать страницу из виджетов. Что-то типа расшаренного рабочего стола. Таких проектов было немного. У «Яндекса» и у «Яху» было что-то аналогичное, были отдельные проекты «Pageflakes» и «Netvibes». Последний вроде даже живой.
Всё прочее, что называют «вебджванольным», на самом деле не передаёт суть «Web 2.0».
• «KNOL» — было столько шума. Называли убийцей «Википедии».
• «Google Buzz» — предок «Твиттера» и «Гуглоплюса». Его создатели потом создали «Friendfeed», который был выкуплен и закрыт «Фейсбуком».
• «Jaiku» — ещё один «Твиттур».
• «Google Answers» — «Ответы@Mail.ru», только другого поставщика.
• «Google Talk» — по сути сервер «XMPP» («Jabber»).
Помню, что много шума было про «Google Wave», но его закрыли сразу после бета-тестирования, так что я даже не успел узнать, что это такое.
>я даже не успел узнать, что это такое
Что-то похожее на гуглдок, с совместным редактированием.
Оно ж появилось раньше гитхаба. И было гораздо удобнее svn-sourceforge.
Ещё у них была воистину охуенная задумка, сделать поиск по соц. сетям типа Яндекс.Блогов. Google Blog Search. Но её закрыли.
Теперь даже в гугловом ютубе хер найдёшь нужный коммент.
Слава богам! Там обычно пишут такое, что не то что найти не хочется, но наоборот - только развидеть и больше никогда не встречать.
Такое ощущение, что аудитория Ютуба по большей части - идиоты. И тут даже не надо говорить о "давайте зарядем мобильник автора адин лайк адин працент". Даже к приличным видео популярны метакомментарии "а что просмотров меньше, чем лайков" или "90% комментариев про А, 10% про Б" или "никто: абсолютно никто: автор: <какая-то херня>" и подобное. И все они повторяются. Отдельный шик - повторять одну и ту же быдлошутку по быдломему.
Потому поиск по комментам ГК «нинужен»
Плюс там у них дебильный по своей природе принцип по умолчанию показывать первыми самые залайканные комментарии.
Компания, имя которой мутировало в глагол, обозначающий интернет-поиск, не может сделать нормальную индексацию текстовых комментариев НА СВОЁМ же сайте.
Мне одному кажется, что здесь какой-то подвох?
>что не то что найти не хочется, но наоборот - только развидеть и больше никогда не встречать
Просто не надо искать такое.
>или "никто: абсолютно никто: автор: <какая-то херня>" и подобное
Меньше надо смотреть видео «в трендах».
Не знаю, но лично мне такие коменты почти не попадаются.
А когда-то было ещё несколько автономных поисковых систем по блогам и по форумам, но их тоже закрыли.
Да. После того как Волож умер они скурвились.
Раньше Яндекс помнил по 10 лет, всё. Даже удаленные посты и записи.
А теперь остался только ljsear.ch
iGoogle стилизация странички поиска.
Зачем они берут труд миллионов людей, а потом просто всё закрывают?
Неужели у гугла места мало? Я уверен что они всю поступившую к ним инфу сохраняют и не стирают ничего вообще.
- 90% индустрии так работают. Дурные деньги, сэр.
Например, x = /<b>(.*?)<\/b>/ легче понять, чем раздутую грамматику XML или даже возню с нодами после парсинга стандартным парсером.
Регулярка для этого будет выглядеть пиздецом и, наверняка, тормозить.
Ну ты дебил.
lxml пробовал?
А я при чём? Это к разработчикам «f-строк». А r да, надо на rb заменить.
> lxml пробовал?
>>> Я даже больше скажу: сейчас содержимое [code] — тег <pre> — в постах вываливается внутрь описания, которое из себя представляет элемент <p>. А внутри <p> использовать блочные теги нельзя. Такой HTML — невалидный. Умный же браузер (и столь же, мать его, умный lxml.etree.HTMLParser) просто тихо закрывает тег <p> перед <pre> — поэтому в сток и попадал только текст.
Я там вроде написал, выложи рабочий проблемный кусок с тестовыми данными. Еще лучше - тест напиши.
> Я там вроде написал
Не нашёл, проверь.
> тестовыми данными
HTML-код https://govnokod.ru/26373.
> рабочий проблемный кусок
«parse_post» в NGK до последнего коммита. Ну или можешь открыть https://govnokod.ru/26373 в браузере и в «Инспекторе элементов» полюбоваться на <p>, закрытый сразу перед <pre>. И на «<p></p>» в конце.
pip install --upgrade %
Какой багор )))
Кстати, почему в первом сообщении об ошибке кавычки двойные, а во втором — одинарные? Почему первое с маленькой буквы, а второе — с большой? Почему двоеточие только во втором сообщении? Разные люди писа́ли обработку ошибок?
ARB — наименьшая строка произвольных символов
*TAG — отложенное вычисление, значение TAG получают только при обращении к TAG_CONTENT, это нужно чтоб работала рукурсия в паттерне
| — наверное и так понятно, что это "или"
SOURCE TAG — собсно сам паттерн матчинг.
Точка присваивает совпадение в переменную справа, OUTPUT — "переменная" для вывода.
По «СНОБОЛу» вычислять надёжнее.
База обновляется вручную?
Начнём с хорошей: тебе не светит угодить в суп, так что кип ю чен ап!
Новость №2: жаркое из тебя получится вкусным...