Как стать автором
Обновить
2
0
FI_Mihej @Fiery_Ice

Разработчик

Отправить сообщение
Хотя можно ли верить этим сообщениям, вдруг это пишет хакер )

Который их всех съел и сидит один в офисе )

Если админка позволяет писать от имени любого пользователя — то… А зачем? Удалить неугодное сообщение — это еще понятно зачем нужно. Но писать от чьего-то имени? Это больше похоже на возможность локальной кражи личности — в рамках сервиса
Ну вот я посмотрел на тест с наибольшей разницей (172 раза) — на mandelbrot.

Ну и какой практический смысл сравнивать плохо читаемый (практически обфусцированный), заоптимизированный по самое немогу, завязанный на единственный компилятор (G++), единственную платформу (x86-64), использующий предвычесленные значения забитые прямо в код (волшебные массивы), и выдающим максимум за счет ручного использования векторных операций, непортируемый, слабо поддерживаемый и идеологически не особо корректный (см. «Ещё раз о неопределённом поведении или «почему не стоит забивать гвозди бензопилой»») C&C++-код с легко читаемыми, полностью отвечающими идеологии языка, работающими идентично на всех поддерживаемых интерпретатором платформах Python-реализациями?

Кроме того, если посмотреть детальнее — там есть предыдущие версии C&C++-реализаций (которые впоследствии были заменены все менее понятными (все более обфусцированными), все менее портируемыми, все менее поддерживаемыми, но все более быстрыми) — разница между их производительностью и производительностью Python-реализаций гораздо менее драматична: 4 — 7 раз между хорошо читаемым «C++ g++ #3» и представленными Python-реализациями, что гораздо больше соответствует ситуации в реальных проектах (по моим наблюдениям).

В статье не учтена работа GC. Принудительный запуск GC в ключевых местах (если, вдруг, при наблюдении за работой приложения, оказалось что стандартной его работы не хватило) — чистит память и нивелирует описанную проблему.


import gc


gc.collect()


Так что на практике, если не писать для встраиваемых систем с парой десятков мегабайт ОЗУ, — проблема, обычно, не является значимой.


А вот подборка размеров стандартных примитивов в статье, на мой взгляд, — действительно ценна.

И да, полагаться на авось, в IT (не закрашивать данные нормально ибо "и тааак сойдет", или верить что никто не сканирует весь диапазон портов) — очень плохой подход.

Все надо делать с умом, и тчательностью. Особенно закрашивать важную информацию: в нашем случае — IP адрес сервера. Собственно отправил бы в личку айпишник — чтобы понятно было — но такой опции, Хабр мне не предоставляет. Рекомендую сменить картинку по-быстрее, пока кулхацкеры не начали ваш сервер на зуб пробовать.

Скорее всего вы просто использовали, что называется, «метод в лоб». В Пайтоне есть особенности хранения данных, и соответственно для того чтобы обрабатывать данные эффективно, надо это учитывать. Для этого действительно надо погружаться в Пайтон глубже чем «за пару часов почитаю по диагонали описание до того неизвестного мне синтаксиса и напишу скриптик».

Если конкретизировать — подозреваю что у вас вышло так что при выполнении вашего кода происходило огромное количество ненужных аллокаций памяти. К примеру если вы в цикле, после проверки каждого символа каждой строки, использовали что-то вроде
new_line = old_line[1:]
что на каждый символ заново аллоцировало еще один участок под почти всю строку.

Собственно для прочесывания строк и/или массивов байтов — стоит использовать memoryview (https://docs.python.org/3/library/stdtypes.html#memoryview) над нужным вам контейнером. Оно, используя все тот же синтаксис
new_line = old_lint[1:]
— не будет делать новых аллокаций, и является неким аналогом адресной арифметики из C/C++.

Ну и кроме того, в язык встроены другие специальные средства быстрой потоковой обработки данных (в основном взятые из функционального программирования). Они используются вместо циклов и ускоряют обработку несколько раз (бывает что и на порядок). Опять же это требует не самых базовых знаний языка (т.е. надо приложить хоть какие-то усилия и: или книжку почитать, или документацию посмотреть, или же курсы пару-месячные по начальному владению языком пройти).
Кстати! Я погуглил сочетание «Cython OpenMP», и оказалось что Cython таки умеет распараллеливать свои циклы при помощи OpenMP из коробки (судя по официальной документации Cython). При этом тело цикла работает (и должно, по требованиям) с временно-отключенным GIL. Учитывая что программировать на C/C++ вы умеете — возможно совместное использование Python+Cython для вас окажется подходящим компромиссом.

Если вдруг что — по cython есть разные вводные статьи на Хабре — для примера того, как оно выглядит. Например переводная статья «Пишем код C на Cython», в которой есть ссылка на кастомную обертку над malloc/free, которая автоматизирует освобождение памяти за счет совместной работы со сборщиком мусора.

Я, собственно, обратил внимание и в итоге решил погуглить — поскольку сам, в последние пару дней, активно интересовался, в частности, темой cython, в разрезе ускорения работы над большими массивами данных за счет применения адресной арифметики (пока решил использовать встроенный в Python, memoryview, но от дополнительного ускорения в некоторых специфичных местах — все еще не отказался бы).
Ясно. Мы просто говорим про разные парадигмы: вам больше нравится подход OpenMP в котором в более сложном коде придется использовать примитивы синхронизации вроде мютексов (а это вызовы ядра, что при невнимательном написании кода или при недостаточном опыте использования OpenMP — очень негативно скажется на производительности), а меня более чем удовлетворяет потоковая обработка запросов актором (отдельный тред, или в случае Питона — лучше отдельный процесс). У обоих подходов свои достоинства и недостатки, конечно.
Единственная возможность это делать pickle

К слову говоря, не единственная: вместо медленного но универсального pickle — можно использовать так же встроенный, и значительно более быстрый хоть и не столь универсальный marshal (на основе которого собственно pickle и построен). Интерфейс у него такой же как и у pickle, но есть ограничение: он может сериализовать/десериализовать исключительно встроенные типы данных: dict, list, str, bytes, и т.д. Для удобной передачи данных между процессами этого более чем достаточно (издержки компенсируются высокой скоростью сериализации/десериализации).
>>Странно, что эта байка здесь снискала теплый прием

Все еще странно? Или уже (после диалога ниже) нет? :)
Склонен согласиться. Ведь если вспомнить историю — то для названий каких-то новых лекарств или изобретений — часто использовали «мертвый» язык — латынь. Т.е. брали несколько слов из латыни и комбинировали их в один термин. Видимо тут было два фактора:
  1. Латынь — была достаточно общеизвестна (как и английский сейчас).
  2. Комбинация слов собственного языка могла звучать так же неблагозвучно, как и вышеозначенная «ПирДуха», что превращало бы учебный процесс, или процесс обсуждения чего-либо, в балаган. :)
Видимо дефицит калорий не достаточно велик (что хорошо): расход ранее запасенного жира, судя по всему, покрывает этот дефицит, и мускулам есть из чего строительный материал и энергию для работы получать. Радоваться надо, если мускулатура действительно растет, а талия тает. :)
>>Да ладно, вот новость-то, люди, оказывается, не одинаковые

За свою жизнь общался с раными людьми, в том числе и с IT-шниками-фирмачами-музыкантами. Долго и обстоятельно (на уровне близких товарищей). Могу сказать что таки есть люди (психически-здоровые и даже, в некоторых случаях, далеко не посредственного ума) которые отказываются верить в объективные факты и факторы (никто никого ни к чему не агитировал — просто речь заходила мимоходом, и человек рассказывал свою глубинную позицию). Им так комфортней видимо. Судя по всему — поскольку в противном случае некоторым из них пришлось бы самим себе признаться в своем несовершенстве (мягко говоря, в некоторых случаях), что для них чрезвычайно сложно. А в случае некоторых других — например работают полученные при воспитании, догматичные этические утверждения об одинаковости и равенстве (поскольку видимо с недогматической логикой, в рамках этики, их мозгу справляться сложно). И в случае последних — я даже рад что эти люди носят установку «возлюбим всех!», а не установку «накол всех кто чуток отличается!»: они бы одинаково-свято веровали в любую вдолбленную с детства этическую догмато-установку. А у кого-то еще какие-то другие механизмы срабатывают.
Так что да — для некоторого заметного процента людей, техника довольно-точного определения неравенства способностей людей — очень неприятная и даже отрицаемая на уровне «не верю!!111», новость.

>>Да и что по-вашему

То что человек описал поведение некоторых людей — не означает что он разделяет взгляды этих людей. Собственно, полагаю вы и без меня это знаете, но вот сама форма речи «Да и что по-вашему» — вполне может настроить собеседника на негативную реакцию, и как минимум на нежелание писать вам ответ. :)
Справедливости ради уточню:
— классы Qt не в воздухе висят, а умеют делать импорт/экспорт из/в соответствующие классы STD. При чем, если говорить за строки — то QString умеет делать импорт/экспорт как из/в std::string, так и из/в std::wstring, так и из/в char* и т. д. А это довольно удобно.
— что до QList. Он действительно не является аналогом std::vector поскольку одно — список, а другое — умный массив. Совершенно разные типы контейнеров. Ну и снова таки: если надо — QList умеет делать импорт/экспорт из/в QVector, который уже является аналогом std::vector, и делает импорт/экспорт непосредственно из/в std::vector.
На эту папку можно натравить создаватель инсталляторов, типа Inno Setup и получить msi. В моем случае, надо было обеспечить работоспособность программы с минимальными правами пользователей — точно без права установки либ.

MSI не обязательно требуют права администратора, но при этом удобней (и солидней :) ) для пользователя чем просто самораспаковывающийся архив. Просто при создании инсталляционного пакета, выберается режим, в котором оговаривается что установка будет по-умолчанию производится не в Program Files/MyProgramName, а в AppData/Local/MyProgramName (как и делают всякие Дропбоксы, Хромы, и т.д). Ну и ярлыки чтобы не в ProgramData закидывались, а в локальную для пользователя папку.

Главное понимать, что такая локальная инсталляция всегда менее безопасна чем обычная: так исполняемые файлы установленного софта доступны для редактирования кем и чем угодно — в конторы с требованиям по безопасности такой софт лучше не ставить (то же и к самораспаковывающимся архивам относится; особенно если не запихивать их потом руками в Програм Файлс).

Не знаю как это делается при использовании Inno Setup, но вот при помощи WiX Installer (набор опенсорсных утилит от Microsoft) я такие инсталляторы свободно создавал когда требовалось — мануалы на эту тему в сети найти не сложно. Да и может еще какие новые графические конфигураторы для WiX за это время появились в дополнение к тому что был несколько лет назад (не проверял). В любом случае правильный MSI создать не сложно — более-менее на уровне с другими системами инсталляции. А преимуществах — и удобство юзера, и автоматизация процессов инсталляции/деинсталляции и гибкость.
>>Минусы вам не могу ставить, т.к. сам отхабренный, да и не планировал
ОК. В любом случае — не важно: я тут раз в пятилетку (буквально) что-то коментирую, потому что как почитаю каменты — так сразу понимаю что если залезу сюда с инженерными знаниями — то меня тут всякие «умники», знающие предметную область максимум по википедии — дураком массово назовут, и даже слушать не будут. Нафиг нафиг :))

>>не верные тезисы… Если это все была шутка…
В каждой шутке есть доля шутки. Тезисов тут нет, т.к. не научная конференция, и серьезно тратить время на подбор аргументов для каментов в тут — скажем не очень разумное решение для человека которому есть куда приложить свои умственные способности с реальной пользой. :)
>>Какие такие «оооочень действенные» лицензионные претензии могут быть в России — не смешите меня.

Так и я о том же :)
У вас в тексте много ерунды.
В Ютубе, под видео различных петросянов Вы тоже всегда пишите что у них много ерунды? :))

Upd: Ну вот, теперь и тегами не могу пользоваться. Спасибо большое! :)) Гиктаймс имеет кучу непрофессионализма (мягко говоря) и прочей глупости в своих коментах, но обязательно находится уникум, что начинает тут профессорскую серьезность изображать :))
и автор запретил его использовать


Я смотрю, это оказалось оооочень действенно. Да так действенно, что linderdaum.com — донейшны собирает за чисто-форк. :)) Интересно, а автор оригинала не пробовал заабьюзить этих форкеров через регистратора их домена? Могло бы сработать.
А действительно — давайте вообще всех животных наделим правами человека. Ведь в опросе, ссылка на который приведена в конце статьи — говорится вообще о животных, а не о каком-то конкретном перечне видов.
Думаю веганы (и разные их разновидности) будут этому очень рады и поддержат.

Только надо быть готовым следующим нюансам, о которых, люди обычно не задумываются:

1) Придется забыть не только о сочных бифштексах, куриных грудках, рыбьем филе, икре и о прочих «неестественных излишествах, навязываемых нам лицемерной цивилизацией», но и о яйцах, которые — суть детеныши. Ведь если птицы (а птицы — тоже животные) — наделены правами человека, то и их детеныши тоже наделены такими же правами. И даже если яйца не оплодотворенные (что еще надо доказать) — отбирать их у родителей (у птиц) будет бесчеловечно, а следовательно невозможно!
1.а) Так же как и про яйца — придется забыть про все виды молочной продукции — поскольку это суть угнетение и эксплуатация

С едой разобрались — идем дальше.

2) Шерсть и пух. Нет, то что о кожаных изделиях можно будет забыть — это понятно. Но еще придется забыть и о шерстяных и пуховых изделиях. Потому что это эксплуатация, и издевательство над животными.
3) Но это не проблема, поскольку мы запретим одежду вообще. Ведь в складках одежды могут оказаться животные, которых мы нечаянно можем убить.

И наконец — более интересный момент:

4) Паразиты. Паразиты (в том числе и глисты. Да, да — те самые 9-метровые милашки, которые мирно кормятся в наших желудочно-кишечных трактах) — тоже животные. А раз мы наделяем животных правами человека — то будьте любезны эти права соблюдать. Значит выводить паразитов — нельзя. Они ведь не желают ничего плохого. Они просто пытаются выжить как могут. А люди только то и делают что неоправданно лишают их жизни, и планомерно блокируют им среду обитания, термически обрабатывая свою пищу, моя руки с мылом, и другими «противоестественными ритуалами, направленными только на то, что-бы портить биосферу нашей планеты».
4.а) Из этого следует, что нам придется законодательно запретить пастеризацию, консервирование, использование большого количества специй, и все другие виды обработки, которые могут привести к повреждению яиц и личинок животных, находящихся на поедаемой нами пище.
4.б) Кроме того мы законодательно запретим вакцины, мази, таблетки и прочие препараты, негативно влияющие на нормальный жизненный цикл животных (в том числе кровососущих, и откладывающих свои личинки под кожу человеку).

Я думаю это будет очень радостный и счастливый мир, в котором, благодаря его общей благостности, наверняка вскоре заведутся веселые единороги, какающие бабочками, и писающие радугой! Да здравствует славный новый мир! :)

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность