Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
interface PostRepository
{
public function save(Post $model);
}
class Post
{
protected $id;
protected $title;
protected $content;
public function setId(int $id)
{
$this->id = $id;
}
public function getId(): ?int
{
return $this->id;
}
public function setTitle(string $title)
{
$this->title = $title;
}
public function getTitle(): string
{
return $this->title ?: '';
}
public function setContent(string $content)
{
$this->content = $content;
}
public function getContent(): string
{
return $this->content ?: '';
}
}
Блядь, до чего ж отвратительный код. Говёность «PHP», тщательно и с извращённой любовью смешанная с ЙАЖАвским бойлерплейтом. Омерзительно.
Это скриптуха. А я говорю за статически типизированный.
Никакие мудификаторы кроме var кмк не нужны.
Даже от стасика пользы нет особой, больше проблемы.
Во-первых он безопаснее: у тебя PHP в отдельном процессе, и тебе пофиг какой там CRT Apache.
Во-вторых Apache не нужен вообще.
И наконец если уж ты взял Apache + mod_php, то нахуя тебе еще n ginx?
Ну у него там на картинке нарисовано ".htaccess тоже бывает нужен". Т.е. видимо какое-то жуткое легаси запускает, поэтому и апач. А нгинкс для статики и кода посвежее.
Да х.з., я ж не спец в пхп. Но мне кажется, просто чтобы обе модели были доступны. Чтобы не пердолиться с портированием с апача на нгинкс/фпм и обратно. А просто запускать и течь.
Выглядит вполне разумно, тем более как ты говоришь, это для локального запуска.
Он ничего не знает про продакшен, и прямо про это говорит
Docker production
По данному вопросу к сожалению я ничего сказать не могу, зато может сказать официальная документация.
Если у вас есть опыт использования docker на боевых проектах, то просьба поделиться своим опытом в комментариях: стоит ли, какие трудности и подводные камни у вас возникли и др. полезную информацию для молодых и неопытных.
> location ~ \.(jpg|jpeg|gif|png|ico|css|
Блядь, а это вообще нормальный способ отдавать статику? Не первый раз вижу такую волшебную строчку, но терзают меня смутные сомнения…
В нормальных фреймворках статика в одном кусте директорий, php-файлы — в другом. Посмотри документацию по любому популярному фреймворку, там обязательно упоминаются htdocs и application, library и т. п.
Может быть, у него код, как у «Конардо», где всё в кучу.
Компании «Zend», которая выпускает «php», подойдёт?
В директории htdocs лежит единственный php-файл, а именно index.php, в котором ничего критического нет, только вызов bootstrap.php, который лежит вне htdocs.
то-есть разделить по папкам все таки не получится: придется писать в конфиге nginx обработку php файла и стат файлов отдельно, а еще закрывать .htaccess, который тоже наверняка там рядом лежит.
«Zend Framework» требует перенаправления всех запросов к генерируемым страницам на index.php. Любой запрос, кроме статики, должен в итоге запускать index.php.
Всё, допёрло. Ты будешь ржать, когда узнаешь, как это всё работает и зачем класть index.php в htdocs.
В ZF есть свойство $this->basePath, через которое можно узнать путь к статике. Иногда этот путь требуется (например, когда нужно упаковать css- и js-файлы или что-то сделать с картинками). Так вот фреймворк определяет путь к статике по положению скрипта index.php. Как в первой версии ZF какой-то дурак предложил, так оно осталось и в ZF2, и в ZF3, и в Laminas.
«пдіпх» поверх «Арасне» иногда имеет смысл: если у тебя дохрена статических файлов. Прямо так, что с одной страницы загружаются 100500 мелких файлов. Поскольку «пдіпх» более отзывчивый, чем «Арасне», он эти 100500 мелких файлов отдаст быстрее.
Зачем же тогда вообще нужен «Арасне»? Он нужен, только если проект использует какие-то нативные модули «Арасне», аналогов которых нет у «пдіпх», или файлы .htaccess, которые анскильная обезьяна не может перевести в конфиг «пдіпх». Всё, больше низачем.
Точно. Параметры рнр.іпі, отмеченные в документации флагом PHP_INI_PERDIR, можно переопределять через локальные файлы .htaccess.
Если у проекта куча точек входа, и каждая точка входа требует свои параметры рнр.іпі, то портировать его с «Арасне» на что-то другое нелегко. Придётся либо переносить настройку в рнр-файл (функция ini_set; в документации по параметру должен быть флаг PHP_INI_USER или PHP_INI_ALL), либо запускать несколько FastCGI-серверов, каждый со своими параметрами.
> Это вообще бессмысленно Это чтобы не шкварить прекрасный «Nginx» дерьмом вроде «PHP». А «Апач» можно, «Апач» и сам, скажем так, не самый качественный продукт.
Есть более веселая функция getallheaders(). В частности в шаблонизаторе верси 5.4 в "Apache" она не херила регистр хидеров, а в "FastCGI" - наоборот, при чем по-клоунски приводила к верхнему регистру первоый символ каждого слова. Т. е., например, хидер Kukarek-KoKo в первом случае возвращался как есть, а во втором - превращался в Kukarek-Koko, что доставляло много веселья обезьяне, которая забыла или не знала, что хидеры должны быть регистронезависимы.
FPM — это FastCGI process manager. FastCGI можно использовать с ним и без него. В первом случае детей рождает и убивает FPM, во втором случае детей рождает и убивает сервер («nginx», «lighttpd» и т. п.).
В языках для анальных педерастов именно так они и должны выглядеть.
В языках для всех остальных они выглядят так:
Коко
data class Post(var id:Int, var title:String, var content:String)
Я же говорю: пых берет всё самое плохое из всех возможных языков.
Аксесоры и мутаторы в скриптушке это пиздец
Отсутствие для них сахара это пиздец в кубе.
Сука, даже в C# это симпатичнее: там проперти генерится
Но в джаве хотя-бы нет ключ слова function. Тоесть джава менее вербозна, чем пых.
В си это будет структура.
В питоне не будут лепить аксессоры и мутаторы
В c# будут проперти
В ruby аксесоры и мутаторы генерятся
В JS будет просто объект
Да даже в джаве можно не лепить акцессоры, если ты не либу для других пишешь... Ну в чём проблема потом зарефакторить все точки, где поле используется? Да и часто ты реально писал какой-то код в геттерах?
Я, кстати, никогда не понимал нахрюка на .h файлы.
Мне кажется совершенно здравой идея описать публичный интерфейс в отдельном файле (можно и с документацией) и потом распостранять его как часть SDK.
Вместо этого современные языки предлагают мне либо создавать интерфейсы (что тоже самое!) либо экспортировать наружу свои методы (если я просто делаю класс).
Разделение любого модуля или класса на интерфейс и имплементацию это логично, имхо
«namedtuple» — это именно named tuple, т.е. именованный иммутабельный (!) кортеж. Он максимально прост и туп, сложную логику в него не впихнуть.
«dataclass» — более мощный, универсальный и новый (>=3.7, ЕМНИП) инструмент для создания, собственно, датаклассов с (опционально) сложной логикой.
Можно, конечно (плюс надо __cmp__ или __eq__), но мутабельные ключи приведут к суровым баграм.
>>> class X:
... def __init__(self, x):
... self.x = x
... def __hash__(self):
... return self.x
... def __eq__(self, other):
... return isinstance(other, X) and other.x == self.x
...
>>> x1 = X(1), x2 = X(2)
>>> d = {x1: 1, x2: 2}
>>> d[X(1)], d[X(2)]
(1, 2)
>>> d
{<__main__.X object at 0x000001DEE0EFB5B0>: 1, <__main__.X object at 0x000001DEE0F20E50>: 2}
>>> x1.x = 42
>>> d[x1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: <__main__.X object at 0x000001DEE0EFB5B0>
>>> d[X(1)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: <__main__.X object at 0x000001DEE0EFB640>
>>> d[X(2)]
2
>>> d[X(42)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: <__main__.X object at 0x000001DEE0F16100>
— ключ x1 испарился.
UPD:
>>> for key in d:
... print(d[key])
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
KeyError: <__main__.X object at 0x000001DEE0EFB5B0>
Ну вот представь, что у тебя тысячи небольших словарей. В каждом из них есть ключ "foo". Сейчас все эти "foo" на один объект ссылаются, а там у каждого словаря будет своя копия этого "foo".
a copied NSArray doesn't copy its objects, so you might end up
thinking that a @property(copy) NSArray<MyClass *> *myProperty
is safe, however while the array itself is safe from being modified,
the objects held by the array share the same reference. Same
is true for any collection class (NSDictionary, NSSet, etc)
Ну так и в «Python» можно всё руками копировать. Изначально-то речь шла про копирование ключей словаря, для которого нужна именно глубокая копия искаропки.
Ты сначала пишешь, что в Питоне нет механизмов копирования произвольных объектов, а теперь, что можно руками всё копировать. Это как?
В ObjC тип, который ты хочешь использовать в качестве ключа в словаре, должен быть Equatable, Hashable и NSCopying. Все механизмы на столе. В питоне как?
> В питоне как?
Питоновскому дикту нужны __hash__() и __eq__() (N.B.: про cmp в начале ветки напиздел). Ещё ключи нельзя менять, иначе будет багор — т.е. либо они должны быть иммутабельными, либо их никто не должен трогать.
> Ты сначала пишешь, что в Питоне нет механизмов копирования произвольных объектов, а теперь, что можно руками всё копировать. Это как?
Я про встроенные механизмы, вроде копирующего конструктора из крестов. Но да, тут я не совсем прав: для этого есть магические методы __copy__() и __deepcopy__(). Тем не менее, некоторые объекты (вроде перечисленных выше сокетов и файлов) глубоко скопировать нельзя.
> В ObjC тип, который ты хочешь использовать в качестве ключа в словаре, должен быть Equatable, Hashable и NSCopying.
А NSCopying зачем?
Зависит от твоей реализации метода copy. Если в нём ты все проперти тоже скопируешь, то будет deep. Если просто пробросишь в копию ссылки, то будет shallow.
Вообще звучит как просто лишний оверхед. Реальный пример (извини, синтаксиса «ObjC» не знаю):
x1, x2, x3 = ... // Какие-то мутабельные объекты
list = [x1, x2, x3]
dict = NSDict({list: "value"})
Теперь, если мы изменим x1-x3, то внутри словаря изменится и ключ со всеми полагающимися баграми.
Вот если бы словарь мог узнавать, когда его ключи меняются, тогда было бы интереснее.
Да, если мы говорим именно про коллекции в качестве ключей, то придётся попердолиться, потому что ты и сам привёл доку, что реализация копирования не deep.
С произвольным объектом всё немного проще.
> Вот если бы словарь мог узнавать, когда его ключи меняются, тогда было бы интереснее.
- я давно не ковырялся в ObjC, не могу сказать про такие тонкости. Чисто технически это возможно при помощи KVO/KVC, но вызовет ещё больший оверхед.
Короче, в Свифте изменение объекта reference type, который является ключом в словаре, в большинстве случаев внезапно является UB.
Бриджинг между Dictionary и NSDictionary естественным образом накладывает некоторые ограничения на типы ключей.
Реализация протокола NSCopying не даёт ровным счётом ничего до того момента, пока класс не помечен как @objc. Если его пометить таким образом, то происходит копирование ключа в словарь и изменение изначального объекта не приводит к UB.
> вообще не касается проблемы value/reference
> Питон такой язык
Не-а. Проблемы value/reference не касаться можно только в полностью иммутабельном языке (1024-- приде, ссылочную прозрачность наведе!). А в «Python» ссылки на мутабельные объекты приводят к регулярным баграм. Классические питоньи ссылочные багры:
>Проблемы value/reference не касаться можно только в полностью иммутабельном языке (1024-- приде, ссылочную прозрачность наведе!)
Плюс там не будет циклической питушни.
Поэтому помимо отсутствия ссылочных проблем, бонусом идут ARC-friendly структуры данных, отстутствие зацикливания при сериализации и ненужность tracing gc.
Минус конечно, это постоянная борьба с немутабельностью.
Общее rule of thumb — совать в ключи только иммутабельные объекты. С точки зрения доки (выделение моё):
>>> A mapping object maps hashable values to arbitrary objects.
>>> An object is hashable if it has a hash value which never changes during its lifetime (it needs a __hash__() method), and can be compared to other objects (it needs an __eq__() method). Hashable objects which compare equal must have the same hash value.
struct petuz {
int id;
int iq;
};
//////////
sturct petuz petuz = {.iq = 12; .id = 654};
Год 2020, высокоуровневый язык пхп.
class Petuz {
private $iq;
private $id;
public function getId(): int
{
return $this->id;
}
public function getIq(): int
{
return $this->iq;
}
public function setId(int $id)
{
$this->id = id;
}
public function setIq(int $iq)
{
$this->iq = iq;
}
}
/////////
$petuh = new Petuh();
$petuh->setIq(22);
$petuh->setId(42);
Бля, что с этим миром не так?! Структура с полями, инициализируемая сразу -- самое частоиспользуемое, самое родное, почему его нету из коробки в половине скриптухов кроме lua и js?
Мы тут огненно тёрли за инкапсуляцию как-то и пришли к выводу, что это вообще МАСТХЕВ, вот в твоей сисечке все поля видны, как пизда у молодой училки, а в пыхе поменял приват на vixenпротектед и gost доволен
@lombok.Data
class Post
{
String id;
String title;
String content;
}
@Data is a convenient shortcut annotation that bundles the features of @ToString, @EqualsAndHashCode, @Getter / @Setter and @RequiredArgsConstructor together
In other words, @Data generates all the boilerplate that is normally associated with simple POJOs (Plain Old Java Objects)
> Под формулировкой "Модель — это исключительно бизнес-логика" подразумевается что модель — отражает сущности, данные и поведение предметной области, и никак не касается данных и объектов сервисного слоя и слоя приложения.
Your setuptools do not appear to be installed. Just follow the Installation Instructions from the PyPI website.
If it's already installed, try
pip install --upgrade setuptools
If it's already up to date, check that the module ez_setup is not missing. If it is, then
pip install ez_setup
Then try again
pip install unroll
If it's still not working, maybe pip didn't install/upgrade setup_tools properly so you might want to try
easy_install -U setuptools
And again
pip install unroll
БЛЯТЬ, МОЖНО БЫЛО ЗДЕЛАТЬ ЧТОБЫ РАБОТАЛО БЕЗ ПАЙТУШНИ И ПЕРДОЛИНГА??!!!
Проверил. Выполнил все строчки джва раза. «unroll» не ставится. Он сломан: во-первых, он пытается качать старую версию пакета «distribute» (0.6.14, которая несовместима с новым «Питоном», когда есть свежая 0.7.x), во-вторых, он её пытается качать по http:, а pypi.org недавно полностью перешёл на https:.
Через easy_install новая версия «distribute» ставится, но «unroll» опять ставиться отказывается.
«unroll» хочет устанавливаться только через «ez_setup», а «ez_setup» не обновляли с 2010-го года, т. е. уже десять лет. За это время некоторые ссылки на pypi.org стали недействительными.
Чтобы поставить «unroll» в 2020-м году, нужно патчить пакет «ez_setup».
Выкиньте к чёрту этот «unroll». В нём сломано всё, включая документацию. Ну какой мудак написа́л следующие строки?
Unroll can be installed by unzipping the source code in one directory and using this command:
::
(sudo) python setup.py install
You can also install it directly from the Python Package Index (PYPI_) with this command:
::
(sudo) pip unroll install
P.S. MAKAKA, как всё-таки правильно чинить в такой ситуации?
У меня два варианта:
1. Искать в файле «setup.py» в сломанных пакетах строчки, упоминающие «ez_setup», и удалять.
2. Написать фейковый модуль «ez_setup», состоящий из метода «use_setuptools», который ничего не делает.
Вместо них нужно использовать пакеты, которые ставятся через pip.
Автору конкретного говнопакета ты можешь послать пулреквест.
Но последняя версия говнопакета -- Released: Apr 16, 2014
И коммитов не было давно https://github.com/Zulko/Unroll
Автоу похуй
Можеш его форкнуть, и починить у себя. Это нормльно для опенсурса
Колёса появились в 2012-м году. Т. е. вся эта питушня с «изяинсталлом» была актуальна до 2012-го года (точнее, до того года, когда перестали распространять «яйца»).
Но почему надо каждые 5 лет выбрасывать все старые наработки и начинать юзать какую-то новую хуйню, которую через 5 лет тоже выбросят на помойку? Почему что-то одно нельзя довести до ума?
Формат описания пакетов это некая спека. При чём тут формат данных, в котором она будет храниться? Сколько интерфейсов напишут, столько тулза таких форматов и примет.
Ничему никого жизнь не учит. А ещё называются домом высокой культуры быDа!
ну вот там старый и холодный питух из Яндекса тоже сказал, что всё любит с ноля сам писать. Видимо он (как и милениалы) не умеет читать более трех предложений подряд, а по видео на утюбе существующие либы не изучить. Приходится изобретать свое
> Гарри Поттер и яйца на колёсах
В то время считалось, что питушиные яйца используют ведьмы для приготовления колдовских скриптов.
Для пользователей этот факт был неопровержимым доказательством пердолинга птицы. Адвокат апеллировал тем, что несение яйца - это непроизвольное действие, в котором не было злого умысла, поэтому и наказывать за это несправедливо.
Но посонов такие доводы не убедили. Питуха, как еретика, сожгли на костре вместе с яйцом.
В XXI веке голландский ученый доказал, что птица, болеющая инфекционным заболеванием, может непроизвольно поменять версию со 2ой на 3ю.
Подтверждаю, ужосы ко-ко-кокие-то. У меня самым большим пердолингом была ручная сборка нативной либы «PyAudio»: колеса не было, а автоматически оно не собиралось из-за отсутствия каких-то библиотек (которые оно, разумеется, по принятым в венде традициям ожидало видеть в «XYZ:\dev\build\june1998\libs\hujlib.lib »).
Причём есть проблема, если кококоличество дисков не укладывается в 26.
В каких-то реализациях «DOS», если не задать «LASTDRIVE Z», для дисков с номерами после 26 назначались «буквы» [, \, ], ^, _, `, которые не принимали многие программы (бэкслэш уж точно никто не принимал).
И с этим был связан какой багор в первых выпусках «NT».
В «DOS» у каждого диска свой текущий каталог. Я, например, делаю так:
c:
cd NC
d:
cd WORKDIR
c:
Вернувшись на диск C:, я вернусь в директорию NC, потому что последняя команда cd изменила текущую директорию только у диска D:.
В «NT» же сначала сделали глобальную текущую директорию. Т. е. после команд c: и cd NC текущей будет директория \DosDevices\C:\NC. Глобально. Изменение текущей директории на диске D: её сбросит.
Чтобы досовские батники работали в «NT», пришлось прикручивать костыль: теперь в енвиронменте создаются «скрытые» пельменные, имена которых начинаются со знака равенства, хранящие адрес текущей директории на каждом диске. Следующая команда их покажет:
А вот кстати, это случаем не со времён, когда у доса не было каталогов пришло?
Типа раньше я мог копировать a:1.txt в b:1.txt. Потом в дос завезли каталоги, но я не хочу ничего менять. Поэтому я могу сфокусировать каждый диск на нужный каталог и продолжать копировать a:1.txt в b:1.txt.
Да, в DOS 1.0 не было каталогов вообще. Точнее, у каждого диска была ровно одна директория: корневая.
Только в DOS 2.0 в файловую систему завезли атрибут «директория», чтобы директории были не только корневыми, и у файловых функций добавили разделитель поддиректорий (почему-то выбрали бэкслэш).
Да, кстати, cd c:\buz\foo\bar сменит текущую директорию на диске c:, но не сменит текущий диск. Ты останешься на том же диске, на котором был, хотя на другом диске директория сменится.
>cd c:\buz\foo\bar сменит текущую директорию на диске c:, но не сменит текущий диск
Ага, что-то в этом духе.
Я помню что там было просто выбешивающее поведение.
Кстати, а что будет если я в своей NT'шной проге попытаюсь открыть "d:1.txt"? CreateFile полезет в переменные окружения и посмотрит какой каталог на диске d сейчас текущий?
>или прикрутить его поапкой в другой диск (как в уникс)
Вроде это появилось только со времён 2K/XP. И вроде на NTFS. Но это не точно.
Кстати там свои приколы были.
Я вот точно не помню, но кажется когда-то ловил глюк с местом. На одном диске место было достаточно, а на другом мало.
А при копировании, встроенный в винду чекер свободного места тупил и выдавал окно что на диске мало места.
>Обращаться к диску можно по полному имени объекта
Можно папку было переименовать в хитрый UUID, и тогда вместо её содержимого эксплорером открывалась например Панель Управления.
Причём если переименовать папку обратно, то все данные в ней естественно оставались.
Проводник вообще путает пользователей. Из него может сложиться ложное впечатление, что «Рабочий стол» в иерархии ФС находится выше дисков и даже выше компьютера.
В «Линуксе» всё просто: phpize; ./configure; make
Только перед этим нужно поставить пакет «php-dev» через «apt-get» или какой-нибудь другой пакетный менеджер. Возможно, даже команды phpize... запускать не придётся, их запустит сам «pecl».
В «Windows» же нужно:
1. Cоздать директорию «php-sdk».
2. В неё распаковать предварительно скачанный архив «php-sdk-binary-tools.zip».
3. В этой директории создать «phpdev» с кучей поддиректорий.
4. В нужную поддиректорию распаковать «deps-5.6-vc11-x86.7z» или типа того (цифры зависят от версии «PHP», от того, какой версией «MSVC» её собирали и от разрядности процессора).
5. В нужную поддиректорию распаковать исходники самого «PHP».
6. Запустить «Visual Studio Command Prompt», чтобы установить необходимые переменные окружения.
7. Перейти в директорию «php-sdk» и запустить «bin\phpsdk_setvars.bat».
8. Перейти в директорию с исходниками «PHP» и запустить «buildconf».
9. Вот теперь можно начинать компилировать расширения.
Т. е. разработчикам «PHP» было лень даже написать тупой инсталлятор, который раскидает части SDK по нужным директориям.
>В «Линуксе» всё просто
Именно поэтому я за «Линукс».
В виндах исторически багры с любой свободушней, которая в Луниксе ставится простым apt/yum/... install.
То mingw надо, то работает хуёво, то с поддержкой POSIXa проблемы.
>распаковать предварительно скачанный архив «php-sdk-binary-tools.zip».
>>>Вот именно поэтому я за «Линукс».
Многие люди, особенно девелоперы, массово переходят на Луникс именно из того что там гораздо меньше ПЕРДОЛИНГА.
Не нужно ставить дрова, не нужно собирать зипованные какашки по файлопомойкам, не нужны кряки с ви-руснёй.
Actually now that I am thinking more about it, MS does not want to be a software company anymore, but a service/infrastructure provider.
MS IE/Edge engine abandoned => switched to using Chromium with a thin layer of MS buttons and bookmarks ontop
Silverlight, Windows Forms, Windows GUI abandoned => switched to electron and javascript
Visual Studio abandoned => switched to visual studio code after buying the Atom development (which uses electron/js underneath) and adding nice colors to it
SourceSafe/ ms team services abandoned => switched to git
PowerShell abandoned => switched to bash/ssh through WSL
Windows Phone abandoned => switched to some thin android apps like an android launcher or calendar app than having a whole OS
.NET framework abandoned => switched to dotnet core coupled with an ngingx+linux hosting/proxying, because who in their right mind would use Microsoft IIS webserver afterall.
Windows kernel (very soon I guess) abandon=> switch to linux kernel in the future because the win kernel is underperformant and undocumented and nobody knows how it works. Instead provide a "compatibility" layer so all these directx proprietary software can still run ontop of the ms-linux kernel.
It will not surprise me at all if MS announces jn short term, that Win10 is going to abandon NTFS and ReFS in favour of ZFS or ext4.
Ещё в новых «Visual Studio» рядом с «MSVC» зачем-то кладут «Clang». Зачем? Зачем? Они хотят в будущем отказаться от «MSVC» и кладут «Clang», чтобы виндопогромисты привыкали?
После таких знаков Аппокалипсиса как нарушение Emacsом GPL, Microsoft Loves Linux, посещения Столлманом ИХ штаб-квартиры я уже ничему не удивлюсь.
Тем более тому что мелкомягкие решать сэкономить на индусах портирующих винду на армы, и просто прикрутят к очередной десятке бекэнд линукс-кернел с вайном.
Иногда бывает и наоборот: в «Винде» свободушня, портированная самым наглым и тупым способом, работает быстрее и стабильнее, чем исконно виндовая питушня, завязанная на DDE, OLE, COM, COM+, DCOM, ActiveX, RPC и прочие баззворды.
да, но это свежачок же.
На самом деле OLE/COM/ActiveX это была очень крутая идея, а с учетом поддержки сети (DCOM) и kerberos в домене (с прозрачной аутентификацией) так и вообще блекс. Особенно в 1999-м году!
Другой вопрос, что система получилась архисложная, а чем сложнее питушня -- тем выше шансы соснуть хуйца
Проблема «PHP» в том, что компания «Zend» не посчитала нужным собрать инсталлятор для «Windows». Типа хороший парень сам инсталлятор соберёт, если нужно.
gost # 0
3.14159265 # 0 ⇈
>protected
>public
Бочку варенья тому кто пропихнёт новый Йазык без вот такой дристни.
guest # 0 ⇈
3.14159265 # 0 ⇈
Никакие мудификаторы кроме var кмк не нужны.
Даже от стасика пользы нет особой, больше проблемы.
MAKAKA # 0 ⇈
Там всё по умолчанию
* финальное
* закрытое
Нужен только модификатор val
Koko # 0 ⇈
Попробуй коко-коко.
MAKAKA # 0 ⇈
Вот тут он рассказал, как запустить apache+nginx. Зачем? Зачем?
https://habr.com/ru/post/346086/
>Если честно, я не понимаю откуда столько негатива.
ахахахах
bormand # 0 ⇈
guest # 0 ⇈
Про него даже Конардо знает:
https://www.php.net/manual/en/install.fpm.php
Во-первых он безопаснее: у тебя PHP в отдельном процессе, и тебе пофиг какой там CRT Apache.
Во-вторых Apache не нужен вообще.
И наконец если уж ты взял Apache + mod_php, то нахуя тебе еще n ginx?
bormand # 0 ⇈
MAKAKA # 0 ⇈
у него типа локально apache Тормозит для статики? серьезно?
bormand # 0 ⇈
Выглядит вполне разумно, тем более как ты говоришь, это для локального запуска.
MAKAKA # 0 ⇈
Если ты запускаешь все через apache + mod_php, то зачем поверх apache еще nginx?
Про локальный запуск он сам говорит
bormand # 0 ⇈
У меня совсем-совсем проблем не будет при запуске их на противоположной конфигурации? Идеальная совместимость и никаких подводных камней? Не верю.
guest # 0 ⇈
Он запускает ВЕСЬ код через apache+mod_php.
А сверху запускает nginx в качестве forward proxy.
Это как если бы ты запустил перед apache squid или nginx.
bormand # 0 ⇈
MAKAKA # 0 ⇈
Docker production
По данному вопросу к сожалению я ничего сказать не могу, зато может сказать официальная документация.
Если у вас есть опыт использования docker на боевых проектах, то просьба поделиться своим опытом в комментариях: стоит ли, какие трудности и подводные камни у вас возникли и др. полезную информацию для молодых и неопытных.
bormand # 0 ⇈
MAKAKA # 0 ⇈
как видишь, он просто отдает им статику (причем весьма уныло, даже не настраивая кеш) а всё остальное тупо форвардит на apache.
bormand # 0 ⇈
Какой хтакцесс )))
guest # 0 ⇈
Локально.
gost # 0 ⇈
Блядь, а это вообще нормальный способ отдавать статику? Не первый раз вижу такую волшебную строчку, но терзают меня смутные сомнения…
MAKAKA # 0 ⇈
https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/
Хотя я бы конечно сделал через content type, но я хз -- можно ли так в nginx
bormand # 0 ⇈
guest # 0 ⇈
Там статическая пшитуня выносится в отдельную папку, и nginx обрабатывает не расширение, а путь.
bormand # 0 ⇈
З.Ы. Хотя если пыхомакаку не заставить срать в отдельный угол, то она и в еду себе насрёт.
MAKAKA # 0 ⇈
Но пыхеры, как видишь, умеют только копировать готовые куски конфига даже не задумываясь "зачем?". Куда уж им до такой хуйни додуматься
nemyx # 0 ⇈
Может быть, у него код, как у «Конардо», где всё в кучу.
MAKAKA # 0 ⇈
внутри htdocs может лежать двадцать php файлов и картинки рядом и .htaccess
nemyx # 0 ⇈
guest # 0 ⇈
nemyx # 0 ⇈
В директории htdocs лежит единственный php-файл, а именно index.php, в котором ничего критического нет, только вызов bootstrap.php, который лежит вне htdocs.
Вот реальный пример из документации по первой версии фреймворка (специально выбрал самую старую), тут htdocs названа public:
https://framework.zend.com/manual/1.12/en/learning.quickstart.create-project.html
guest # 0 ⇈
то-есть разделить по папкам все таки не получится: придется писать в конфиге nginx обработку php файла и стат файлов отдельно, а еще закрывать .htaccess, который тоже наверняка там рядом лежит.
Верно?
nemyx # 0 ⇈
guest # 0 ⇈
верно?
nemyx # 0 ⇈
Интересно, для чего так делают. Чтобы в $_SERVER['DOCUMENT_ROOT'], $_SERVER['SCRIPT_NAME'], $_SERVER['PHP_SELF'] были определённые значения?
nemyx # 0 ⇈
Ему не пофигу, где лежит index.php. Какой багор )))
gost # 0 ⇈
Ебать… Слов нет.
nemyx # 0 ⇈
Именно поэтому я за «PHP».
nemyx # 0 ⇈
В ZF есть свойство $this->basePath, через которое можно узнать путь к статике. Иногда этот путь требуется (например, когда нужно упаковать css- и js-файлы или что-то сделать с картинками). Так вот фреймворк определяет путь к статике по положению скрипта index.php. Как в первой версии ZF какой-то дурак предложил, так оно осталось и в ZF2, и в ZF3, и в Laminas.
Какой анскилл )))
bormand # 0 ⇈
nemyx # 0 ⇈
https://github.com/hobodave/bundle-phu
guest # 0 ⇈
bormandinho # 0 ⇈
guest # 0 ⇈
https://youtu.be/fGKR1Z1lRik
nemyx # 0 ⇈
nemyx # 0 ⇈
В пыхе не так много функций, которые зависят от типа интерпретатора.
Специально для FastCGI всего одна функция:
https://www.php.net/manual/ru/function.fastcgi-finish-request
Она отдаёт страницу пользователю, но не убивает контекст, а позволяет доделать фоновую задачу.
Для запуска из-под «mod_php» есть пачка функций:
https://www.php.net/manual/ru/book.apache.php
Но они не особо нужны. Разве что если сайт использует и другие модули «Apache», например, для конвертации документов или ещё какой-нибудь питушни.
Есть ещё пачка функций для «IIS» и для какого-то «Netscape» (вообще не представляю, что это за сервер).
Всё, больше ничего серверозависимого нет. Разве что конфиг самого сервера (например, могут быть дурацкие файлы .htaccess, которые требуют «Apache»).
guest # 0 ⇈
Это вообще бессмысленно
nemyx # 0 ⇈
Зачем же тогда вообще нужен «Арасне»? Он нужен, только если проект использует какие-то нативные модули «Арасне», аналогов которых нет у «пдіпх», или файлы .htaccess, которые анскильная обезьяна не может перевести в конфиг «пдіпх». Всё, больше низачем.
Stallman # 0 ⇈
nemyx # 0 ⇈
Если у проекта куча точек входа, и каждая точка входа требует свои параметры рнр.іпі, то портировать его с «Арасне» на что-то другое нелегко. Придётся либо переносить настройку в рнр-файл (функция ini_set; в документации по параметру должен быть флаг PHP_INI_USER или PHP_INI_ALL), либо запускать несколько FastCGI-серверов, каждый со своими параметрами.
guest # 0 ⇈
напомню, что авто статьи делает окружение для разработки на своей машине
gost # 0 ⇈
Это чтобы не шкварить прекрасный «Nginx» дерьмом вроде «PHP». А «Апач» можно, «Апач» и сам, скажем так, не самый качественный продукт.
guest # 0 ⇈
Apache 1.3, mod_cgi, perl, guestbook.cgi...
Stallman # 0 ⇈
nemyx # 0 ⇈
KOPOHABuPYC # 0 ⇈
nemyx # 0 ⇈
https://www.php.net/manual/ru/book.htscanner.php
Расширение заброшено в 2012-м году, поддерживает только PHP 5.3-5.6.
nemyx # 0 ⇈
>> fpm
FPM — это FastCGI process manager. FastCGI можно использовать с ним и без него. В первом случае детей рождает и убивает FPM, во втором случае детей рождает и убивает сервер («nginx», «lighttpd» и т. п.).
guest # 0 ⇈
nemyx # 0 ⇈
А «lighttpd» может:
https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModFastCGI
TEH3OPHblu_nemyx # 0
guest # 0
В языках для всех остальных они выглядят так:
Коко
Я же говорю: пых берет всё самое плохое из всех возможных языков.
Аксесоры и мутаторы в скриптушке это пиздец
Отсутствие для них сахара это пиздец в кубе.
Сука, даже в C# это симпатичнее: там проперти генерится
TEH3OPHblu_nemyx # 0 ⇈
guest # 0 ⇈
Но в джаве хотя-бы нет ключ слова function. Тоесть джава менее вербозна, чем пых.
В си это будет структура.
В питоне не будут лепить аксессоры и мутаторы
В c# будут проперти
В ruby аксесоры и мутаторы генерятся
В JS будет просто объект
Где еще будет такая же параша???
bormand # 0 ⇈
MAKAKA # 0 ⇈
У Kotlin и C# таких проблем нет: там методы генерятся сами.
bormand # 0 ⇈
>> Если ты не либу для других пишешь.
MAKAKA # 0 ⇈
но опять таки: джавий блох не велит
Кстати
https://projectlombok.org/features/Data
В груви кстати тоже геттеры генерятся емнип.
3.14159265 # 0 ⇈
Не все знают, но в Йаже на методах интерфейса бублик можно не писать.
Автовывод.
Fike # 0 ⇈
gost # 0 ⇈
Звучит как форма онанизма у ООПушков.
3.14159265 # 0 ⇈
Оксюморон, да.
Но к этому я и подвожу.
Мудификаторы нахуй не нужны, если в языке уже есть интерфейсы.
Экспортировать из модуля методы через интерфейс (публичное).
Всё остальное делать видимым внутри мудуля (приватное).
3.14159265 # 0 ⇈
По сути выходят улучшенные .h-файлы с примесью ООП.
Опять всё лучшее придумано ещё в Сишке.
Desktop # 0 ⇈
guest # 0 ⇈
Мне кажется совершенно здравой идея описать публичный интерфейс в отдельном файле (можно и с документацией) и потом распостранять его как часть SDK.
Вместо этого современные языки предлагают мне либо создавать интерфейсы (что тоже самое!) либо экспортировать наружу свои методы (если я просто делаю класс).
Разделение любого модуля или класса на интерфейс и имплементацию это логично, имхо
Desktop # 0 ⇈
jojaxon # 0 ⇈
Desktop # 0 ⇈
MAKAKA # 0 ⇈
в жобе можно
TEH3OPHblu_nemyx # 0 ⇈
Примерно так:
Вообще мне ?:'' не нравится. Вместо этой питушни можно было установить дефолтные значения полей.
Кстати, зачем в этой задаче геттеры и сеттеры? Почему нельзя поля сделать public, а не protected?
MAKAKA # 0 ⇈
Потому что автор подсмотрел, что в джаве так делают, и тоже сделал. Мозга-то нету. Пыхер-с.
Но даже в жобе есть Ломбок
OlegUP # 0 ⇈
https://www.youtube.com/watch?v=lfdAwl3-X_c
guest # 0 ⇈
Видео не нужно.
Если у них есть Ценное Мнение -- пусть напишут статью или пейпер.
frnnds # 0 ⇈
Технически, так делают для защиты этих полей (данные можно проверять при их поступлении), тут это избыточно, говнокод.
gost # 0 ⇈
MAKAKA # 0 ⇈
У джанги это вообще через атрибуты решено:
с помощью магии))
gost # 0 ⇈
«dataclass» — более мощный, универсальный и новый (>=3.7, ЕМНИП) инструмент для создания, собственно, датаклассов с (опционально) сложной логикой.
MAKAKA # 0 ⇈
https://www.python.org/dev/peps/pep-0589/
gost # 0 ⇈
Fike # 0 ⇈
ёбаные анскилябры
3.14159265 # 0 ⇈
gost # 0 ⇈
— ключ x1 испарился.
UPD:
3.14159265 # 0 ⇈
Да. Не учёл.
Ну это общая проблема, инвариантная языку.
>>> x1.x = 42
Разве нельзя запретить его мутировать?
А коли нельзя, то человек сам виноват.
Кстати именно поэтому я за умолчательную немутабельность и модификатор var.
Desktop # 0 ⇈
3.14159265 # 0 ⇈
Жавашки к примеру так же обосрались, чему посвящена отдельная глава у Блоха.
guest # 0 ⇈
память же засрут, нет?
jojaxon # 0 ⇈
Великий kill приди, память освободи!
bormand # 0 ⇈
А в последней версии за каким-то хером прикрутили gc.
guest # 0 ⇈
nemyx # 0 ⇈
3.14159265 # 0 ⇈
Desktop # 0 ⇈
Если ты про время жизни, то освободился словарь, вместе с ним грохнули и ключи.
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
а у юзера того дохуя всяких своих полей и вообще он композиция
bormand # 0 ⇈
guest # 0 ⇈
но твой варант верный конечно, а еще он не позволит захватить в кучу памяти юзером и теми,на кого он ссылается
bormand # 0 ⇈
Desktop # 0 ⇈
Там вообще можно хранить не объекты, а хеши, но тогда коллизии не разрулишь.
gost # 0 ⇈
jojaxon # 0 ⇈
gost # 0 ⇈
Desktop # 0 ⇈
gost # 0 ⇈
Desktop # 0 ⇈
Копирование это NSCopying и @property(copy).
gost # 0 ⇈
Понятно.
Desktop # 0 ⇈
gost # 0 ⇈
Desktop # 0 ⇈
Ты сначала пишешь, что в Питоне нет механизмов копирования произвольных объектов, а теперь, что можно руками всё копировать. Это как?
В ObjC тип, который ты хочешь использовать в качестве ключа в словаре, должен быть Equatable, Hashable и NSCopying. Все механизмы на столе. В питоне как?
gost # 0 ⇈
Питоновскому дикту нужны __hash__() и __eq__() (N.B.: про cmp в начале ветки напиздел). Ещё ключи нельзя менять, иначе будет багор — т.е. либо они должны быть иммутабельными, либо их никто не должен трогать.
> Ты сначала пишешь, что в Питоне нет механизмов копирования произвольных объектов, а теперь, что можно руками всё копировать. Это как?
Я про встроенные механизмы, вроде копирующего конструктора из крестов. Но да, тут я не совсем прав: для этого есть магические методы __copy__() и __deepcopy__(). Тем не менее, некоторые объекты (вроде перечисленных выше сокетов и файлов) глубоко скопировать нельзя.
> В ObjC тип, который ты хочешь использовать в качестве ключа в словаре, должен быть Equatable, Hashable и NSCopying.
А NSCopying зачем?
Desktop # 0 ⇈
В обжективе ещё есть NSHashTable и NSMapTable. Там своя атмосфера:
The hash table is modeled after NSSet with the following differences:
- It can hold weak references to its members.
- Its members may be copied on input or may use pointer identity for equality and hashing.
- It can contain arbitrary pointers (its members are not constrained to being objects).
gost # 0 ⇈
Desktop # 0 ⇈
gost # 0 ⇈
Теперь, если мы изменим x1-x3, то внутри словаря изменится и ключ со всеми полагающимися баграми.
Вот если бы словарь мог узнавать, когда его ключи меняются, тогда было бы интереснее.
Desktop # 0 ⇈
С произвольным объектом всё немного проще.
> Вот если бы словарь мог узнавать, когда его ключи меняются, тогда было бы интереснее.
- я давно не ковырялся в ObjC, не могу сказать про такие тонкости. Чисто технически это возможно при помощи KVO/KVC, но вызовет ещё больший оверхед.
gost # 0 ⇈
Desktop # 0 ⇈
Надо будет как-то поиграться с разными кейсами, как словарь будет эрогировать на такое.
Desktop # 0 ⇈
Бриджинг между Dictionary и NSDictionary естественным образом накладывает некоторые ограничения на типы ключей.
Реализация протокола NSCopying не даёт ровным счётом ничего до того момента, пока класс не помечен как @objc. Если его пометить таким образом, то происходит копирование ключа в словарь и изменение изначального объекта не приводит к UB.
Нахуевертили, в общем.
3.14159265 # 0 ⇈
Честно говоря трудно представить себе долбоёбов, которые ложат в качестве ключа открытые объекты сокетов или файлов.
bormand # 0 ⇈
Ну удобно же. Можно быстро найти контекст по сокету, с которого пришёл пакет. Я на сишке так делал.
Просто сравнивать надо ссылки на эти сокеты, а не их "содержимое". В джаве вроде так и делается по-умолчанию если ничего не перегружать?
3.14159265 # 0 ⇈
Да.
>Просто сравнивать надо ссылки на эти сокеты, а не их "содержимое".
Так зачем тогда «глубина»? Я же говорю сами объекты, а не ссылки.
guest # 0 ⇈
Но пришли питузы, и отняли у программиста это понимание.
Теперь есть всякие шеллоу копи, дип копи, никто нихуя не понимает, и все ебутся.
Desktop # 0 ⇈
guest # 0 ⇈
Если я хочу скопировать сами объекты, то мне нужно скопировать сами объекты, и исправить указатели.
Это очень просто и логично. Это становится интуитивно понятно через пол года программирования на сишке.
В других языках не так
Desktop # 0 ⇈
gost # 0 ⇈
> Питон такой язык
Не-а. Проблемы value/reference не касаться можно только в полностью иммутабельном языке (1024-- приде, ссылочную прозрачность наведе!). А в «Python» ссылки на мутабельные объекты приводят к регулярным баграм. Классические питоньи ссылочные багры:
Desktop # 0 ⇈
3.14159265 # 0 ⇈
Багры от мутабельных ссылок есть во всех языках, где эти мутабельные ссылки используются.
Например С# (там же упоминание точно такой же траблы в js):
http://govnokod.ru/11946
3.14159265 # 0 ⇈
Но вот это просто багор классический:
>def add_to_list(value, lst=[]):
Сколько раз говорилось: сделайте скриптуху с умолчательной немутабельностью.
Может это сильно и не помогло бы.
А может программеру пришлось бы писать:
> return append(lst,value);
Или явно копировать объёкт.
В любом случае избавило бы от проёбов типа
И не сильно бы выбешивало, т.к. 80-90% переменных в методе обычно не меняются.
3.14159265 # 0 ⇈
Плюс там не будет циклической питушни.
Поэтому помимо отсутствия ссылочных проблем, бонусом идут ARC-friendly структуры данных, отстутствие зацикливания при сериализации и ненужность tracing gc.
Минус конечно, это постоянная борьба с немутабельностью.
gost # 0 ⇈
guest # 0 ⇈
https://www.python.org/dev/peps/pep-0351/
в руби строки мутабельны, и это приводит к отдельной сущности -- символу
gost # 0 ⇈
>>> A mapping object maps hashable values to arbitrary objects.
>>> An object is hashable if it has a hash value which never changes during its lifetime (it needs a __hash__() method), and can be compared to other objects (it needs an __eq__() method). Hashable objects which compare equal must have the same hash value.
gost # 0
Сразу представил, как аффтар будет делать «модель» с десятком свойств.
MAKAKA # 0 ⇈
Он небось еще и круды руками пишет все
guest # 0
Год 2020, высокоуровневый язык пхп.
У меня всё
TEH3OPHblu_nemyx # 0 ⇈
Безо всяких setIq, setId.
Правда, придётся в кокококонструкторе сделать чуть-чуть бройлерплейта.
MAKAKA # 0 ⇈
Бля, что с этим миром не так?! Структура с полями, инициализируемая сразу -- самое частоиспользуемое, самое родное, почему его нету из коробки в половине скриптухов кроме lua и js?
TEH3OPHblu_nemyx # 0 ⇈
MAKAKA # 0 ⇈
OCETuHCKuu_nemyx # 0 ⇈
OCETuHCKuu_nemyx # 0 ⇈
https://ideone.com/6XwEjJ
TEH3OPHblu_nemyx # 0 ⇈
Desktop # 0 ⇈
MAKAKA # 0 ⇈
кста
в objc же были @property, там руками тоже можно было не пусать сеттеры и геттеры
или я пута.ю?
Desktop # 0 ⇈
MAKAKA # 0 ⇈
Desktop # 0 ⇈
Desktop # 0 ⇈
Мы тут огненно тёрли за инкапсуляцию как-то и пришли к выводу, что это вообще МАСТХЕВ, вот в твоей сисечке все поля видны, как пизда у молодой училки, а в пыхе поменял приват на vixenпротектед и gost доволен
3.14159265 # 0 ⇈
> высокоуровневый язык пхп
Вот сам хотел такой коммент написать.
MAKAKA # 0
Desktop # 0 ⇈
Fike # 0 ⇈
OCETuHCKuu_nemyx # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
phpBidlokoder2 # 0 ⇈
gost # 0 ⇈
Koko # 0 ⇈
MAKAKA # 0 ⇈
jojaxon # 0 ⇈
guest # 0 ⇈
Скриптовать игры лучше на Lua.
Lua лучший скриптух.
Во-первых он очень быстрый.
Во-вторых в нем бесплатный интероп с сями
В-третьих в нем нет этой тупой разницы между ассоц.массивом и объектом
OCETuHCKuu_nemyx # 0
gost # 0 ⇈
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
3.14159265 # 0 ⇈
>if the number is divisible by 5
Кстати хорошая идея для модулей npm
3.14159265 # 0 ⇈
В 2к20 считается.
@Data is a convenient shortcut annotation that bundles the features of @ToString, @EqualsAndHashCode, @Getter / @Setter and @RequiredArgsConstructor together
In other words, @Data generates all the boilerplate that is normally associated with simple POJOs (Plain Old Java Objects)
guest # 0 ⇈
Именно потому я за groovy, kotlin, ObjC и C#, где проперти генерятся из коробки
Fike # 0
> Под формулировкой "Модель — это исключительно бизнес-логика" подразумевается что модель — отражает сущности, данные и поведение предметной области, и никак не касается данных и объектов сервисного слоя и слоя приложения.
какой бизнес-объект без протекающих абстракций ))))
gost # 0 ⇈
Fike # 0 ⇈
действительно, кому нужен finally
phpBidlokoder2 # 0
3.14159265 # 0
Пайтух такой пайтух.
Нужно было поставить pip-модуль, pip install сломался.
Сообщает что «пайтух не может снести яйцо»:
Решение нашлось быстро:
https://stackoverflow.com/questions/35991403/pip-install-unroll-python-setup-py-egg-info-failed-with-error-code-1
https://stackoverflow.com/questions/32068325/python-setup-py-egg-info-failed-with-error-code-1
И оказалось «тривиальным».
БЛЯТЬ, МОЖНО БЫЛО ЗДЕЛАТЬ ЧТОБЫ РАБОТАЛО БЕЗ ПАЙТУШНИ И ПЕРДОЛИНГА??!!!
TEH3OPHblu_nemyx # 0 ⇈
3.14159265 # 0 ⇈
>pip install --upgrade setuptools
Из чего я делаю вывод что отребье било себя в грудь: «дак мы же как Сишка», «у нас тоже есть пакетный минетжер».
А по факту не осилили простейший dependency resolver.
TEH3OPHblu_nemyx # 0 ⇈
Через easy_install новая версия «distribute» ставится, но «unroll» опять ставиться отказывается.
3.14159265 # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
«unroll» хочет устанавливаться только через «ez_setup», а «ez_setup» не обновляли с 2010-го года, т. е. уже десять лет. За это время некоторые ссылки на pypi.org стали недействительными.
Чтобы поставить «unroll» в 2020-м году, нужно патчить пакет «ez_setup».
TEH3OPHblu_nemyx # 0 ⇈
Короче, там весь пакет переписывать надо.
TEH3OPHblu_nemyx # 0 ⇈
Fike # 0 ⇈
nblXOMAKAKA # 0 ⇈
Ну что за макаки!
Fike # 0 ⇈
nemyx # 0 ⇈
Да! Пусть не по правилам игра!
Fike # 0 ⇈
всегда радовала эта хуйня
TEH3OPHblu_nemyx # 0 ⇈
Fike # 0 ⇈
ropuJIJIa # 0 ⇈
У меня пакет «unroll» установился. Мои действия:
1. Если по глупости поставили «ez_setup», удаляем:
2. Скачиваем и распаковываем пакет «unroll» в чистую директорию:
3. Переходим в директорию unroll-0.1.0 и из файла setup.py нахрен удаляем первые две строки: Остальные строки оставляем.
4. Собираем и устанавливаем «колёса»:
Всё, «unroll» установлен.
Ну что за обезьяны на «SO»? По нескольку раз вслепую повторяют бессмысленные команды вместо того, чтобы решить проблему.
ropuJIJIa # 0 ⇈
У меня два варианта:
1. Искать в файле «setup.py» в сломанных пакетах строчки, упоминающие «ez_setup», и удалять.
2. Написать фейковый модуль «ez_setup», состоящий из метода «use_setuptools», который ничего не делает.
guest # 0 ⇈
https://bootstrap.pypa.io/ez_setup.py
This method is DEPRECATED. Check https://github.com/pypa/setuptools/issues/581 for more details.
Вместо них нужно использовать пакеты, которые ставятся через pip.
Автору конкретного говнопакета ты можешь послать пулреквест.
Но последняя версия говнопакета -- Released: Apr 16, 2014
И коммитов не было давно https://github.com/Zulko/Unroll
Автоу похуй
Можеш его форкнуть, и починить у себя. Это нормльно для опенсурса
3.14159265 # 0 ⇈
Правильный способ это не использовать питуха.
Пайтух-гермафродит не нужен.
jojaxon # 0 ⇈
3.14159265 # 0 ⇈
Некроссплатформенная, непортируемая, тормозная скриптуха с торчащими нативными костылями.
ECMA хотя бы портабельный, и не приколоченный сишными гвоздями к платформе.
С нодушков здесь все смеялись, за то что пишут свои sshи.
А в это время анскильная Питухомразь просто ворует сишные либы.
guest # 0 ⇈
Но яйца не нужны: все давно перешли на колёса. Колёса ставит пип-инсталлер.
Вот сравнения
https://packaging.python.org/discussions/pip-vs-easy-install/
ropuJIJIa # 0 ⇈
https://packaging.python.org/discussions/wheel-vs-egg/
Колёса появились в 2012-м году. Т. е. вся эта питушня с «изяинсталлом» была актуальна до 2012-го года (точнее, до того года, когда перестали распространять «яйца»).
bormand # 0 ⇈
MAKAKA # 0 ⇈
А еще есть pyenv и poetry
Ах да, и к яйцам с колесами не забудьте sdist
bormand # 0 ⇈
MAKAKA # 0 ⇈
Вот вам переписывание Правильно.
Кстати: из твоего списка выкинули тока Easyinstall и яйца
bormand # 0 ⇈
MAKAKA # 0 ⇈
разве setuptools не работает поверх distutils?
bormand # 0 ⇈
MAKAKA # 0 ⇈
setuptools -- apt
ясна ли аналогия ?:)
bormand # 0 ⇈
А pip тогда что?
guest # 0 ⇈
а pip это apt:))
jojaxon # 0 ⇈
bormand # 0 ⇈
jojaxon # 0 ⇈
Desktop # 0 ⇈
Формат описания пакетов это некая спека. При чём тут формат данных, в котором она будет храниться? Сколько интерфейсов напишут, столько тулза таких форматов и примет.
Ничему никого жизнь не учит. А ещё называются домом высокой культуры быDа!
jojaxon # 0 ⇈
gost # 0 ⇈
jojaxon # 0 ⇈
Desktop # 0 ⇈
MAKAKA # 0 ⇈
jojaxon # 0 ⇈
Или хочет показать малышне кто тут батя.
bormand # 0 ⇈
Своё говно не воняет, угу.
Но вообще он там писал про какие-то совсем уж дикие кейсы когда numpy целиком тащат ради NaN и т.п.
nemyx # 0 ⇈
Звучит как название книги. Что-то типа «Гарри Поттер и яйца на колёсах».
3.14159265 # 0 ⇈
В то время считалось, что питушиные яйца используют ведьмы для приготовления колдовских скриптов.
Для пользователей этот факт был неопровержимым доказательством пердолинга птицы. Адвокат апеллировал тем, что несение яйца - это непроизвольное действие, в котором не было злого умысла, поэтому и наказывать за это несправедливо.
Но посонов такие доводы не убедили. Питуха, как еретика, сожгли на костре вместе с яйцом.
В XXI веке голландский ученый доказал, что птица, болеющая инфекционным заболеванием, может непроизвольно поменять версию со 2ой на 3ю.
jojaxon # 0 ⇈
bormand # 0 ⇈
Ну скорее юзал свежие и популярные либы, которые из коробки работают и не надо лезть под капот.
gost # 0 ⇈
nemyx # 0 ⇈
nemyx # 0 ⇈
P.S. Кому-нибудь приходилось использовать команды JOIN, APPEND и MKLINK?
gost # 0 ⇈
«mklink» пару раз юзал, но параметры, естественно, забыл все.
nemyx # 0 ⇈
В каких-то реализациях «DOS», если не задать «LASTDRIVE Z», для дисков с номерами после 26 назначались «буквы» [, \, ], ^, _, `, которые не принимали многие программы (бэкслэш уж точно никто не принимал).
gost # 0 ⇈
guest # 0 ⇈
Обращаться к диску можно по полному имени объекта или прикрутить его поапкой в другой диск (как в уникс)
nemyx # 0 ⇈
В «DOS» у каждого диска свой текущий каталог. Я, например, делаю так: Вернувшись на диск C:, я вернусь в директорию NC, потому что последняя команда cd изменила текущую директорию только у диска D:.
В «NT» же сначала сделали глобальную текущую директорию. Т. е. после команд c: и cd NC текущей будет директория \DosDevices\C:\NC. Глобально. Изменение текущей директории на диске D: её сбросит.
Чтобы досовские батники работали в «NT», пришлось прикручивать костыль: теперь в енвиронменте создаются «скрытые» пельменные, имена которых начинаются со знака равенства, хранящие адрес текущей директории на каждом диске. Следующая команда их покажет:
bormand # 0 ⇈
Зачем? Зачем? Малость было места на дисках, поэтому юзали отдельный диск под каждую задачу?
MAKAKA # 0 ⇈
где ты должен оказаться?
bormand # 0 ⇈
А вот кстати, это случаем не со времён, когда у доса не было каталогов пришло?
Типа раньше я мог копировать a:1.txt в b:1.txt. Потом в дос завезли каталоги, но я не хочу ничего менять. Поэтому я могу сфокусировать каждый диск на нужный каталог и продолжать копировать a:1.txt в b:1.txt.
MAKAKA # 0 ⇈
переключение диска? ну да, с тех пор.
Были два диска: A: и B: (два дисковода на 360 что-ли килобайт).
Каталоги завезли где-то в районе третьего доса что-ли
bormand # 0 ⇈
1) переключение диска через a:
2) обращение к текущему каталогу на диске a: как a: (без слеша)
nemyx # 0 ⇈
Только в DOS 2.0 в файловую систему завезли атрибут «директория», чтобы директории были не только корневыми, и у файловых функций добавили разделитель поддиректорий (почему-то выбрали бэкслэш).
3.14159265 # 0 ⇈
Стоп. А разве это так работало?
По-моему оно оставляло на диске А.
Ну были там какие-то багры со сменой диска, что нужно писать
C:
А потом уже cd
nemyx # 0 ⇈
3.14159265 # 0 ⇈
Ага, что-то в этом духе.
Я помню что там было просто выбешивающее поведение.
bormand # 0 ⇈
Почему было? Оно и в десятке точно такое же выбешивающее.
gost # 0 ⇈
А вот в «Powershell» это говно исправили. Именно поэтому я за «Powershell».
3.14159265 # 0 ⇈
Потому что я давно уже виндой не пользовался. Вдруг починили.
>Оно и в десятке точно такое же выбешивающее.
Какой CHDIR )))
MAKAKA # 0 ⇈
Важно, что у каждого диска был свой каталог. Во всяком случае, в DOS 6.22
nemyx # 0 ⇈
Итого у нас два уровня текущей питушни:
1. Глобальный переключатель текущего диска.
2. На каждом диске переключатель текущей директории.
MAKAKA # 0 ⇈
3.14159265 # 0 ⇈
То есть эта питушня даже не баг, но фича.
Коли уж вайн так себя ведёт.
bormand # 0 ⇈
ropuJIJIa # 0 ⇈
bormand # 0 ⇈
3.14159265 # 0 ⇈
Вроде это появилось только со времён 2K/XP. И вроде на NTFS. Но это не точно.
Кстати там свои приколы были.
Я вот точно не помню, но кажется когда-то ловил глюк с местом. На одном диске место было достаточно, а на другом мало.
А при копировании, встроенный в винду чекер свободного места тупил и выдавал окно что на диске мало места.
3.14159265 # 0 ⇈
Можно папку было переименовать в хитрый UUID, и тогда вместо её содержимого эксплорером открывалась например Панель Управления.
Причём если переименовать папку обратно, то все данные в ней естественно оставались.
bormand # 0 ⇈
ropuJIJIa # 0 ⇈
3.14159265 # 0 ⇈
MAKAKA # 0 ⇈
ropuJIJIa # 0 ⇈
Ты можешь в одной папке создать подпапку с именем и подпапку с именем
В «Проводнике» обе будут отображаться как корзина.
ropuJIJIa # 0 ⇈
Кстати, для корзины есть такой раздел реестра:
Там есть подразделы ContextMenuHandlers и PropertySheetHandlers. Похоже, что именно в них указано, какому обработчику делегируем показ этой папки.
Вот тут что-то про эту питушню написано:
https://docs.microsoft.com/en-us/windows/win32/shell/handlers
3.14159265 # 0 ⇈
3.14159265 # 0 ⇈
>Но яйца не нужны: все давно перешли на колёса. Колёса ставит пип-инсталлер.
Вооо. Теперь понятно и по делу.
nemyx # 0 ⇈
https://wiki.php.net/internals/windows/stepbystepbuild
В «Линуксе» всё просто: phpize; ./configure; make
Только перед этим нужно поставить пакет «php-dev» через «apt-get» или какой-нибудь другой пакетный менеджер. Возможно, даже команды phpize... запускать не придётся, их запустит сам «pecl».
В «Windows» же нужно:
1. Cоздать директорию «php-sdk».
2. В неё распаковать предварительно скачанный архив «php-sdk-binary-tools.zip».
3. В этой директории создать «phpdev» с кучей поддиректорий.
4. В нужную поддиректорию распаковать «deps-5.6-vc11-x86.7z» или типа того (цифры зависят от версии «PHP», от того, какой версией «MSVC» её собирали и от разрядности процессора).
5. В нужную поддиректорию распаковать исходники самого «PHP».
6. Запустить «Visual Studio Command Prompt», чтобы установить необходимые переменные окружения.
7. Перейти в директорию «php-sdk» и запустить «bin\phpsdk_setvars.bat».
8. Перейти в директорию с исходниками «PHP» и запустить «buildconf».
9. Вот теперь можно начинать компилировать расширения.
Т. е. разработчикам «PHP» было лень даже написать тупой инсталлятор, который раскидает части SDK по нужным директориям.
3.14159265 # 0 ⇈
Именно поэтому я за «Линукс».
В виндах исторически багры с любой свободушней, которая в Луниксе ставится простым apt/yum/... install.
То mingw надо, то работает хуёво, то с поддержкой POSIXa проблемы.
>распаковать предварительно скачанный архив «php-sdk-binary-tools.zip».
>>>Вот именно поэтому я за «Линукс».
vistefan # 0 ⇈
vistefan # 0 ⇈
3.14159265 # 0 ⇈
Не нужно ставить дрова, не нужно собирать зипованные какашки по файлопомойкам, не нужны кряки с ви-руснёй.
Потому M$ и пилит свои WSL 1/2.
Кстати зацени: https://www.phoronix.com/scan.php?page=news_item&px=Microsoft-DXGKRNL-Uphill-Battle
guest # 0 ⇈
3.14159265 # 0 ⇈
[u]https://www.phoronix.com/scan.php?page=news_item&px=Microsoft-Writing-Wayland-Comp[u]
Там занятный срач:
https://www.phoronix.com/forums/forum/linux-graphics-x-org-drivers/wayland-display-server/1180655-microsoft-is-writing-its-own-wayland-compositor-as-part-of-wsl2-gui-efforts
Особенно я орнул с этого:
nemyx # 0 ⇈
guest # 0 ⇈
gost # 0 ⇈
3.14159265 # 0 ⇈
После таких знаков Аппокалипсиса как нарушение Emacsом GPL, Microsoft Loves Linux, посещения Столлманом ИХ штаб-квартиры я уже ничему не удивлюсь.
Тем более тому что мелкомягкие решать сэкономить на индусах портирующих винду на армы, и просто прикрутят к очередной десятке бекэнд линукс-кернел с вайном.
MATEMATuK_u3_PAIIIKu # 0 ⇈
guest # 0 ⇈
nemyx # 0 ⇈
https://gist.github.com/Orvid/5c9bc8c54e960a604968
35 пунктов.
nemyx # 0 ⇈
nemyx # 0 ⇈
guest # 0 ⇈
Зато DCOM/RPC позволяет удаленно создавать объекты на машине вообще без TCP/IP
3.14159265 # 0 ⇈
«systemd» например никуда толком не портирован.
guest # 0 ⇈
На самом деле OLE/COM/ActiveX это была очень крутая идея, а с учетом поддержки сети (DCOM) и kerberos в домене (с прозрачной аутентификацией) так и вообще блекс. Особенно в 1999-м году!
Другой вопрос, что система получилась архисложная, а чем сложнее питушня -- тем выше шансы соснуть хуйца
3.14159265 # 0 ⇈
Да. OLE/ActiveX был прикольный. И в браузере можно было лепить аналог ява-апплетов.
Просто во-первых у них был целый зоопарк всяких технологий: DDE, MFC, ATL, ... От самого списка ехала крыша.
А во-вторых, ихнее RPC DCOM/ActiveX мало того что было сложным, так ещё и дырявым как решето. Фактически позволяя выполнять удалённо любой код.
nemyx # 0 ⇈
guest # 0 ⇈
Но самая идея того, что у тебя есть ActiveX, и ты можешь вставить его хоть в браузер, хоть в VB приложение -- она охуенна
3.14159265 # 0 ⇈
Мелкомягкие Ява-апплеты?
В VB даже виртуальная машина была 🙂 msvbvm
guest # 0 ⇈
нельзя вставить документ word в качестве апплета
nemyx # 0 ⇈
KOPOHABuPYC # 0 ⇈
KOPOHABuPYC # 0 ⇈
Вряд ли кто-то захочет поместить свой детородный орган в рот больного ОРВИ.
nemyx # 0 ⇈
Проблема «PHP» в том, что компания «Zend» не посчитала нужным собрать инсталлятор для «Windows». Типа хороший парень сам инсталлятор соберёт, если нужно.
AMEPuKAHCKuu_xyu # 0
guest # 0
Теперь вы тоже это знаете