Как мне в браузере сделать работу с локальными файлами? Нет, не с какой-то там песочницей, расположенной непойми где, а прямо с файлами, в произвольной указанной пользователем директории? Заворачивать целый браузер в электро не предлагать.
Интересный материал, а некоторые моменты навевают ощущение жуткой безнадеги.
Но вопрос: для тех, кто не в теме, что, все-таки, эти группы? Когда была истерия с синими китами во всех сми, она была, вроде как, вызвана чьей-то шуткой, которая была подхвачена журналистами, потом подражателями, потом в нее поверили и завертелось. Так что это на самом деле?
Летаю в стимуляторе Velocidrones, летал на маленьком tiny-whoop, летаю сейчас на далеко не самом спортивном кваде. Результат? Ну, вот, к примеру, сегодняшний краш, не успел увернуться от фонарного столба.
Я правильно понял, что нейросети на вход дают AST, она проводит манипуляции, на выходе тоже AST? А есть какие-то гм… более-менее известные архитектуры и подходы для оперирования графами?
Я множество раз видел, как у преподавателей видео в поверпоинте на работает (топ 1 техническая проблема). Так что материалы готовиться заранее, но не обучает не проверяют, что все работает
Может кто-нибудь объяснить человеку с телефоном за 10 тысяч российсих рублей на Qualcomm 6xx-не-помню, какие области применения всего этого в телефонах?
Немного оффтоп:
Их каких документов берутся все эти запрещенные и ограниченные зоны полетов? Есть онлайн карты, знаю. Но меня интересует, в какой документ тыкать, если добрый товарищ полицейский поинтересуется, почему я управляю БПЛА в таком-то месте, при условии, что там нет зоны органичения полетов? (Воздушное пространство класса С, как я понимаю).
В Китае продается множество FPV-квадрокоптеров на любой вкус, в том числе, полностью собранные, в комплекте с необходимой аппаратурой. А управлять в режиме стабилизации не так уж сложно, можно научиться за вечер. Цена дешманского набора в несколько раз меньше, чем у мавика магазина, что делает его более доступным для приобретения "любым школьником".
Где гарантия, что однажды ОС не откажется работать с оборудованием, разработанным в России
Linux Kernel — Open Source. Вы вольны:
добавлять драйвера для поддержки оборудования, разработанного в России, в mainline. Как, например, Linux поддерживает Байкал
пересобирать ядро, как вам угодно, включая необходимые флаги и драйвера
Не понимаю, зачем для этого какой-то запрет выезда, максимизация доли системы, разрабатываемая отечественными программистами, создание каких-то особых форков… Почему просто нельзя участвовать в мировом Open Source сообществе, развивать и улучшать продукты, которыми уже пользуется куча людей, вместо какого-то Not Invented Here синдрома?
ЗЫ.
Если ментейнеры ядра по каким-то причинам не принимают ваши патчи для поддержки оборудования, то всегда можно иметь свой бранч со своими драйверами. Распространенная практика во многих компаниях, производителях железа (например, кучи ARM'ов), которые не спешат выкладывать драйвера для поддержки своих процессоров в mainline.
Ну я ж специально привел простой пример. В реальном коде это будет не range, а коллекция каких-то объектов откуда-то полученная, не четность, а какая-то иная бизнес логика. В текущем проекте довольно много таких ситуаций.
Вместо того, чтобы реализовать нормальные методы map, filter, reduce
Я согласен, что это кривой дизайн, что в питоне это функции, а не методы. В хаскелле это было бы удобно, там есть особый сахар для композиции функций, а тут нет.
возвращающие не коллекции исходного типа, а особые объекты
Вроде как производности ради. Если мы будем в длинной последовательности операций над List каждый раз аллоцировать промежуточный лист, а потом его удалять, будет не очень быстро.
И если в Python append в цикле существенно медленнее генератора
Насколько я понимаю…
Append — это универсальная функция добавления в лист. Лист в питоне — по-сути, вектор, значит, append может привести к реаллокации памяти, во не быстро. А генератор — это внутри цикл с yield. Поэтому
цепочка операций над генераторами вообще не потребует аллокаций промежуточных промежуточных листов
видимо, в интерпретаторе есть оптимизации по созданию листа из генератора, по сравнению с созданием русски ручного добавления элементов. Вообще, тут я могу быть не прав.
Только вот генераторы списков (словарей, множеств) нужны только для того, чтобы сэкономить несколько символов в коде.
Сэкономить относительно чего? Если относительно обычного for, то далеко не несколько символов.
Генератор для примера
>>> [x * x for x in range(10) if x % 2 == 0]
[0, 4, 16, 36, 64]
Цикл for:
он куда более громоздкий
он банально медленнее из-за постоянных append
в отличие от генератора, это не выражение, поэтому не получится использовать в друигх выражениях, в return и так далее
squares = []
for x in range(10):
if x % 2 == 0:
squares.append(x)
Теперь сравним с обычными функциями высшего порядка. Это еще более нечитаемая конструкция.
>>> list(map(lambda x: x * x, filter(lambda x: x % 2 == 0, range(10))))
[0, 4, 16, 36, 64]
Лично я не "топлю" за генераторы списков, словраей итп, просто в питоне в связи с остальными особенностями дизайна и стандартной библиотеки питона, это наиболее простой, локаничный и читаемый способ делать многие вещи. Можно сравнить с C# LINQ, который, на мой взгляд, еще лучше:
IENumerable.Range(10).Where(x => x % 2 == 0).Select(x => x * x);
Имеет почти все плюсы генераторов, но не вносит какого-то особенного синтаксиса. Правда, шарп немного громозкий тем, что там нет отдельно стоящих функций (IEnumerable.Range() vs range()), но это нюансы.
Разница между C и Go в том, что функция C может возвращать только одно значение примитивного типа (включая указатель). В C одновременный возврат и значения, и информации об ошибке — это всегда геморрой.
Разве?
Foo foo;
if (bar(&foo) != 0) {
// handle
}
Для меня не сильно отличается от примера ниже, может, я просто не понимаю.
foo, err := bar()
if (err != nill) {
// handle
}
В том же Go возможно вызвать метод для nil, если этот nil — указатель на типизированное значение.
func (user *User) GetFoo() *Foo {
if user == nil {
return nil
}
return user.foo
}
ИМХО, но
это меняет поведение функции ради обработки ощибок в вызывающем коде, несколько нарушает принцип единственной ответственности
это делает функцию по-умолчанию null-friendly, что может отстрелить ноги где-то там, где мы не ожидаем null. Вкусовщина, но предпочитаю явную nullability, к которой в последнее время стремятся многие языки (C#, Dart запилили, Kotlin, вроде, by design, насколько это возможно в JVM, Rust by design...)
Что насчёт библиотек? Я недавно пытался кросс-копировать какую-то дичь под arm. Куча зависимостей: OpenCV, CUDA, ROS (ну да, это с++ библиотеки, чисто для примера). и прочее. Честно, не осилил.
функция принимающая Bool и возвращающая функцию, принимающую Bool и возвращающую Bool
Так и есть. Это каррирование — функцию многих аргументов может предоставить как последовательность применения (?) функций одного аргумента. И да, без каких-то знаний код на хаскеле лично мне нечитаем.
Любители ставить знак равенства между краткостью и нечитаемостью почему-то забывают, что написанный код будет читать не человек с улицы, а тот, кто разбирается в этом языке.
Какие-то питоновские слайсы и генераторы списков могут поставить в ступор того, кто из никуда не видел, но человек с опытом в питоне с лёгкостью их прочтет.
И чем больше используется трюков (в том числе и синтаксического сахара) для уменьшения длины кода, тем сложнее этот код понимать
C#
Рассмотрим обращение к полю, на пути к которому может встретиться несколько null'ов
var bar = repo.FindUser()?.GetFoo()?.GetBar();
if (bar != null) ...
// vs
var user = repo.FindUser();
if (user != null) {
var foo = user.GetFoo();
if (foo != null) {
var bar = foo.GetBar();
if (bar != null) ...
}
}
Другой пример. Например, Go использует возвращаемые значения, а не исключаэения. Возвращаемые значения — это хорошо, но не так, как это сделано в Go (имхо). Обработка ошибок в Go похожа на старую-добрую портянку if'ов из Си (правда, в Си есть популярный пвттерн с goto, не уверен, есть ли аналог в Go). В то же время в том же Haskell так же используются возвращаемые значения (монады Maybe, Either) вместо исключений, но языки представляет do-нотацию, позволяющую писать оборотку ошибок (и вообще любой монадические цепочки bind'ов) куда проще. При этом для незнакомого с Haskell человека do-нотация буклет менее очевидна, чем ифы. Rust, полагающийся на аналогичный механизм обработки ошибок, использует специализированный костыль специально для Result: "?" оператор.
Разумеется, везде меру знать нужно, но лично я предпочту язык, который представляет различные средства и сахар, чем тот, который ограничивает, мотивируя это тем, что разработчики начнут злоупотреблять и писать нечитаемую дичь.
Это смотря с чем сравнивать. Там система типов более сильная, чем во всяких C++ и прочих C#. Имхо, конечно, я даже не знаю, можно ли это как-то формально обосновать. Ну, хотя бы отсутствие неявного null.
Как мне в браузере сделать работу с локальными файлами? Нет, не с какой-то там песочницей, расположенной непойми где, а прямо с файлами, в произвольной указанной пользователем директории? Заворачивать целый браузер в электро не предлагать.
Интересный материал, а некоторые моменты навевают ощущение жуткой безнадеги.
Но вопрос: для тех, кто не в теме, что, все-таки, эти группы? Когда была истерия с синими китами во всех сми, она была, вроде как, вызвана чьей-то шуткой, которая была подхвачена журналистами, потом подражателями, потом в нее поверили и завертелось. Так что это на самом деле?
Летаю в стимуляторе Velocidrones, летал на маленьком tiny-whoop, летаю сейчас на далеко не самом спортивном кваде. Результат? Ну, вот, к примеру, сегодняшний краш, не успел увернуться от фонарного столба.

Я правильно понял, что нейросети на вход дают AST, она проводит манипуляции, на выходе тоже AST? А есть какие-то гм… более-менее известные архитектуры и подходы для оперирования графами?
На правах юмора:
Ну, если численно и показывать не на бумаге, то это было ещё в 40х. Много где применяется, например, всякие методы конечных элементов итп.
На использовал TF. А зачем там докер?
Я множество раз видел, как у преподавателей видео в поверпоинте на работает (топ 1 техническая проблема). Так что материалы готовиться заранее, но не обучает не проверяют, что все работает
Может кто-нибудь объяснить человеку с телефоном за 10 тысяч российсих рублей на Qualcomm 6xx-не-помню, какие области применения всего этого в телефонах?
Немного оффтоп:
Их каких документов берутся все эти запрещенные и ограниченные зоны полетов? Есть онлайн карты, знаю. Но меня интересует, в какой документ тыкать, если добрый товарищ полицейский поинтересуется, почему я управляю БПЛА в таком-то месте, при условии, что там нет зоны органичения полетов? (Воздушное пространство класса С, как я понимаю).
В Китае продается множество FPV-квадрокоптеров на любой вкус, в том числе, полностью собранные, в комплекте с необходимой аппаратурой. А управлять в режиме стабилизации не так уж сложно, можно научиться за вечер. Цена дешманского набора в несколько раз меньше, чем у мавика магазина, что делает его более доступным для приобретения "любым школьником".
Linux Kernel — Open Source. Вы вольны:
Не понимаю, зачем для этого какой-то запрет выезда, максимизация доли системы, разрабатываемая отечественными программистами, создание каких-то особых форков… Почему просто нельзя участвовать в мировом Open Source сообществе, развивать и улучшать продукты, которыми уже пользуется куча людей, вместо какого-то Not Invented Here синдрома?
ЗЫ.
Если ментейнеры ядра по каким-то причинам не принимают ваши патчи для поддержки оборудования, то всегда можно иметь свой бранч со своими драйверами. Распространенная практика во многих компаниях, производителях железа (например, кучи ARM'ов), которые не спешат выкладывать драйвера для поддержки своих процессоров в mainline.
Это боль. Остаётся вопрос, как люди на JS пишут ещё больше, чем на питоне.
Ну я ж специально привел простой пример. В реальном коде это будет не range, а коллекция каких-то объектов откуда-то полученная, не четность, а какая-то иная бизнес логика. В текущем проекте довольно много таких ситуаций.
Я согласен, что это кривой дизайн, что в питоне это функции, а не методы. В хаскелле это было бы удобно, там есть особый сахар для композиции функций, а тут нет.
Вроде как производности ради. Если мы будем в длинной последовательности операций над List каждый раз аллоцировать промежуточный лист, а потом его удалять, будет не очень быстро.
Насколько я понимаю…
Append — это универсальная функция добавления в лист. Лист в питоне — по-сути, вектор, значит, append может привести к реаллокации памяти, во не быстро. А генератор — это внутри цикл с yield. Поэтому
Сэкономить относительно чего? Если относительно обычного
for, то далеко не несколько символов.Генератор для примера
Цикл
for:appendТеперь сравним с обычными функциями высшего порядка. Это еще более нечитаемая конструкция.
Лично я не "топлю" за генераторы списков, словраей итп, просто в питоне в связи с остальными особенностями дизайна и стандартной библиотеки питона, это наиболее простой, локаничный и читаемый способ делать многие вещи. Можно сравнить с C# LINQ, который, на мой взгляд, еще лучше:
Имеет почти все плюсы генераторов, но не вносит какого-то особенного синтаксиса. Правда, шарп немного громозкий тем, что там нет отдельно стоящих функций (
IEnumerable.Range()vsrange()), но это нюансы.Разве?
Для меня не сильно отличается от примера ниже, может, я просто не понимаю.
ИМХО, но
Возможно, я не туда ответил (комментарии с телефона не так удобны), но выше я говорил про Rust
Что насчёт библиотек? Я недавно пытался кросс-копировать какую-то дичь под arm. Куча зависимостей: OpenCV, CUDA, ROS (ну да, это с++ библиотеки, чисто для примера). и прочее. Честно, не осилил.
Так и есть. Это каррирование — функцию многих аргументов может предоставить как последовательность применения (?) функций одного аргумента. И да, без каких-то знаний код на хаскеле лично мне нечитаем.
Любители ставить знак равенства между краткостью и нечитаемостью почему-то забывают, что написанный код будет читать не человек с улицы, а тот, кто разбирается в этом языке.
Какие-то питоновские слайсы и генераторы списков могут поставить в ступор того, кто из никуда не видел, но человек с опытом в питоне с лёгкостью их прочтет.
C#
Рассмотрим обращение к полю, на пути к которому может встретиться несколько null'ов
Другой пример. Например, Go использует возвращаемые значения, а не исключаэения. Возвращаемые значения — это хорошо, но не так, как это сделано в Go (имхо). Обработка ошибок в Go похожа на старую-добрую портянку if'ов из Си (правда, в Си есть популярный пвттерн с goto, не уверен, есть ли аналог в Go). В то же время в том же Haskell так же используются возвращаемые значения (монады Maybe, Either) вместо исключений, но языки представляет do-нотацию, позволяющую писать оборотку ошибок (и вообще любой монадические цепочки bind'ов) куда проще. При этом для незнакомого с Haskell человека do-нотация буклет менее очевидна, чем ифы. Rust, полагающийся на аналогичный механизм обработки ошибок, использует специализированный костыль специально для Result: "?" оператор.
Разумеется, везде меру знать нужно, но лично я предпочту язык, который представляет различные средства и сахар, чем тот, который ограничивает, мотивируя это тем, что разработчики начнут злоупотреблять и писать нечитаемую дичь.
О, спасибо.
Это смотря с чем сравнивать. Там система типов более сильная, чем во всяких C++ и прочих C#. Имхо, конечно, я даже не знаю, можно ли это как-то формально обосновать. Ну, хотя бы отсутствие неявного null.