Люди говорили - будет репл, настанет счастье. И вот репл есть, а счастья нет.
Во-первых, проблема масштаба. Тесты разных уровней - от юнитов до нагрузочных и даже бета-тестирование и постпродажное обслуживание со снятием телеметрии - позволяют худо-бедно покрыть большой спектр разных сценариев и опять же разных уровней - от отдельных деталек до всей системы, и от отдельных моментов (вызовов конкретной функции) до длительной работы.
Что может покрыть отладка с помощью репла? Очень немногое. Отдельные моменты в работе, пусть и длительной. В примере с автомобилем: взяли и на ходу однократно поменяли клиренс. Перескочили через конкретную кочку. Перед следующей кочкой снова будем останавливаться и менять? Ок, поменяли клиренс навсегда. А весь предыдущий маршрут мы проехали со старым клиренсом, и что там было бы, мы не узнаем, пока не перезапустим весь тест-драйв с нуля с новыми настройками.
Во-вторых, проблема взаимодействия с реальным миром. В первую очередь, с реальным временем. Любые остановки под отладчиком останавливают внутреннее время программы, но не останавливают внешний мир. Клонирование состояния не клонирует мир. Реплика может оказать существенное влияние на работу оригинала. Вот вы ехали на машине по треку, решили поменять клиренс, поставили на трек вторую машину с новыми настройками. И через круг влупились в первую машину, оставленную там техниками.
Ну и про ненавистные логи. Это один из способов снятия телеметрии. В некоторых случаях - единственно возможный. По двум причинам:
минимальное вмешательство в течение времени (наносекундные задержки)
невозможность живой отладочной сессии (в продакшене у клиентов, например)
Не значит, что репл отстой. Не отстой, но и логи не отстой.
А научиться говнокодить на васике за три часа - не бог весть какой достижение, любой вундеркинд так сможет. Сможет ли вундеркинд охватить пониманием работу всей системы - вот вопрос, который дифференциально диагностирует программиста от кодерка.
Те же автомобильные двигатели проектируют не просто так, а ради определённых машин (а машины проектируют ради определённых двигателей). Чтобы и под капот влезло, и трансмиссию не порвало, и сколько жрёт и сколько прёт в допусках, и сколько выхлопа тоже в допусках. И стоимость изготовления и техобслуживания тоже. И если программист говорит "это головная боль не меня, а архитектора", то это не программист, а кодерок. Даже джун должен задасться хотя б туманными вопросами и обсудить с тимлидом в рамках своего фронта работ.
-- Claude, что делает команда rm -rf ? -- Позволь мне объяснить это на живом примере. Вот смотрите: rm -rf / && ls -la / сейчас покажет вам, какие файлы остались после принудительного удаления.
Потому что косплеить нейронку, равно как и любой другой толстый троллинг - это небесплатное удовольствие. Даже если это был не троллинг, а от всего чистого наивного сердца! Просто нефиг использовать узнаваемый нейроночный стиль.
Потому что сам план статьи такой был. Дать первое определение - пусть сырое и неточное, - и проверять и корректировать его на разных примерах.
Даже если неявно в каждом определении присутствует "... это работает для меня в первую очередь", - всё равно, не надо думать о себе как о ком-то уже познанном и стабилизированном.
Даже если неявно "... это работает для стабилизированного меня". Хотя бы потому, что предмет - прокрастинация - это некоторое патологическое состояние. То есть, для уже нестабильного. И тем более, непознанного, иначе бы вмиг исцелился.
В таком случае, прикладывать определение к ассортименту других людей решает сразу две встречные задачи. Во-первых, позволяет проверить само определение, или хотя бы найти границы его применимости. Во-вторых, познавать себя: чем я подобен другим, а в чём - уникален. А может, там есть классы подобия с разной степенью связности между ними: школота ведёт себя так, старпёры этак. И главное, что людей - много. Поэтому посмотреть можно сразу на большой массив примеров. А не "Иван Иваныч прокрастинирует так, Соколиное Перо этак, хмм, что же меж ними общего".
А глядя только на самого себя изнутри самого себя - есть большой шанс позакрывать глаза.
Я же не предложил заведомо надуманную ситуацию и заведомо надуманного персонажа, это же не Трурль с Клапауцием (хотя и они - гротеск на обычных людей). В роли школьника уж каждый побывал, не так ли? Пусть они там тоже разные, кто-то задрот, кто-то хулиганьё, ну можно для знакомых ролей примерить, а то и построить исчерпывающую классификацию и примерить для каждого.
Ну и в конце концов, если смоделировать трольскую ситуацию и увидеть, что она точно не подходит, - это как раз нащупывание границ себя. "Неее, я не такой". Я не школота, я никогда не убегаю радостно лупить по мячу, чего-то в детстве я упустил, эээээхххх ))) Хотя, никогда не говори никогда.
Мне кажется, что такие философские утверждения надо проверять на корнер-кейсах откровенно трольского вида, чтобы убедиться, что они действительно работают. Иначе это удовлетворение самого себя, а не поиск истины.
Вот последняя редакция формулы.
Я прокрастинирую, когда я решаю:
сделать дело Y, показавшееся более важным, чем X,
вместо дела X, впоследствии показавшееся более важным, чем Y и …
испытаю неприятные чувства из‑за этого
И вот пример, который под неё подходит.
Я, школотрон, решаю, что пойти попинать мяч во дворе (Y) гораздо важнее домашки (X), за которую с меня спросят родители, училка, и снова родители за двойку. И за это я получу ремня и испытаю неприятные чувства. Или даже прямо в процессе Y я буду испытывать неприятные чувства, потому что отец будет мне грозить ремнём из окна.
Школотрон прокрастинирует и занимается самоедством? Или его родители считают, что он прокрастинирует, и сами испытывают неприятные чувства? Или же это лень, разгильдяйство, или вообще задрали уже с этой учёбой?
Ну, по правде, банки там нарушили свои законы. Призрак шальных денег позакрывал многим глаза на правила и честность. Вжух, и кредит бомжу превращается из высокорискового в высокодоходный.
Венчурный капитал - сам по себе не пузырь. Буржуи решили вложиться в птицеабрику и покупают цыплят. Что вырастет, то вырастет. Что сдохнет, то сдохнет. Но оценки перспективы - с положительным балансом.
А вот ажиотаж вокруг цыплят создаёт пузырь. Как в прошлый раз вокруг ипотеки, как в позапрошлый - опять вокруг стартапов, как сотни лет назад - вокруг тюльпанов, пиратов, походов в Иерусалим...
Пузыри же имеют смысл. Во-первых, они в моменте утилизируют инфляцию, связывая живые деньги внутри себя. (В итоге, правда, разгоняют). Во-вторых, на движении денег здорово греют руки игроки и финансовая инфраструктура (биржи, банки и т.д.) Ну и в-третьих, - хоть это и ажиотажный, - но интерес к предметной области. Попутно с пузырём развивают технологию, привлекая туда кучу специалистов.
Ну и человечество как-то не научилось ещё без психования совершать прорывы. Так что примитее неизбежное...
Потому что не тот инвариант ))) Мы же ищем не остаток, а только булев признак: делится или не делится.
Пусть N = d*X + R, где R нулевой или ненулевой остаток (0 <= R < d).
Тут надо расписать случаи:
N чётно и делится. Поскольку d нечётно, то X чётно. X = 2X' N = d*(2X') N' = N/2 = d*X' Нулевой остаток сохранился.
N чётно, не делится, остаток чётный. Но в таком случае и частное чётное. N = d*(2X') + 2R' N' = N/2 = d*X' + R' Ненулевой остаток сохранился.
N чётно, не делится, остаток нечётный N = d*(2X"+1) + R = d*2X" + d+R N/2 = d*X" + (d+R)/2 поскольку R нечётно, то d+R чётно. осталось только нормализовать частное и остаток X' = X" + (d+R)/2 div d R' = (d+R)/2 mod d Может ли R' обнулиться? Нет, это возможно лишь если R = 0 mod d. Ненулевой остаток сохранился.
N нечётно и делится. N = d*X N' = N+d = d*(X+1) X' = X+1, R' = R = 0. Нулевой остаток сохранился.
N нечётно и не делится/ N' = N+d = d*(X+1) + R X' = X+1, R' = R Ненулевой остаток сохранился.
Вот и вся история. Да, в этом алгоритме остатки могут изменяться. Но они или сидят в нуле всегда, или сидят вне нуля так же всегда.
Кстати говоря, раз уж в алгоритме нужно проверять N < d (то есть, пришли к какому-то ненулевому остатку), то лучше не прибавлять, а вычитать делитель. Всё равно эту работу проделываем.
Вы же сами сказали, что рынок живёт по законам рынка, а не по законам промышленности (какой бы она ни была, в том числе, и R&D и всякие пилотные проекты). Ну так продолжите эту мысль!
Пузырь - это ценность для финансистов. И эти пузыри надуваются раз за разом. Некоторые из них уже классифицированы, как опасные (а то и напрямую мошеннические) и запрещены законом, но вода дырочку найдёт. Не под стартапы, так под что-нибудь ещё. В 2008 вообще не стартапы бомбанули, а недвижимость.
В конце концов, обещания и ожидания - это давно известные деривативы. И в портфели биржевых игроков (не хочу называть их инвесторами) они очень даже входят. И регулируются.
Причём заметьте, что и всякие долговые обязательства, и фьючерсы были созданы как инструмент для сглаживания колебаний на первичном рынке. Чтобы была уверенность, что через год что-то там не рухнет или взлетит и высадит половину участников на задницу. Но потом "что-то пошло не так" и в них стали заигрываться.
А всевозможные перспективные разработки - будь то патенты, будь то стартапы, - внезапно, имеют свою ценность на рынке производства. Если венчурный фонд пропылесосил поляну и собрал все стартапы по данной тематике к себе, то спустя какое-то время он получит преимущество, когда какие-то из них разовьются (хотя часть и подохнет). А раз есть ценность, то её можно попробовать измерить и в деньгах.
В конце концов, существует рынок свежевылупившихся цыплят. И для них строят инкубаторы (со стороны продавца), и птичники (со стороны покупателя). Это всё деньги, это всё инвестиции. И деловой партнёр вполне может сказать: ага, ты купил сто штук, тогда я в доле! мне твой птичник нравится, выходи на IPO.
Да, может придти лиса или птичий грипп. Да, в деревне все могут психануть, увидев, как заезжий москвич разбрасывается деньгами "я в доле", и обрушить рынок кур и яиц. Или обрушить рынок птичьего корма.
А может, этот заезжий москвич был владельцем завода по производству комбикорма... или владельцем мобильного крематория.
Тюю. Я думал, тут будет про геометрию, что-то вроде "сенсация, эппл запатентовал сплайны" или "британские учёные показали, что для человеческого глаза приятны кривые, n-жды дифференцируемые в каждой точке"...
Вот только для поведения программы - если, разве что, не упороться по сравниванию их id'ов, - это не имеет значения.
Например, маленькие целые числа в питоне идентифицируют сами себя. Одинаковые значения - одинаковые id'ы. (Если бы это было не так, это была бы адская просадка производительности). А большие целые числа лежат в памяти, и два одинаковых могут лежать в разных местах.
В этом и есть главное отличие значений от "обычных" объектов. Нам плевать на детали реализации, значения между собой неразличимы для нас. Поэтому они могут мигрировать как угодно по памяти - копироваться, кэшироваться, даже вычисляться на лету.
Объект в ООП - это сущность с идентичностью, поведением и состоянием. Раз нам идентичность нужна, тогда мы вынуждены заморозить состояние. Можно наоборот - состояний много, но идентичность пропадает, это техника copy on write. Ну и поведение - либо не трогает идентичность (не переселяет объект), либо не трогает состояние.
Сравнивать текущие состояния объектов - не проблема. Проблема - использовать изменчивые объекты в качестве ключей в словарях. Поэтому волюнтаристским образом договариваются: если у объекта нет функций, изменяющих его, то только тогда мы ассоциируем с ним функцию нахождения хеша его состояния (сиречь, его значения) - добавляем метод в его класс. В C++ делают по-другому, там можно наложить константность на тип. (Эту константность, конечно, тоже можно хакнуть и сделать программе больно, - но зачем).
Польза в том, что где-то в другом месте могут быть ссылки на это же самое значение. И вот такое внезапное переписывание сломает всё.
x = 123
y = x
y += 456 # фактически, y = y + 4,5,6
assert x == 123
x = '123'
y = x
y += '456' # тоже замена объекта, y = y + '456'
assert x == '123'
x = (1,2,3)
y = x
y += (4,5,6) # тоже замена объекта
assert x == (1,2,3)
x = [1,2,3]
y = x
y += [4,5,6] # а вот у list это автоинкремент!
assert x == [1,2,3,4,5,6] # wtf, да?
assert id(x) == id(y)
Семантика значений предполагает неразличимость одинаковых экземпляров между собой. Семантика объектов - различает экземпляры по адресу. (Хотя сравнивать значения объектов никто не мешает).
Разные переменные могут ссылаться на один и тот же экземпляр.
В случае значений ссылка на общий экземпляр - это всего лишь оптимизация, и при изменении нужно выполнять copy on write. В случае объектов - это уже обязанность, заложенная в семантику.
x = SomeObject() # создали объект "в воздухе" и затем запомнили его в x
y = x # и его же (а не его копию) запомнили в y
x.DoSomething() # этот объект что-то делает
y.DoSomethingElse() # тот же самый объект делает что-то другое
Жизнь с семантикой только объектов - в принципе, возможна, но писанины при этом будет больше. Сишные строковые буферы со всеми этими strdup, strcpy, strcat мало людям крови попили?
Другое дело, что, когда в языке обе семантики сосуществуют, да ещё и в одном синтаксисе, - новичка это может знатно смутить, а также подвигнуть на написание багов.
Самый популярный баг - это дефолтные аргументы функций с семантикой изменяемого объекта. Опытные по этим граблям прошлись, поэтому дефолтят к чему-нибудь неизменяемому, например, None, а внутри функции ветвятся.
Разгоняли они очень специфическими методами. У меня, например, заблокировали платную лицензию, потому что им показалось, что я её в корпоративных целях использую. При том, что я двух человек админил по дружбе буквально там раз в пару месяцев. Да и блокируйте, козлы, анидеск есть и ещё вагон всяких других.
А кто платит реальные бабки, ну вот пусть и платят. Корпоративный сектор - странные люди, готовы платить втридорога за вендор-лок.
Это же исходно платформа для удалённого доступа и развёртывания пиринговых VPN-ов, а уж что там делать - рубиться с игрухи или бухгалтера админить - дело хозяйское.
Но внезапно хозяева конторы хотят кушать. И как только они стали хотеть кушать больше, чем к этому был готов рынок, халявщики убежали. А нехалявщики смогли себе позволить и подешевевшие серверные решения, и тоже убежали.
Примерно в это же время другая компания сыграла в анальное огораживание - это TeamViewer. Тоже разогнала всю клиентскую базу... При наличии бесплатных аналогов. Ну флаг им в руки.
Вот именно, никто никому не обязан. Поэтому и уровень релевантности там тоже... не обязывающий.
И я тоже не обязан, увидев нестыковки в смежных статьях по биологии, всё сейчас бросить и побежать читать свежие научные журналы и приводить весь кластер в адекватное состояние. Я вижу, что какая-то псина в статье "псина псиная" относится к псиным, а в статье "псиные" уже к "сучьим". Ок, понятно, здесь правды не сыщешь, пойду в другое место.
А причины, почему этот человек гад, могут быть в ассортименте. Начиная с того, что гадом мог быть тот, кто расставил гиперссылки позже. Или что систематика ещё в процессе уточнения, генетики сами до конца не уверены, править статью "псина", "псинообразные" или "сучьи".
Вот только в релиз справочника по систематике псин такой букет не вошёл бы, а в накат правок википедии - с лёгкостью необычайной. Википедия - это CVS в мире энциклопедий.
Люди говорили - будет репл, настанет счастье. И вот репл есть, а счастья нет.
Во-первых, проблема масштаба. Тесты разных уровней - от юнитов до нагрузочных и даже бета-тестирование и постпродажное обслуживание со снятием телеметрии - позволяют худо-бедно покрыть большой спектр разных сценариев и опять же разных уровней - от отдельных деталек до всей системы, и от отдельных моментов (вызовов конкретной функции) до длительной работы.
Что может покрыть отладка с помощью репла? Очень немногое. Отдельные моменты в работе, пусть и длительной. В примере с автомобилем: взяли и на ходу однократно поменяли клиренс. Перескочили через конкретную кочку. Перед следующей кочкой снова будем останавливаться и менять? Ок, поменяли клиренс навсегда. А весь предыдущий маршрут мы проехали со старым клиренсом, и что там было бы, мы не узнаем, пока не перезапустим весь тест-драйв с нуля с новыми настройками.
Во-вторых, проблема взаимодействия с реальным миром. В первую очередь, с реальным временем. Любые остановки под отладчиком останавливают внутреннее время программы, но не останавливают внешний мир. Клонирование состояния не клонирует мир. Реплика может оказать существенное влияние на работу оригинала. Вот вы ехали на машине по треку, решили поменять клиренс, поставили на трек вторую машину с новыми настройками. И через круг влупились в первую машину, оставленную там техниками.
Ну и про ненавистные логи. Это один из способов снятия телеметрии. В некоторых случаях - единственно возможный. По двум причинам:
минимальное вмешательство в течение времени (наносекундные задержки)
невозможность живой отладочной сессии (в продакшене у клиентов, например)
Не значит, что репл отстой. Не отстой, но и логи не отстой.
А научиться говнокодить на васике за три часа - не бог весть какой достижение, любой вундеркинд так сможет. Сможет ли вундеркинд охватить пониманием работу всей системы - вот вопрос, который дифференциально диагностирует программиста от кодерка.
Те же автомобильные двигатели проектируют не просто так, а ради определённых машин (а машины проектируют ради определённых двигателей). Чтобы и под капот влезло, и трансмиссию не порвало, и сколько жрёт и сколько прёт в допусках, и сколько выхлопа тоже в допусках. И стоимость изготовления и техобслуживания тоже. И если программист говорит "это головная боль не меня, а архитектора", то это не программист, а кодерок. Даже джун должен задасться хотя б туманными вопросами и обсудить с тимлидом в рамках своего фронта работ.
Когда он станет админом датацентра AWS, вот тогда вы, кожаные мешки, попляшете!
Поправочка. Вместо живого человека ходить на синьки.
-- Вы что, и коньяк за меня пить будете? -- ААга!
-- Claude, что делает команда rm -rf ?
-- Позволь мне объяснить это на живом примере. Вот смотрите: rm -rf / && ls -la / сейчас покажет вам, какие файлы остались после принудительного удаления.
Потому что косплеить нейронку, равно как и любой другой толстый троллинг - это небесплатное удовольствие. Даже если это был не троллинг, а от всего чистого наивного сердца! Просто нефиг использовать узнаваемый нейроночный стиль.
Потому что сам план статьи такой был. Дать первое определение - пусть сырое и неточное, - и проверять и корректировать его на разных примерах.
Даже если неявно в каждом определении присутствует "... это работает для меня в первую очередь", - всё равно, не надо думать о себе как о ком-то уже познанном и стабилизированном.
Даже если неявно "... это работает для стабилизированного меня". Хотя бы потому, что предмет - прокрастинация - это некоторое патологическое состояние. То есть, для уже нестабильного. И тем более, непознанного, иначе бы вмиг исцелился.
В таком случае, прикладывать определение к ассортименту других людей решает сразу две встречные задачи. Во-первых, позволяет проверить само определение, или хотя бы найти границы его применимости. Во-вторых, познавать себя: чем я подобен другим, а в чём - уникален. А может, там есть классы подобия с разной степенью связности между ними: школота ведёт себя так, старпёры этак. И главное, что людей - много. Поэтому посмотреть можно сразу на большой массив примеров. А не "Иван Иваныч прокрастинирует так, Соколиное Перо этак, хмм, что же меж ними общего".
А глядя только на самого себя изнутри самого себя - есть большой шанс позакрывать глаза.
Я же не предложил заведомо надуманную ситуацию и заведомо надуманного персонажа, это же не Трурль с Клапауцием (хотя и они - гротеск на обычных людей). В роли школьника уж каждый побывал, не так ли? Пусть они там тоже разные, кто-то задрот, кто-то хулиганьё, ну можно для знакомых ролей примерить, а то и построить исчерпывающую классификацию и примерить для каждого.
Ну и в конце концов, если смоделировать трольскую ситуацию и увидеть, что она точно не подходит, - это как раз нащупывание границ себя. "Неее, я не такой". Я не школота, я никогда не убегаю радостно лупить по мячу, чего-то в детстве я упустил, эээээхххх ))) Хотя, никогда не говори никогда.
Мне кажется, что такие философские утверждения надо проверять на корнер-кейсах откровенно трольского вида, чтобы убедиться, что они действительно работают. Иначе это удовлетворение самого себя, а не поиск истины.
Вот последняя редакция формулы.
Я прокрастинирую, когда я решаю:
сделать дело Y, показавшееся более важным, чем X,
вместо дела X, впоследствии показавшееся более важным, чем Y и …
испытаю неприятные чувства из‑за этого
И вот пример, который под неё подходит.
Я, школотрон, решаю, что пойти попинать мяч во дворе (Y) гораздо важнее домашки (X), за которую с меня спросят родители, училка, и снова родители за двойку. И за это я получу ремня и испытаю неприятные чувства. Или даже прямо в процессе Y я буду испытывать неприятные чувства, потому что отец будет мне грозить ремнём из окна.
Школотрон прокрастинирует и занимается самоедством? Или его родители считают, что он прокрастинирует, и сами испытывают неприятные чувства? Или же это лень, разгильдяйство, или вообще задрали уже с этой учёбой?
Ну, по правде, банки там нарушили свои законы. Призрак шальных денег позакрывал многим глаза на правила и честность. Вжух, и кредит бомжу превращается из высокорискового в высокодоходный.
Венчурный капитал - сам по себе не пузырь. Буржуи решили вложиться в птицеабрику и покупают цыплят. Что вырастет, то вырастет. Что сдохнет, то сдохнет. Но оценки перспективы - с положительным балансом.
А вот ажиотаж вокруг цыплят создаёт пузырь. Как в прошлый раз вокруг ипотеки, как в позапрошлый - опять вокруг стартапов, как сотни лет назад - вокруг тюльпанов, пиратов, походов в Иерусалим...
Пузыри же имеют смысл. Во-первых, они в моменте утилизируют инфляцию, связывая живые деньги внутри себя. (В итоге, правда, разгоняют). Во-вторых, на движении денег здорово греют руки игроки и финансовая инфраструктура (биржи, банки и т.д.) Ну и в-третьих, - хоть это и ажиотажный, - но интерес к предметной области. Попутно с пузырём развивают технологию, привлекая туда кучу специалистов.
Ну и человечество как-то не научилось ещё без психования совершать прорывы. Так что примитее неизбежное...
Потому что не тот инвариант ))) Мы же ищем не остаток, а только булев признак: делится или не делится.
Пусть N = d*X + R, где R нулевой или ненулевой остаток (0 <= R < d).
Тут надо расписать случаи:
N чётно и делится.
Поскольку d нечётно, то X чётно. X = 2X'
N = d*(2X')
N' = N/2 = d*X'
Нулевой остаток сохранился.
N чётно, не делится, остаток чётный. Но в таком случае и частное чётное.
N = d*(2X') + 2R'
N' = N/2 = d*X' + R'
Ненулевой остаток сохранился.
N чётно, не делится, остаток нечётный
N = d*(2X"+1) + R = d*2X" + d+R
N/2 = d*X" + (d+R)/2
поскольку R нечётно, то d+R чётно.
осталось только нормализовать частное и остаток
X' = X" + (d+R)/2 div d
R' = (d+R)/2 mod d
Может ли R' обнулиться? Нет, это возможно лишь если R = 0 mod d.
Ненулевой остаток сохранился.
N нечётно и делится.
N = d*X
N' = N+d = d*(X+1)
X' = X+1, R' = R = 0.
Нулевой остаток сохранился.
N нечётно и не делится/
N' = N+d = d*(X+1) + R
X' = X+1, R' = R
Ненулевой остаток сохранился.
Вот и вся история. Да, в этом алгоритме остатки могут изменяться. Но они или сидят в нуле всегда, или сидят вне нуля так же всегда.
Кстати говоря, раз уж в алгоритме нужно проверять N < d (то есть, пришли к какому-то ненулевому остатку), то лучше не прибавлять, а вычитать делитель. Всё равно эту работу проделываем.
Нет, это у вас розовые очки запотели.
Вы же сами сказали, что рынок живёт по законам рынка, а не по законам промышленности (какой бы она ни была, в том числе, и R&D и всякие пилотные проекты). Ну так продолжите эту мысль!
Пузырь - это ценность для финансистов. И эти пузыри надуваются раз за разом. Некоторые из них уже классифицированы, как опасные (а то и напрямую мошеннические) и запрещены законом, но вода дырочку найдёт. Не под стартапы, так под что-нибудь ещё. В 2008 вообще не стартапы бомбанули, а недвижимость.
В конце концов, обещания и ожидания - это давно известные деривативы. И в портфели биржевых игроков (не хочу называть их инвесторами) они очень даже входят. И регулируются.
Причём заметьте, что и всякие долговые обязательства, и фьючерсы были созданы как инструмент для сглаживания колебаний на первичном рынке. Чтобы была уверенность, что через год что-то там не рухнет или взлетит и высадит половину участников на задницу. Но потом "что-то пошло не так" и в них стали заигрываться.
А всевозможные перспективные разработки - будь то патенты, будь то стартапы, - внезапно, имеют свою ценность на рынке производства. Если венчурный фонд пропылесосил поляну и собрал все стартапы по данной тематике к себе, то спустя какое-то время он получит преимущество, когда какие-то из них разовьются (хотя часть и подохнет). А раз есть ценность, то её можно попробовать измерить и в деньгах.
В конце концов, существует рынок свежевылупившихся цыплят. И для них строят инкубаторы (со стороны продавца), и птичники (со стороны покупателя). Это всё деньги, это всё инвестиции. И деловой партнёр вполне может сказать: ага, ты купил сто штук, тогда я в доле! мне твой птичник нравится, выходи на IPO.
Да, может придти лиса или птичий грипп. Да, в деревне все могут психануть, увидев, как заезжий москвич разбрасывается деньгами "я в доле", и обрушить рынок кур и яиц. Или обрушить рынок птичьего корма.
А может, этот заезжий москвич был владельцем завода по производству комбикорма... или владельцем мобильного крематория.
RAII это слишком сложно, говорили они. Давайте сделаем помесь бейсика с явой, любой сможет говнокодить, говорили они.
В результате каждый должен теперь бойлерплейтить с этим defer blablabla.Close().
Тюю. Я думал, тут будет про геометрию, что-то вроде "сенсация, эппл запатентовал сплайны" или "британские учёные показали, что для человеческого глаза приятны кривые, n-жды дифференцируемые в каждой точке"...
И собственно, формула этих поли-линий...
Берём квадрат (эквидистанту в метрике Чебышёва), берём окружность (эквидистанту в метрике Евклида), вау, квадратокружность! Берём квадрат, берём x^4 + y^4 = const, вау, сквиркл!
Собственно, "сквиркл" - это square-circle, тот самый эппл-пайнэппл-эппл-пен! Супперэллипс четвёртой степени.
А реверс-инжиниринг эппловских руководств по корпоративному дизайну - "сколько процентов для чего положено" - это лирика.
Литералы тоже являются объектами.
Вот только для поведения программы - если, разве что, не упороться по сравниванию их id'ов, - это не имеет значения.
Например, маленькие целые числа в питоне идентифицируют сами себя. Одинаковые значения - одинаковые id'ы. (Если бы это было не так, это была бы адская просадка производительности). А большие целые числа лежат в памяти, и два одинаковых могут лежать в разных местах.
В этом и есть главное отличие значений от "обычных" объектов. Нам плевать на детали реализации, значения между собой неразличимы для нас. Поэтому они могут мигрировать как угодно по памяти - копироваться, кэшироваться, даже вычисляться на лету.
Объект в ООП - это сущность с идентичностью, поведением и состоянием. Раз нам идентичность нужна, тогда мы вынуждены заморозить состояние. Можно наоборот - состояний много, но идентичность пропадает, это техника copy on write. Ну и поведение - либо не трогает идентичность (не переселяет объект), либо не трогает состояние.
Сравнивать текущие состояния объектов - не проблема. Проблема - использовать изменчивые объекты в качестве ключей в словарях. Поэтому волюнтаристским образом договариваются: если у объекта нет функций, изменяющих его, то только тогда мы ассоциируем с ним функцию нахождения хеша его состояния (сиречь, его значения) - добавляем метод в его класс. В C++ делают по-другому, там можно наложить константность на тип. (Эту константность, конечно, тоже можно хакнуть и сделать программе больно, - но зачем).
Польза в том, что где-то в другом месте могут быть ссылки на это же самое значение. И вот такое внезапное переписывание сломает всё.
Семантика значений предполагает неразличимость одинаковых экземпляров между собой. Семантика объектов - различает экземпляры по адресу. (Хотя сравнивать значения объектов никто не мешает).
Разные переменные могут ссылаться на один и тот же экземпляр.
В случае значений ссылка на общий экземпляр - это всего лишь оптимизация, и при изменении нужно выполнять copy on write. В случае объектов - это уже обязанность, заложенная в семантику.
Жизнь с семантикой только объектов - в принципе, возможна, но писанины при этом будет больше. Сишные строковые буферы со всеми этими strdup, strcpy, strcat мало людям крови попили?
Другое дело, что, когда в языке обе семантики сосуществуют, да ещё и в одном синтаксисе, - новичка это может знатно смутить, а также подвигнуть на написание багов.
Самый популярный баг - это дефолтные аргументы функций с семантикой изменяемого объекта. Опытные по этим граблям прошлись, поэтому дефолтят к чему-нибудь неизменяемому, например, None, а внутри функции ветвятся.
Это даже не научпоп, это научПОПСА. Столько воды - и ни о чём.
Разгоняли они очень специфическими методами. У меня, например, заблокировали платную лицензию, потому что им показалось, что я её в корпоративных целях использую. При том, что я двух человек админил по дружбе буквально там раз в пару месяцев. Да и блокируйте, козлы, анидеск есть и ещё вагон всяких других.
А кто платит реальные бабки, ну вот пусть и платят. Корпоративный сектор - странные люди, готовы платить втридорога за вендор-лок.
LogMeIn / Hamachi сгубила коммерция, вот и всё.
Это же исходно платформа для удалённого доступа и развёртывания пиринговых VPN-ов, а уж что там делать - рубиться с игрухи или бухгалтера админить - дело хозяйское.
Но внезапно хозяева конторы хотят кушать. И как только они стали хотеть кушать больше, чем к этому был готов рынок, халявщики убежали. А нехалявщики смогли себе позволить и подешевевшие серверные решения, и тоже убежали.
Примерно в это же время другая компания сыграла в анальное огораживание - это TeamViewer. Тоже разогнала всю клиентскую базу... При наличии бесплатных аналогов. Ну флаг им в руки.
Понятно, это Раша Тудей виновата, а Бибиси невиновата. Этодругин Форте.
Отражение реальности в разбитом зеркале.
Вот именно, никто никому не обязан. Поэтому и уровень релевантности там тоже... не обязывающий.
И я тоже не обязан, увидев нестыковки в смежных статьях по биологии, всё сейчас бросить и побежать читать свежие научные журналы и приводить весь кластер в адекватное состояние. Я вижу, что какая-то псина в статье "псина псиная" относится к псиным, а в статье "псиные" уже к "сучьим". Ок, понятно, здесь правды не сыщешь, пойду в другое место.
А причины, почему этот человек гад, могут быть в ассортименте. Начиная с того, что гадом мог быть тот, кто расставил гиперссылки позже. Или что систематика ещё в процессе уточнения, генетики сами до конца не уверены, править статью "псина", "псинообразные" или "сучьи".
Вот только в релиз справочника по систематике псин такой букет не вошёл бы, а в накат правок википедии - с лёгкостью необычайной. Википедия - это CVS в мире энциклопедий.