Предположим, затея взлетела, и писать кроссплатформенные штуки на этой штуке оказалось фантастически удобно. Сваяли большую красивую штуку, и тут это гадское КриптоПро. Делаем по-быстрому шлюз на CryptoAPI, и для Виндовса кнопка подписания электронной подписью появляется. А на других платформах она, допустим, и не нужна.
В общем объёме кодовой базы проекта этот шлюз порядка одного процента.
А нативно на плюсах, допустим, этот проект тоже можно было бы делать, но за на порядок больший бюджет, которого у Заказчика точно нет.
Да уж, если «какой-то браузер» ещё не очень пугает (м.б. зря), то «какая-то ОС» — совсем беда. По-хорошему, нужно сделать единообразную прослойку ко всем функциям каждой ОС.
Так себе и представил ситуацию: ваяем на Нейтралино систему, вгрохали десяток человеколет, остаётся маленький штрих, без которого Заказчик не принимает — чтобы эта штука задействовала КриптоПро через виндовозный CryptoAPI. Плюс позарез оказалось нужно взаимодействовать с железячкой, для которой есть DLLка.
Впрочем, если сделают возможность приделывать к серверу написанные на плюсах плагины, то можно будет и выкрутиться.
И это никак не отменяет возможности того что у них просто страдает корректный учет самоубийц по каким-то причинам.
Но не в четыре же раза!!!
Давайте посмотрим на жизнь обычного жителя развивающейся, но всё никак не разовьющейся страны. У него жена (у неё — муж), дети, родственники, всем что-то надо, вечно чего-то не хватает. Не раскорячишься, не заработаешь — будут проблемы. Да и так куча проблем. Кран потёк — никто кроме тебя не починит. Или договаривайся с соседом. Ребёнка никто ничему толком не научит кроме как герычем ширяться, школа — одни слёзы. Грабят — отбиваешься сам. Порвались штаны — зашиваешь сам.
В развитых странах немножко по-другому. Всё делегировано профессионалам. Добыча еды — агрохолдингам, её приготовление — ресторанам и пищепрому, здоровье — врачам, безопасность — полиции, воспитание детей — системе образования, изготовление одежды и утвари — китайцам, починка крана — лицензированным сантехникам, и т.д. Функция человека как самостоятельной единицы — только платить деньги. Ну ладно, ещё ленту лайкать. Даже если нет денег, тоже не катастрофа. Тебя приютит собес, и будешь прилично существовать на всём готовеньком. Тебе даже не нужно думать над тем, какую киношку посмотреть, потому что специальные искусственно-интеллектуальные сервисы это тоже решают за тебя. В такой системе банально незачем жить, потому что в погоне за эффективностью всё то, что человек мог назвать своими задачами, он уже успешно делегировал.
Вот и остаётся единственное дело, которое пока что некому делегировать — повеситься.
Вот не надо настолько обижать Мексику. Она выглядит немножко отсталой только по контрасту с США. Это совсем ни разу не дикие необжитые территории, по которым бродят голодные банды оборванцев.
Всё дело в той противной штуке, которая известна как «экзистенциальный кризис». Если человеку незачем жить, то он жёстко депрессует. Неизбежно. Жить «чтобы кушать» или «чтобы спать» или «чтобы покупать ништяки» человеческие существа не приспособлены. Кушать чтобы жить — нормально, но наоборот оно не работает. «Жить чтобы жить» — тоже не проканывает, кто бы что бы ни говорил. «Потому что умирать страшно» — работает только до некоторой глубины кризиса, а дальше перестаёт. Нам, нищебродам из развитого социализма, это всё кажется удивительным, но это чудовищная по масштабам и последствиям проблема зрелых обществ потребления, и системного решения этой проблемы нет ни у кого.
А вот молодёжь 1985-1995 про это не ноет. Для них ситуация «кроме денег никаких ориентиров» — единственная известная норма.
Впрочем, обобщать нужно осторожно. Как я чуть выше написал, разброс индивидуальных характеристик в любом случае перекрывает любые среднебольничные групповые отличия.
Но, очевидно, все еще есть много задач, где скорость работы программ перевешивает этот недостаток.
Совершенно верно. Поэтому C++ тоже любим. Просто для каждого типа задач свой инструмент. Делать быстрый расчёт на плюсах — в самый раз, инструментальщина — тоже, а юзать их для бизнес-логики, особенно в какой-нибудь динамичной предметной области, где семь пятниц на неделе — чистое безумие. Описанное в статье мне показалось попыткой затянуть в стандарт С++ то, что поможет решать те задачи, для которых С++ вообще напрочь не предназначен.
А вот эта конструкция что делает? Спрашиваю потому что сходу не разобрал, а гуглить по скобкам бесполезно )…
Уж не ленива ли она? Тогда что мы меряли?
Нет, не ленивая. Честно достаёт n элементов из генератора и складывает в массив. Полный аналог «Triples().Take(n).ToList();».
Механика достаточно простая. Функция zip создаёт итерируемый объект, сцепляющий две последовательности. Здесь мы сцепляем range(n), тупо последовательность n чисел с нескончаемой последовательностью triples(). Когда одна из сцепливаемых последовательностей заканчивается, zip финиширует. То, что выдаёт range(n), нам не интересно, и мы складываем это в мусорную переменную "_".
То же самое сделал бы такой код:
first_n = []
gen = triples()
for _ in range(n):
first_n.append(next(gen))
Или такой:
import itertools
first_n = [triple for triple in itertools.islice(triples(), 0, 10)]
Теоретически да, но есть нюансы. Скорость работы программы определяется не только скоростью отработки элементарных операций. Если разрабу не приходится воевать с инструментом, если среда к нему дружелюбна, то у него остаются силы поразмыслить над алгоритмом, над красотой реализации, над гибкостью решения и прочими такими как-бы не очень важными вещами. Глядишь, и придумается у него, как O(N^3) превратить в какое-нибудь O(N^2), и тогда его питонский код сделает C++ного как щенка.
Например, взглянув на приведённую выше функцию, можно заметить, что каждый раз делать умножения z*z и x*x не нужно, и поэтому:
>>> def triples():
z = 0
while True:
z += 1
z2 = z*z
for x in range(1, z):
x2 = x*x
for y in range(x, z):
if x2 + y*y == z2:
yield x, y, z
В результате вместо «100 triples in 0.1836 seconds» получаем «100 triples in 0.0974 seconds». То есть уже медленнее не в 180 раз, а всего в 100. На такой простой фигне. Если присмотреться, можно заметить, что третий вложенный цикл лишний. Игрек можно вычислять сразу, вот так:
>>> def triples():
z = 0
while True:
z += 1
z2 = z*z
for x in range(1, z):
y2 = z2 - x*x
y = int(round(y2**0.5))
if y >= x and y*y == y2:
yield x, y, z
В результате мало того, что ещё в два раза разогнались («100 triples in 0.0498 seconds»), но и своё О() улучшили. На 10000 этот код у меня показывает такое: «10000 triples in 32.6228 seconds». Если сравнить с оригинальным алгоритмом на C++, наверняка Питон будет быстрее. Здесь можно возразить, что никто нам не мешает в C++ провернуть ту же каверзу. Но не всё так просто. В реальной жизни в реальных системах сишный код являет собой мегабайты жуткой лапши из классов, библиотек, шаблонов, выделений/освобождений памяти и прочего ужаса (сам этим занимался несколько лет кряду). Здесь не до всяких сопливых О(), здесь лишь бы не падало, и на том спасибо.
Говоря про голосование ногами, я в данном случае имею в виду совсем не «поравалить». Я про то, что у всех перед глазами всю дорогу, но никто не замечает. Сами собой разумеющиеся вещи. То, как «принято» делать и думать.
Про «астрологию» соглашусь охотно. Разброс индивидуальных характеристик в любом случае перекрывает любые среднебольничные групповые отличия.
Но, тем не менее, тема чрезвычайно интересная с точки зрения праздно побазарить.
Игреки приспособятся к чему угодно в неблагоприятных условиях.
А в благоприятных?
В том-то и засада, что человечество никогда не жило так сытно и благополучно, как сейчас. Человек, выращенный с установкой на оптимизацию всего, напрочь теряется в ситуации, когда ничего не надо оптимизировать. Он начинает оптимизировать то, что не надо оптимизировать, и в результате выгорает.
А вот если нам завершат хорошую жизнь и устроят войну, голод, тоталитаризм и прочий трэш, то, смею предположить, игреки в новой среде почувствуют себя как рыба в воде.
Как они могут унаследовать власть через 10 лет, если еще даже мое поколение ни чего не унаследовало
Если говорить о власти в привычном ключе, то есть о политической и экономической, то она, конечно, всегда принадлежит старикам, из которых сыплется песок. Сейчас даже у нас, иксов, её не очень есть. Я немножко о другом. Есть такое понятие, как голосование ногами. Как щёки там наверху кто ни надувай и какие гуманитарные технологии ни задействуй, побеждает тот вариант, за который наиболее активная (т.е. 25-40 лет) часть населения голосует ногами. Когда общественный запрос естественным образом изменится, это и будет обретением поколением Z власти над реальностью.
Что лично мне бросается в глаза — это склонность игреков к конформизму. Если правила прописаны «и нашим и вашим» (обычно так оно и есть), то они так и действуют. И даже думают.
Если говорить про сейчас, то у нас, иксов, более выигрышная позиция банально потому, что прошло достаточно времени, чтобы мы смогли адаптироваться. Хотя, конечно, кто-то смог, а кто-то и не смог. Как оно всегда и бывает.
В том-то и дело, что нет. По-биороботски себя склонны вести как раз миллениалы. Именно им характерна процессная ориентированность и привычка подчиняться внешним стимулам.
Конечно субъективные. Пою о том, что вижу, а вижу только то, что вижу. Наблюдаю ситуацию на своих детях и их друзьях.
Впрочем, объективно есть некоторые явления, которые заставляют задуматься. Например, для многих было сюрпризом, когда на протестные акции вдруг повалили толпы школьников. До этого, например, в 2011-2012-м такого не наблюдалось совсем. Для школьников-миллениалов такой вид активности был немыслим, а для зетов — в самый раз.
В общем объёме кодовой базы проекта этот шлюз порядка одного процента.
А нативно на плюсах, допустим, этот проект тоже можно было бы делать, но за на порядок больший бюджет, которого у Заказчика точно нет.
Так себе и представил ситуацию: ваяем на Нейтралино систему, вгрохали десяток человеколет, остаётся маленький штрих, без которого Заказчик не принимает — чтобы эта штука задействовала КриптоПро через виндовозный CryptoAPI. Плюс позарез оказалось нужно взаимодействовать с железячкой, для которой есть DLLка.
Впрочем, если сделают возможность приделывать к серверу написанные на плюсах плагины, то можно будет и выкрутиться.
Давайте посмотрим на жизнь обычного жителя развивающейся, но всё никак не разовьющейся страны. У него жена (у неё — муж), дети, родственники, всем что-то надо, вечно чего-то не хватает. Не раскорячишься, не заработаешь — будут проблемы. Да и так куча проблем. Кран потёк — никто кроме тебя не починит. Или договаривайся с соседом. Ребёнка никто ничему толком не научит кроме как герычем ширяться, школа — одни слёзы. Грабят — отбиваешься сам. Порвались штаны — зашиваешь сам.
В развитых странах немножко по-другому. Всё делегировано профессионалам. Добыча еды — агрохолдингам, её приготовление — ресторанам и пищепрому, здоровье — врачам, безопасность — полиции, воспитание детей — системе образования, изготовление одежды и утвари — китайцам, починка крана — лицензированным сантехникам, и т.д. Функция человека как самостоятельной единицы — только платить деньги. Ну ладно, ещё ленту лайкать. Даже если нет денег, тоже не катастрофа. Тебя приютит собес, и будешь прилично существовать на всём готовеньком. Тебе даже не нужно думать над тем, какую киношку посмотреть, потому что специальные искусственно-интеллектуальные сервисы это тоже решают за тебя. В такой системе банально незачем жить, потому что в погоне за эффективностью всё то, что человек мог назвать своими задачами, он уже успешно делегировал.
Вот и остаётся единственное дело, которое пока что некому делегировать — повеситься.
Всё дело в той противной штуке, которая известна как «экзистенциальный кризис». Если человеку незачем жить, то он жёстко депрессует. Неизбежно. Жить «чтобы кушать» или «чтобы спать» или «чтобы покупать ништяки» человеческие существа не приспособлены. Кушать чтобы жить — нормально, но наоборот оно не работает. «Жить чтобы жить» — тоже не проканывает, кто бы что бы ни говорил. «Потому что умирать страшно» — работает только до некоторой глубины кризиса, а дальше перестаёт. Нам, нищебродам из развитого социализма, это всё кажется удивительным, но это чудовищная по масштабам и последствиям проблема зрелых обществ потребления, и системного решения этой проблемы нет ни у кого.
Впрочем, обобщать нужно осторожно. Как я чуть выше написал, разброс индивидуальных характеристик в любом случае перекрывает любые среднебольничные групповые отличия.
Механика достаточно простая. Функция zip создаёт итерируемый объект, сцепляющий две последовательности. Здесь мы сцепляем range(n), тупо последовательность n чисел с нескончаемой последовательностью triples(). Когда одна из сцепливаемых последовательностей заканчивается, zip финиширует. То, что выдаёт range(n), нам не интересно, и мы складываем это в мусорную переменную "_".
То же самое сделал бы такой код:
Или такой:
Например, взглянув на приведённую выше функцию, можно заметить, что каждый раз делать умножения z*z и x*x не нужно, и поэтому:
В результате вместо «100 triples in 0.1836 seconds» получаем «100 triples in 0.0974 seconds». То есть уже медленнее не в 180 раз, а всего в 100. На такой простой фигне. Если присмотреться, можно заметить, что третий вложенный цикл лишний. Игрек можно вычислять сразу, вот так:
В результате мало того, что ещё в два раза разогнались («100 triples in 0.0498 seconds»), но и своё О() улучшили. На 10000 этот код у меня показывает такое: «10000 triples in 32.6228 seconds». Если сравнить с оригинальным алгоритмом на C++, наверняка Питон будет быстрее. Здесь можно возразить, что никто нам не мешает в C++ провернуть ту же каверзу. Но не всё так просто. В реальной жизни в реальных системах сишный код являет собой мегабайты жуткой лапши из классов, библиотек, шаблонов, выделений/освобождений памяти и прочего ужаса (сам этим занимался несколько лет кряду). Здесь не до всяких сопливых О(), здесь лишь бы не падало, и на том спасибо.
Но, тем не менее, тема чрезвычайно интересная с точки зрения праздно побазарить.
В том-то и засада, что человечество никогда не жило так сытно и благополучно, как сейчас. Человек, выращенный с установкой на оптимизацию всего, напрочь теряется в ситуации, когда ничего не надо оптимизировать. Он начинает оптимизировать то, что не надо оптимизировать, и в результате выгорает.
А вот если нам завершат хорошую жизнь и устроят войну, голод, тоталитаризм и прочий трэш, то, смею предположить, игреки в новой среде почувствуют себя как рыба в воде.
Впрочем, объективно есть некоторые явления, которые заставляют задуматься. Например, для многих было сюрпризом, когда на протестные акции вдруг повалили толпы школьников. До этого, например, в 2011-2012-м такого не наблюдалось совсем. Для школьников-миллениалов такой вид активности был немыслим, а для зетов — в самый раз.