Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
«Такие статьи появляются несколько раз в год и являются результатом нежеления понимать, что происходит в мире PHP. Возможно автор раньше программировал на чем-то старом, теперь узнает о языке PHP, плохо владеет английским и вообще интернетом, и сидит по старинке, что-то выдумтывает сам. Последнее, в принципе, не так уж плохо, но такие поделки никому на хабре в статьях не могут быть интересны, ибо через это все уже прошли лет 10-15, а то и больше, назад. Достаточно позорно в 2020-ом году не знать про Composer (или хотябы просто про автозагрузку) и PSR, я уж не говорю про SOLID»
... написал матёрый пхпшник и пошел обновлять либу, потому что там имена доменных зон захардкожены.
... написал матёрый пхпшник и пошел дальше писать ОРМ на «РНР» для каждого сайта отдельно.
При запуске внешних программ не всегда прокатывает т.к. многие тулы парсят /опции и охуевают от / посреди путей. А в остальных местах -- да, и / сойдёт.
Кстати да. И это должна быть универсальная питуншя со следующими ворециями настроек:
* URI
* Filesystem
* Windows
* Linux
* Флаг "ОДНОУРОВНЕВЫЙ" или levels=?.
Чтобы можно было с помощью одной и той же абстракции написать сервер (Filesystem + URI, ОДНОУРОВНЕВЫЙ для предотвращения питунши вида static + '/../../../../../file'), утилиту и прочую питуншю (автопердолинг с пробелами), в том числе экспорт в другие платформы (флаги Win/Lin).
URI можно безхвостые - http://govnokod.ru/27149. Хвосты и протоколы можно добавлять в необязательное свойство base объекта. Ну или prefix+suffix для питушни, а внутри только путь. Такая питушня не протечёт.
Нет, слешик нужен. Слешик - это синтаксический сахар для обозначения иерархии, а не какая-то конкретная питушня из луникса или урлушни.
А от иерархии в путях и урлах сложно избавиться, иначе библиотеки для урлов и путей не нужны.
Path('a/b/c') преобразуется в Path(['a','b','c']) или в join(BasePath, join(Path('a'), join(Path('b'), Path('c')))) или в аналогичное, а потом питушится в конкретный путь с теми или иными слешами.
Это гораздо удобнее, чем писать кучу жойнов или кучу ' + OLOLO_CEnAPATOP + '.
> Path('a/b/c') преобразуется в Path(['a','b','c'])
Или делает вид в интерпейсе. Может, эта питушня всё хранит в этом же луникс-формате и только в винде чуть тормозит на импорте/экспорте.
> Нет, слешик нужен. Слешик - это синтаксический сахар для обозначения иерархии
Проблемы начинаются, когда какая-то библиотека написана под винду и использует обратные слеши, при этом в самом языке для обозначения иерархии используются прямые слеши. И начинается цирк с переводом одного формата в другой )))
Допустим во внутреннем представлении у меня один юниксовый /.
Тогда я при выводе для твоей оси конверчу его в //. А для винды в \.
А если в твоей оси / можно в именах, я могу заэкранировать его во внутреннем представлении. А при конвертации в юникс сказать что так низя, путь хуёвый.
Если ты хочешь хранить путь в строке, то разделитель не должен содержаться ни в одном алфавите. ("hui" / "pЫzda").toWindows() == "hui/pЫzda", в то время как ("hui" / "pЫzda").toPithuOs() == "huiЫpЫzda".
Я не предложил хранить массив как JSON. Я показал математическую систему (даже две, ещё про сишные строки сказал), которая не ломается, когда метушня и питушня имеют один и тот же алфавит.
Допустим, существует JSON. И он ещё не сломался от того, что у каких-то питузов разделители массивов - запятые, кавычки, скобочки или набор букв "null". Вся эта питушня может вместиться в одну строку внутри JSON. А потом этот JSON можно серилизовать в другую строку с JSON.
Строку 6 раз попердолило и распердолило, а ничего не сломалось ни на каком шаге:
let perdole = x => JSON.stringify([x, x]);
let bagor = [1,2,3,4,5,6].reduce((x,_) => perdole(x), '[kakoy, b, a, g, o, r]');
let razperdole = xs => JSON.parse(xs)[0];
let source = [1,2,3,4,5,6].reduce((x,_) => razperdole(x), bagor);
Сишка выдерживает символ '\\' или '\"' внутри строки, такую строку можно снова положить в строку.
У человека есть как минимум два варианта проверки солидности питушни:
1. Положить на руку и прочувствовать, насколько сильно она притягивается к ближайшей большой массе. (P=GmM(r^-2), M меняется от планеты к планете вместе с весом)
2. Помотать питушню рукой и проверить, как сильно нужно попердолиться, чтобы питушня металась туда-сюда. (m=F/a - F не зависит от M и не меняется от планете к планете - массовый критерий)
Как мне кажется, привычнее весовой критерий. Но массовый критерий может применяться для мелкой питушни, которую не сильно притягивает текущая планета.
Изменится ли оценка солидности питушни, когда люди заселят много разных планет и построят телепорт, позволяющий "превышать" скорость света сквозь дополнительное измерение? Метод "подержать на ладошке" будет неудобен при частой смене планеты.
Будет ли создан генератор веса для стариков, которые привыкли взвешивать питушню на ладошке?
oaoaoammm # 0
... написал матёрый пхпшник и пошел обновлять либу, потому что там имена доменных зон захардкожены.
... написал матёрый пхпшник и пошел дальше писать ОРМ на «РНР» для каждого сайта отдельно.
cykablyad # 0
зачем в 2020 году поддерживать что-то кроме "/"? даже "Windows" поддерживает прямые слеши
bormand # 0 ⇈
При запуске внешних программ не всегда прокатывает т.к. многие тулы парсят /опции и охуевают от / посреди путей. А в остальных местах -- да, и / сойдёт.
cykablyad # 0 ⇈
надо просто все пути в кавычки хуярить, а без них шиндовс может и на обычном пути обосраться, если там например пробел есть
P.S. спасибо виндовсу и его апи говна с argv в одну строку
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
https://www.isis.stfc.ac.uk/Pages/vms-user-manual.pdf
2.5
bormand # 0 ⇈
guest # 0 ⇈
gost # 0 ⇈
https://govnokod.ru/27149#comment600000
bormand # 0 ⇈
1024-- # 0 ⇈
guest # 0 ⇈
MAKAKA # 0 ⇈
A: пыхоперхоть должна страдать
cykablyad # 0 ⇈
MAKAKA # 0 ⇈
1024-- # 0 ⇈
* URI
* Filesystem
* Windows
* Linux
* Флаг "ОДНОУРОВНЕВЫЙ" или levels=?.
Чтобы можно было с помощью одной и той же абстракции написать сервер (Filesystem + URI, ОДНОУРОВНЕВЫЙ для предотвращения питунши вида static + '/../../../../../file'), утилиту и прочую питуншю (автопердолинг с пробелами), в том числе экспорт в другие платформы (флаги Win/Lin).
cykablyad # 0 ⇈
1024-- # 0 ⇈
bormand # 0 ⇈
* URI
Всё остальное -- нинужное легаси. Пусть конвертится в нужных точках (при запуске бинарей и т.п.)
1024-- # 0 ⇈
bormand # 0 ⇈
gost # 0 ⇈
Кстати, в ЙАЖЕ уже изобрели: https://docs.oracle.com/javase/8/docs/api/java/net/URI.html.
MAKAKA # 0 ⇈
CHayT # 0 ⇈
MAKAKA # 0 ⇈
path = Path("/foo/bar/gi")
и потом
path.asOsSpecific
всё
1024-- # 0 ⇈
MAKAKA # 0 ⇈
path.asUnix
path.asMacOsClassic
Also, URI не обязан быть файлом и путем же
bormand # 0 ⇈
З.Ы. URI (не путать с URL) вообще не обязан на что-то реальное указывать. Это абстрактная айдишка.
1024-- # 0 ⇈
> З.Ы. URI (не путать с URL)
Мне для вебтушни чисто URI не нужны, поэтому меня интересует не абстрактушня, а конкретно URL и пути в ОС.
MAKAKA # 0 ⇈
1024-- # 0 ⇈
MAKAKA # 0 ⇈
Это как если бы меня заставили крутить головку привода или открывать странички в SSD прежде, чем подключить файл.
итд
1024-- # 0 ⇈
А от иерархии в путях и урлах сложно избавиться, иначе библиотеки для урлов и путей не нужны.
Path('a/b/c') преобразуется в Path(['a','b','c']) или в join(BasePath, join(Path('a'), join(Path('b'), Path('c')))) или в аналогичное, а потом питушится в конкретный путь с теми или иными слешами.
Это гораздо удобнее, чем писать кучу жойнов или кучу ' + OLOLO_CEnAPATOP + '.
1024-- # 0 ⇈
Или делает вид в интерпейсе. Может, эта питушня всё хранит в этом же луникс-формате и только в винде чуть тормозит на импорте/экспорте.
oaoaoammm # 0 ⇈
Проблемы начинаются, когда какая-то библиотека написана под винду и использует обратные слеши, при этом в самом языке для обозначения иерархии используются прямые слеши. И начинается цирк с переводом одного формата в другой )))
Правда я такого уже очень давно не видел.
bormand # 0 ⇈
Собственно как и с кодировками.
MAKAKA # 0 ⇈
Юзаешь везде например джавий char, а конвертишь его перед выводом.
Юзаешь везде Path, и конвертишь перед выводом.
Но пыхосмегма не умеет в абстракции. Они из GET параметров удаляют DELETE чтобы SQL не сломать, какие уж тут абстракции
MAKAKA # 0 ⇈
Это сёмантический слешик, виртуальный слешик, а не реальный.
1024-- # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
MAKAKA # 0 ⇈
bormand # 0 ⇈
MAKAKA # 0 ⇈
bormand # 0 ⇈
MAKAKA # 0 ⇈
В двенадцать лет это нормально. Закон "фостерс" (c)
guest3 # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
Ну да. Но не поэтому, а просто потому что в крестах нельзя для джвух встроенных типов оператор перегрузить.
guest # 0 ⇈
bormand # 0 ⇈
Для литералов const char* вот нельзя, к сожалению. Но обычно путь один хер начинается с какой-то переменной. Так что это не сильно напрягает.
1024-- # 0 ⇈
А потом и питушню Хиндли-Милнера, чтобы пердолинг с шаблонами был приятнее.
bormand # 0 ⇈
bormand # 0 ⇈
Внутри там всегда может быть юниксовый путь. Или массив компонентов. Ты всё равно не узнаешь.
MAKAKA # 0 ⇈
КУРОЧКА использует разделитель "ы", а ПЕТУШОК -- ":"
А на винды и юниксы тебе пофиг
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
Тогда я при выводе для твоей оси конверчу его в //. А для винды в \.
А если в твоей оси / можно в именах, я могу заэкранировать его во внутреннем представлении. А при конвертации в юникс сказать что так низя, путь хуёвый.
MAKAKA # 0 ⇈
Смотри: Я хочу сохранить некую строку в хранилище Foo.
Так случилось, что в хранилище символ Ы -- служебный.
Потому я перед помещением в хранилище заменяю Ы на другой символ.
А перед извлечением заменяю обратно.
guest # 0 ⇈
bormand # 0 ⇈
А хранить можно любые символы. Экранировку никто не отменял.
guest # 0 ⇈
bormand # 0 ⇈
Ну и для текущей оси можно zero copy сделать.
1024-- # 0 ⇈
guest # 0 ⇈
))))))))))))
guest # 0 ⇈
guest # 0 ⇈
MAKAKA # 0 ⇈
MAKAKA # 0 ⇈
1024-- # 0 ⇈
Допустим, существует JSON. И он ещё не сломался от того, что у каких-то питузов разделители массивов - запятые, кавычки, скобочки или набор букв "null". Вся эта питушня может вместиться в одну строку внутри JSON. А потом этот JSON можно серилизовать в другую строку с JSON.
Строку 6 раз попердолило и распердолило, а ничего не сломалось ни на каком шаге:
Сишка выдерживает символ '\\' или '\"' внутри строки, такую строку можно снова положить в строку.
bormand # 0 ⇈
1024-- # 0 ⇈
bormand # 0 ⇈
1024-- # 0 ⇈
bormand # 0 ⇈
1024-- # 0 ⇈
https://youtu.be/-Jh0EN1De4Q
1024-- # 0 ⇈
Кстати, гайки добавляют для веса или для массы?
У человека есть как минимум два варианта проверки солидности питушни:
1. Положить на руку и прочувствовать, насколько сильно она притягивается к ближайшей большой массе. (P=GmM(r^-2), M меняется от планеты к планете вместе с весом)
2. Помотать питушню рукой и проверить, как сильно нужно попердолиться, чтобы питушня металась туда-сюда. (m=F/a - F не зависит от M и не меняется от планете к планете - массовый критерий)
Как мне кажется, привычнее весовой критерий. Но массовый критерий может применяться для мелкой питушни, которую не сильно притягивает текущая планета.
Изменится ли оценка солидности питушни, когда люди заселят много разных планет и построят телепорт, позволяющий "превышать" скорость света сквозь дополнительное измерение? Метод "подержать на ладошке" будет неудобен при частой смене планеты.
Будет ли создан генератор веса для стариков, которые привыкли взвешивать питушню на ладошке?
guest # 0 ⇈
1024-- # 0 ⇈
MAKAKA # 0 ⇈
MAKAKA # 0 ⇈
MAKAKA # 0
https://www.bloomberg.com/news/articles/2020-12-04/chinese-scientists-claim-breakthrough-in-quantum-computing-race
bormand # 0 ⇈
Хм, т.е. это больше девайс для неломаемой квантовой криптографии чем наоборот.
Чуваки выбрали задачу о фотонах, которая с помощью этих самых фотонов легко решается за секунды. А для классического компа это NP и миллиарды лет.
Т.е. классический комп в принципе не способен предсказать выхлоп этой хреновины.
g: Gaussian boson sampling