Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Python для разработчика
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Страницы: 1, 2
Leka
Имхо, самостоятельный выбор языка должен с этой (и тп) странички начинаться:
http://rosettacode.org/wiki/Keyboard_input/Keypress_check

dxp
Цитата(_pv @ Mar 14 2018, 20:37) *
тут не соглашусь, с метатаблицами у луа ещё посмотреть надо что там более гибкое.

Да, всего один тип - ассоциативный массив. В питоне - это словарь. Помимо него есть ещё списки, кортежи, строки, простые типы и классы. Согласитесь, арсенал средств куда богаче.

Цитата(_pv @ Mar 14 2018, 20:37) *
тут пожалуй да, но есть ffi, swig, так что не самая большая проблема.

Cюда загляните. sm.gif И это только один из наборов библиотек для научно-инженерных задач. Помимо этого ещё есть биндинг OpenCV (cv2), PyQt/PySide для разработки полноценных приложений. Кроме того, и стандартная библиотека питона исключительно богата и разнообразна - вплоть до таких "мелочей", как модуль парсинга аргументов (argparse).

Цитата(_pv @ Mar 14 2018, 20:37) *
ну не знаю чем тут луа хуже дергать сторонние библиотеки

Тем, что их набор гораздо беднее. Например, можете написать на Lua полноценное GUI приложение, приём без извратов, а прямым путём, как на тех же плюсах? Сомневаюсь. И дело тут не в языке как таковом, с ним всё в порядке, а существовании для этого соответствующих графических фреймворков, приспособленных под этот язык. Всё-таки Lua проектировался как встраиваемый язык, в этом его сила. Его конкурент - JavaScript. Да, на обоих языках можно писать stand-alone приложения. Но до возможностей питона этом поприще им обоим далеко - повторюсь, не по причине, что языки ущербные (нормальные языки), а по причине отсутствия соответствующего контекста для этого, который не возник из-за иной целевой направленности обоих этих языков.

Цитата(_pv @ Mar 14 2018, 20:37) *
, а вот с jit по скорости можно даже требовательные по скорости вычисления задачи решать прямо.

Ну, jit - отдельная тема. Для питона тоже есть способы увеличения производительности вычислений - от прямого расширения на С/C++ и до применения CUDA (scikit-cuda, есть по ссылке выше), включая компиляцию модулей Cython, jit и прочее.

Кстати, если упирать на вычисления, то тут альтернативу питону составляет скорее Julia (убийца матлаба sm.gif ), а не Lua. Вот там нативный jit с возможностью доступа до ассемблера и встроенная в язык фича по распределению вычислений на удалённые хосты/фабрики.

Цитата(_pv @ Mar 14 2018, 20:37) *
ну это не я в качестве примера Jupyter привел sm.gif

Ясно. В качестве вычислительного блокнота математика сильна, спору нет, это её ниша. Но в качестве языка общего назначения ей тягаться с языком общего назначения тяжело.

Цитата(_pv @ Mar 14 2018, 20:37) *
математика по сравнению с питоном класс задач может решать думаю не менее широкий.

И что, на ней можно и удобно писать утилиты командной строки работы с текстами и файлами? На ней можно и удобно писать законченные приложения? Что на ней можно делать так же легко, как и на питоне, кроме вычислений?

Цитата(_pv @ Mar 14 2018, 20:37) *
это только пока код выглядит как
for i = 1, 10
a = b + c
а как только что-нибудь посерьёзнее, особенно если какие-нибудь учОные пишут что-нибудь для расчётов - тут всё.

Код не валиден для питона. sm.gif

Ну, покажите учОный код? sm.gif
makc
Интересно, почему никто не упоминает GIL (еще см. тут) в контексте этого обсуждения?
Множество людей больно наступили на эту проблему при использовании Python в многопоточных приложениях.
Эдди
Цитата(dxp @ Mar 15 2018, 06:09) *
Ну, покажите учОный код? sm.gif

Можете поискать, на гитхабе есть такое. Я здесь не помощник, т.к. уже говорил — меня от одного вида пхытона тянет извергнуть съеденное накануне…
Но даже у нас в обсерватории можно 2-3 человека найти, применяющих пхытон с тем или иным успехом. Но все-таки, на первом месте по использованию у нас стоят С и С++, далее уже всякие матлабы/октавы/IDL'и/MIDAS'ы/IRAF'ы. Делаем с коллегой сейчас юниксвейную управлялку одним прибором: я написал сишные низкоуровневые утилиты, он на С++ сделал над всем этим GUI (я принципиально не лезу в GUI, т.к. это — та еще клоака: либо С++ с культяпками, либо С с говнотыками, либо мучения с OpenGL напрямую; нормального человеческого GUI-фреймворка до сих пор не существует, увы).
dxp
Цитата(makc @ Mar 15 2018, 11:47) *
Интересно, почему никто не упоминает GIL (еще см. тут) в контексте этого обсуждения?

https://electronix.ru/forum/index.php?s=&am...t&p=1551144

Цитата(makc @ Mar 15 2018, 11:47) *
Множество людей больно наступили на эту проблему при использовании Python в многопоточных приложениях.

Какого рода грабли? Пытались выжать производительность, чтобы на i7 все 12 аппаратных потоков были задействованы? sm.gif
makc
Цитата(dxp @ Mar 15 2018, 08:40) *


Пардон, не заметил и поиск не показал.

Цитата(dxp @ Mar 15 2018, 08:40) *
Какого рода грабли? Пытались выжать производительность, чтобы на i7 все 12 аппаратных потоков были задействованы? sm.gif


На тему производительности довольно много написано и это не самая страшная проблема.
Беда была при встраивании интерпретатора в многопоточное приложение, в котором ряд функций по обработке данных дописывалось на питоне для обеспечения большей гибкости. В итоге были очень странные и непонятные падения, которые решились синхронизацией многопоточного доступа к функциям интерпретатора.
dxp
Цитата(makc @ Mar 15 2018, 14:13) *
На тему производительности довольно много написано и это не самая страшная проблема.

Да, хорошая переводная статья. А вот ещё одна от гуру питона. Букв немало, если неинтересно, можно сразу перематывать на заключение, где выводы. В общем, никаких чудес или фатальных трабл нет, если есть понимание темы, проблем не возникает.

Цитата(makc @ Mar 15 2018, 14:13) *
Беда была при встраивании интерпретатора в многопоточное приложение, в котором ряд функций по обработке данных дописывалось на питоне для обеспечения большей гибкости. В итоге были очень странные и непонятные падения, которые решились синхронизацией многопоточного доступа к функциям интерпретатора.

Ну, встраивание питона - отдельная головная боль. Не очень он для встраивания годен. Язык-фронтэнд, Тут лучше "жабий скрип", луна или белка.sm.gif
alexunder
Цитата(AlexandrY @ Mar 14 2018, 16:24) *
Может у вас опыт от XP, но в API WinRT все коммуникации работают под COM т.е. в своих потоках.

причем тут XP? sm.gif COM-технология существует со стародавних времен.
Сделайте на лучезарном матлабе програмку с GUI, чтобы она в фоновом режиме читала данные с COM-порта и выкладывала их на график в GUI. Только без использования Parallel Computing Toolbox sm.gif

Цитата(AlexandrY @ Mar 14 2018, 16:24) *
C# да, достойный язык, тем более странно зачем тут нужен питон. За уши притягиваете?

Вы, кажется, так и не поняли. В моем примере на C# делаются "формы", которые потом "отливаются" в DLL. Последняя прицепляется к фремворку на Питоне, который состоит из всевозможных скриптов для измерения и обработки данных. Этот фреймворк используется на разных машинах, разными пользователями, которые могут добавлять или модифицировать скрипты. Реализовавыть это все с C# потребует гораздо больше времени и будет менее гибким решением.

Цитата(AlexandrY @ Mar 14 2018, 16:24) *
Пока достойных примеров, кроме как желания вывалить в опенсорс я для питона не видел.

Возможно, у Вас еще не было подходящих задач. Примеров выше было приведено достаточно.
_pv
Цитата(dxp @ Mar 15 2018, 10:09) *
Да, всего один тип - ассоциативный массив. В питоне - это словарь. Помимо него есть ещё списки, кортежи, строки, простые типы и классы. Согласитесь, арсенал средств куда богаче.

Тут дальше спор будет становиться всё более бессмысленным, потому что похоже что питон я знаю так же хорошо, как вы луа sm.gif
Есть там строки, а благодаря метатаблицам в луа есть и классы, списки, кортежи, и выносить их в отдельные сущности нет особого смысла, но они там есть.

Цитата(dxp @ Mar 15 2018, 10:09) *
Cюда загляните. sm.gif И это только один из наборов библиотек для научно-инженерных задач. Помимо этого ещё есть биндинг OpenCV (cv2), PyQt/PySide для разработки полноценных приложений. Кроме того, и стандартная библиотека питона исключительно богата и разнообразна - вплоть до таких "мелочей", как модуль парсинга аргументов (argparse).

Биндинги для openCV и Qt есть и для луа, для того чтобы звать сторонние библиотеки, питон ничем особо не лучше.
Да, стандартная библиотека у луа, мягко говоря довольно скромная, и для питона библиотек заметно больше, но у луа не настолько всё плохо. И раз в ванильные аж целых 200кБ не напихали всего-всего не значит что совсем ничего нет.

Цитата(dxp @ Mar 15 2018, 10:09) *
Тем, что их набор гораздо беднее. Например, можете написать на Lua полноценное GUI приложение, приём без извратов, а прямым путём, как на тех же плюсах? Сомневаюсь. И дело тут не в языке как таковом, с ним всё в порядке, а существовании для этого соответствующих графических фреймворков, приспособленных под этот язык. Всё-таки Lua проектировался как встраиваемый язык, в этом его сила. Его конкурент - JavaScript. Да, на обоих языках можно писать stand-alone приложения. Но до возможностей питона этом поприще им обоим далеко - повторюсь, не по причине, что языки ущербные (нормальные языки), а по причине отсутствия соответствующего контекста для этого, который не возник из-за иной целевой направленности обоих этих языков.

Для луа так же есть как и совсем простые iuplua и fltk, так и wxWidgets и Qt.
Как пример, IDE для lua на lua же написанной, https://studio.zerobrane.com/features
Да и всякие löve, corona.
А вот как будет выглядеть полноценное GUI приложение на питоне, ну чтобы его просто взял скачал и запустил обычный пользователь, да ещё и под виндами, или вообще каким-нибудь андроидом?
Ну и про нормальность javasripta это очень спорное утверждение sm.gif

Цитата(dxp @ Mar 15 2018, 10:09) *
Ну, jit - отдельная тема. Для питона тоже есть способы увеличения производительности вычислений - от прямого расширения на С/C++ и до применения CUDA (scikit-cuda, есть по ссылке выше), включая компиляцию модулей Cython, jit и прочее.

Продолжим фаллометрию, lua-torch, terracuda

Цитата(dxp @ Mar 15 2018, 10:09) *
И что, на ней можно и удобно писать утилиты командной строки работы с текстами и файлами? На ней можно и удобно писать законченные приложения? Что на ней можно делать так же легко, как и на питоне, кроме вычислений?

Да можно там и законченные приложения, и в веб, и гуй свой какой никакой есть. приташит только свой рантайм на многие сотни МБ, впрочем как и питон.
Не то чтобы удобно, но вот облагородить какую-нибудь считалку кнопочками/окошками чтобы хоть кто-нибудь кроме автора пользоваться мог, вполне может оказаться проще, чем перетаскивать в тот же питон всю "арфметическую" часть из математики.
Но да, как замена какому-нибудь awk/sed, конечно не самая подходящая sm.gif
dxp
Цитата(_pv @ Mar 15 2018, 17:14) *
Есть там строки, а благодаря метатаблицам в луа есть и классы, списки, кортежи, и выносить их в отдельные сущности нет особого смысла, но они там есть.

Ну, самодельные костыли всё же не так удобны, безопасны и просты для понимания и использования, как встроенные в язык средства.

Цитата(_pv @ Mar 15 2018, 17:14) *
А вот как будет выглядеть полноценное GUI приложение на питоне, ну чтобы его просто взял скачал и запустил обычный пользователь, да ещё и под виндами, или вообще каким-нибудь андроидом?

Выглядеть будет обычно. Конечно, рантайм ему потребуется. У меня есть опыт только с Qt, так вот когда я запускал программу под вендой, мне достаточно было установить питон и PyQt, дальше всё запустилось без вопросов. Для венды придётся слепить инсталлятор, который установит вышеупомянутое, но инсталляторы для венды - обычное дело.

Цитата(_pv @ Mar 15 2018, 17:14) *
Ну и про нормальность javasripta это очень спорное утверждение sm.gif

Однако на нём успешно пишут приложения (Node.js). И жабоскрипные приложения мне попадались много чаще, чем на луа.

Цитата(_pv @ Mar 15 2018, 17:14) *
Да можно там и законченные приложения, и в веб, и гуй свой какой никакой есть.

Ну, так вон народ и на Tcl лабает приложения, и объекто-ориентированные, и с гуями... Но, полагаю, вы не будете сторонником этого подхода. sm.gif

Цитата(_pv @ Mar 15 2018, 17:14) *
Но да, как замена какому-нибудь awk/sed, конечно не самая подходящая sm.gif

О, а я на питон как раз внимание обратил именно из-за того, что эти оба так достали при обработке многострочных текстов. Собственно, питон именно для этих случаев и начал использовать. А потом пошло-поехало - сперва простые утилиты, потом как интерактивная среда для вычислений, исследований, а потом и полноценные GUI приложения. До момента знакомства с питоном утилиты писал на С++, с тех пор исключительно на питоне.

Цитата(_pv @ Mar 15 2018, 17:14) *
Тут дальше спор будет становиться всё более бессмысленным, потому что похоже что питон я знаю так же хорошо, как вы луа sm.gif

Согласен. sm.gif Поэтому не буду. (Lua изучал поверхностно - исключительно с целью ковырять плагины для mc).
Leka
bb-offtopic.gif
У меня. Давно, работа, первое, что вспомнилось:
- контрольно-измерительные стенды для исследований/отбраковки разработанных интегральных схем
(мелкая серия для внутренних нужд), на базе ПК с многоканальной платой аналого-цифрового ввода-вывода -
все ПО писал сам на Паскале, с выводом на экран графиков, осциллограмм, и тд;
- вспомогательное ПО разработки ИС - на Паскале;
- что-то подсчитать/проанализировать - на Паскале (что сложнее - Maple).
Это все было в дополнение к основной задаче - разработке схемотехники/топологии/методологии ИС
(вел всю цепочку от согласования ТЗ до готового кристалла).

Сейчас, хобби:
- трансляторы своих языков в Верилог - на Паскале;
- обработка данных от ПЛИС - чаще Паскаль, редко Си, еще реже Octave.
- дизайны для ПЛИС - свои языки + Верилог.

Раньше было интереснее - все можно было делать своими руками.
Сейчас инженеры, как роботы на конвейере, называется - "умение работать в команде".
_pv
Цитата(dxp @ Mar 15 2018, 17:37) *
Ну, самодельные костыли всё же не так удобны, безопасны и просты для понимания и использования, как встроенные в язык средства.

это не костыли, а именно средства языка, которые позволяют копать, ну или не копать, надо ООП и наследование - пожалуйста.
Цитата(dxp @ Mar 15 2018, 17:37) *
Выглядеть будет обычно. Конечно, рантайм ему потребуется. У меня есть опыт только с Qt, так вот когда я запускал программу под вендой, мне достаточно было установить питон и PyQt, дальше всё запустилось без вопросов. Для венды придётся слепить инсталлятор, который установит вышеупомянутое, но инсталляторы для венды - обычное дело.

ну то есть для совсем простого приложения которое пусть, например, не знаю id3 tagи от mp3 анализирует/сортирует, но с совсем простым гуём, придётся не одну сотню МБ скачать.
да, объёмы дисков нынче в терабайтах измеряются, а скорости интернета в десятках и сотнях мбит, но как-то всё равно некрасиво.
помнится как-то понадобилось посмотреть некий специфичный софт для расчётов, на питоне, будучи с ним совсем не знаком, сначала по совету сдуру поставил какую-то анаконду, ещё как оказалось не той 2/3 версии.
а потом оно ещё попросило определённую версию MSVC, чтобы какую-то из зависимых библиотек вроде scipy или чего-то похожего пересобрать.
вот это сходил за хлебушком, а надо-то было совсем какую-то простую вещь сделать.
Цитата(dxp @ Mar 15 2018, 17:37) *
Однако на нём успешно пишут приложения (Node.js). И жабоскрипные приложения мне попадались много чаще, чем на луа.

тем не менее не могу назвать ни одно приложение на node.js, которым бы именно приходилось пользоваться.
Цитата(dxp @ Mar 15 2018, 17:37) *
Ну, так вон народ и на Tcl лабает приложения, и объекто-ориентированные, и с гуями... Но, полагаю, вы не будете сторонником этого подхода. sm.gif

да если гуи совсем простые вроде нескольких полей ввода и пары кнопок, то без разницы на чём делать и весь Qt для этого совсем не нужен.
Цитата(dxp @ Mar 15 2018, 17:37) *
О, а я на питон как раз внимание обратил именно из-за того, что эти оба так достали при обработке многострочных текстов. Собственно, питон именно для этих случаев и начал использовать. А потом пошло-поехало - сперва простые утилиты, потом как интерактивная среда для вычислений, исследований, а потом и полноценные GUI приложения. До момента знакомства с питоном утилиты писал на С++, с тех пор исключительно на питоне.

аналогично, только с lua и mathematica пришлось познакомиться из-за femm и radia для магнитостатики, а потом как-то затянуло.
dxp
Цитата(_pv @ Mar 16 2018, 00:33) *
это не костыли, а именно средства языка, которые позволяют копать, ну или не копать, надо ООП и наследование - пожалуйста.

Что сделать-то можно, не сомневаюсь. Вон люди на С в ООП стиле пишут, вполне работает. Но вопрос цены: удобство, безопасность, прозрачность и т.д. Хочется узнать поподробнее, как это выглядит на практике. Например, в питоне класс:

Код
class TSlon
    a = 5
    def __init__(self):
        self.b = 10

...

slon = TSlon()

a = slon.a + slon.b  # a:  15


Далее, наследование:
Код
class TMamont(TSlon):
    def __init__(self):
        super().__init__()

    def add(self, x):
        self.a += x

...

mamont = TMamont()

mamont.add(4)  # mamont.a: 9


Как подобный код выглядит на Lua? Не измерения ради, а правда любопытно, как это реализовывается на языке, где нет встроенной поддержки таких средств.


Цитата(_pv @ Mar 16 2018, 00:33) *
ну то есть для совсем простого приложения которое пусть, например, не знаю id3 tagи от mp3 анализирует/сортирует, но с совсем простым гуём, придётся не одну сотню МБ скачать.

Зачем? Нужен сам питон и графические либы (Qt, wxWidgets или что там используется). В линухах питоны есть "искаропки", для венды придётся скачать. Инсталлятор для 64-битной версии: Python 2.7 что-то порядка 20 МБ, 3.6 - 30 МБ. Далее, сами графические либы - это преимущественно динамические библиотеки (dll/so), они нужны будут в любом случае для любого языка - в т.ч. и для С/С++, если только не собрать статически. Графический фреймворк PyQt5 вытягивается одной командой через pip (типа менеджера пакетов питона).

Для венды питоновое приложение можно собрать с помощью PyInstaller, который родит самодостаточный exe-шник. Да, размер тоже будет не 20 байт, где-то от полутора мегов, насколько помню, давно уже ничего такого не собирал. Не тянет совсем.

Цитата(_pv @ Mar 16 2018, 00:33) *
помнится как-то понадобилось посмотреть некий специфичный софт для расчётов, на питоне, будучи с ним совсем не знаком, сначала по совету сдуру поставил какую-то анаконду, ещё как оказалось не той 2/3 версии.
а потом оно ещё попросило определённую версию MSVC, чтобы какую-то из зависимых библиотек вроде scipy или чего-то похожего пересобрать.
вот это сходил за хлебушком, а надо-то было совсем какую-то простую вещь сделать.

Ну, тут у меня понимания не возникает. Это обычное дело, когда погружаетесь в какую-то область. Отвлечённо: чтобы подвинуть дорожку в печатной плате, разработанной в Altium, таки придётся тянуть и ставить оный пакет. А всего-то хотелось какой-то мелочи.

Anaconda - это сборка Python + набор библиотек для научных расчётов, влючая Numpy, Matplotlib, IDE a-la Matlab Spyder, и прочее. Я предпочитаю ставить все эти штуки по отдельности по мере надобности, но на венде анаконда - пожалуй, единственный нормальный путь, быстро и без лишнего геморроя. И не такая уж она и огромная на фоне современных САПР. Матлаб тот же толще.

Цитата(_pv @ Mar 16 2018, 00:33) *
тем не менее не могу назвать ни одно приложение на node.js, которым бы именно приходилось пользоваться.

Мне вот этим довелось попользоваться. Правда, не всё устраивало, а поправить под себя эффективно не мог (не владею инструментом), поэтому идею позаимствовал и реализовал на питоне. sm.gif

На Lua самостоятельных приложений видеть не доводилось, и ни разу не замечал, чтобы кто-то ими пользовался. А вот встроенные (плагины) - сплошь и рядом.

Согласитесь, что по количеству и разнообразию самостоятельных приложений питон и луа сравнивать не приходится. Как и по количеству встраиваемых (но уже с обратным приоритетом). И это неспроста. Всякому инструменту - своя ниша.

P.S. Я не спора для пишу посты сюда, мне правда интересно. Есть желание научиться встраивать Lua в приложения на C/C++. Если у вас есть подобный опыт, можете посоветовать что-нибудь для старта (ну, ссылки с внятным освещением вопроса или примерчик простейший - типа, программа на С с main, и из неё вызывать функцию на Lua)?
AlexandrY
Цитата(dxp @ Mar 16 2018, 10:52) *
Мне вот этим довелось попользоваться. Правда, не всё устраивало, а поправить под себя эффективно не мог (не владею инструментом), поэтому идею позаимствовал и реализовал на питоне. sm.gif

Хотел бы я посмотреть на реализацию на питоне вот такой идеи - https://habrahabr.ru/post/327628/ .
Похожая тема, но гораздо полезней для разработчиков.

Нет, что ни говорите, а экосистема питона включая либы просто эрзац более продвинутых решений.

В embedded гораздо выгоднее изучать и применять JavaScript.
Он и в микроконтроллеры встраивается, и WEB GUI на нем делают, и кросплатформенные приложения и серверные.
dxp
Цитата(AlexandrY @ Mar 16 2018, 16:35) *
Хотел бы я посмотреть на реализацию на питоне вот такой идеи - https://habrahabr.ru/post/327628/ .

Напишите на питоне и увидите.

Цитата(AlexandrY @ Mar 16 2018, 16:35) *
Похожая тема, но гораздо полезней для разработчиков.

Ни разу не похожая. А похожая лежит тут.

Цитата(AlexandrY @ Mar 16 2018, 16:35) *
Нет, что ни говорите, а экосистема питона включая либы просто эрзац более продвинутых решений.

Если хочется покозырять умением выдрать из pdf данные и сгенерить целевые файлы, вот вам задание:

SoC Xilinx Zynq-7000, вендор не озаботился составлением заголовочных файлов для периферии СнК. Поэтому приходится выполнять эту работу самостоятельлно. Файл документации, вторая его половина содержит таблицы с описаниями регистров кристалла. Задача: распарсить таблицы, извлечь информацию и родить набор заголовочных файлов для всех периферийных устройств.

На питоне эта задача выполнена, результат тут. Три набора файлов (разные стили - макросами, перечислениями и константами).

Покажите всю мощь и мастерство владения дельфями?




AHTOXA
Расскажу, как я применяю питон в embedded.

Если микроконторллер имеет интерфейс для общения с ПК (а зачастую это так), то я использую питон для написания тестов. Все функции обмена реализую в коде на питоне.
Типа: считать текущие значения датчиков, задать параметры работы, изменить скорость опроса, и т. д.

Это мне помогает трижды:
  1. . При написании прошивки - я имею возможность проверить работу прошивки, обмен с ПК, соответствие обмена протоколу и т. д.
  2. . При передаче прошивки программисту прикладного уровня - он сразу видит, как можно работать с устройством.
  3. . При выяснении проблем с программистом прикладного уровня - если он мне говорит, что что-то не работает, я ему говорю -"тест работает, проблемы на твоей стороне" sm.gif


Если программистом прикладного уровня являюсь я (такое тоже случается), то всё равно удобно сначала по-быстрому
накидать тесты на питоне, а уже потом реализовывать полноценную работу на Qt.

Ну и пару раз всякие алгоритмы расчётов/фильтрации обкатывал.
Leka
Цитата(AlexandrY @ Mar 16 2018, 12:35) *
Хотел бы я посмотреть на реализацию на питоне вот такой идеи - https://habrahabr.ru/post/327628/ .

по ссылке: "написал программу в Delphi которая импортирует файл и фильтрует мусор" a14.gif
(сам, правда, использую Delphi, а FPC)

Tpeck
Off
А в питоне можно сделать высокоскоростной модулятор DVBS2 с добавлением АБГШ и отправкой этого счастья по UDP и приема обратно?
Где-то на 5-10 Мбод.
Всем спасибо.
_pv
Цитата(dxp @ Mar 16 2018, 15:52) *
Как подобный код выглядит на Lua? Не измерения ради, а правда любопытно, как это реализовывается на языке, где нет встроенной поддержки таких средств.

Код
TSlon = {}

function TSlon:new(arg1)
  local this = {}
  this.a = 5
  this.b = arg1
  setmetatable(this, {__index = TSlon})   -- при обращении к методам конкретного экземпляра будут взяты методы из таблицы слона.
  return this
end

function TSlon:sub(x)
  self.a = self.a - x
  return self.a
end

setmetatable(TSlon, {__call = TSlon.new})   -- просто синтаксический сахар для конструктора  foo = TSlon(1)  <=>  foo = TSlon:new(1)

slon = TSlon(10)
print(slon.a + slon.b)  -- 15
print(slon:sub(1))      -- 4

TMamont = {}

function TMamont:new(arg1)
  local this = TSlon(arg1)
  setmetatable(this, {__index = TMamont})  
  return this
end

function TMamont:add(x)
  self.a = self.a + x
  return self.a
end

setmetatable(TMamont, {__index = TSlon, __call = TMamont.new}) -- при обращении к методам мамонта, если таквой не найден, пойдём к слону

mamont = TMamont(0)
print(mamont:add(4))     -- 9
print(mamont:sub(1))     -- 8, TSlon:sub



Цитата(dxp @ Mar 16 2018, 15:52) *
P.S. Я не спора для пишу посты сюда, мне правда интересно. Есть желание научиться встраивать Lua в приложения на C/C++. Если у вас есть подобный опыт, можете посоветовать что-нибудь для старта (ну, ссылки с внятным освещением вопроса или примерчик простейший - типа, программа на С с main, и из неё вызывать функцию на Lua)?

"programming in lua" от автора для начала самое оно. предыдущие издания лежат на прямо на lua.org.
найти последнее издание в pdf в интернете тоже не проблема.
да и изменения там не особо принципиальные.

Код
--main.lua
function luafunc (x, y)
  return x + cfunc(y)
end

Код
//main.c
int cfunc(lua_State * L){
  lua_pushnumber(L, lua_tonumber(L, 1) * 2); //взять первый параметр, удвоить и положить обратно.
  return 1;                                  //количество возвращаемых значений
}

void main(){
  lua_State * L = luaL_newstate();
  lua_register (L, "cfunc", cfunc);  //зарегистрировать свою С функцию в lua.
  luaL_dofile(L, "main.lua");  //выполнить луа код
  lua_getglobal(L, "luafunc"); //найти и положить на стэк глобальную луа функцию luafunc
  lua_pushnumber(L, 10);       //затем ещё два параметра
  lua_pushnumber(L, 20);       //
  lua_pcall(L, 2, 1, 0)        //взять эти два параметра со стэка, затем функуцию, позвать её, она в свою очередь позовёт cfunc и потом вернёт 1 значение на стэк
  int z = lua_tonumber(L, -1); //взять его сверху стэка (-1)
  lua_pop(L, 1);               //и почистить за собой
  printf ("%d", z);            //50  =  10 + 20*2
}


ну и есть куча всяких обёрток на плюсах для облегчения общения с lua,
например с автоматическим разворачиванием луа таблиц со стэка в std::map и обратно
Herz
Цитата(Эдди @ Mar 14 2018, 11:59) *
А учитывая то, что у меня рвотный рефлекс на синтаксис пхытона, лучше при мне об этой дряни вообще не говорить (а то могу и заляпать ненароком)!!!

А Вас сюда кто-то силком затащил? Автор попросил поделиться опытом тех, кто применяет Питон в своих разработках. Показать преимущества.
Вы же, в привычной своей манере, вломились в ветку облить помоями то, что Вам не пришлось по душе, и, соответственно, "маст дай".
Коверкая язык и изрыгая ругательства, устраиваете здесь очередной холивар. Этим взрослый человек пришёл поделиться с коллегами?
Я прошу Вас, как минимум, воздерживаться в дальнейшем от участия в этой теме и вообще от грубостей.
И всех присутствующих - не превращать тему в очередной оффтоп.
Leka
Цитата(dxp @ Mar 16 2018, 13:02) *
На питоне эта задача выполнена, результат тут

При беглом взгляде это интерактивная задача, надо глазами проверять формат таблиц для разных устройств.

dxp
Цитата(Leka @ Mar 16 2018, 18:49) *
При беглом взгляде это интерактивная задача, надо глазами проверять формат таблиц для разных устройств.

Формат таблиц там одинаковый, вот наполнение местами отличается - разные люди, видимо, писали для разных модулей. И это была основная проблема - приходилось глазами отсматривать и дополнять исходник (на это основное время и ушло). Но парсинг и генерация сами по себе от этого не зависят, т.ч. задача корректна.

Цитата(_pv @ Mar 16 2018, 17:52) *
"programming in lua" от автора для начала самое оно. предыдущие издания лежат на прямо на lua.org.
найти последнее издание в pdf в интернете тоже не проблема.
да и изменения там не особо принципиальные.

Код
--main.lua
function luafunc (x, y)
  return x + cfunc(y)

<...>

  lua_pop(L, 1);               //и почистить за собой
  printf ("%d", z);            //50  =  10 + 20*2
}

Спасибо за пример. Собрал, запустил, ответ 50. sm.gif Надо осмыслить эту механику со стеком. И понять, как это обернуть, чтобы при использовании было проще.
_pv
Цитата(dxp @ Mar 16 2018, 19:13) *
Спасибо за пример. Собрал, запустил, ответ 50. sm.gif Надо осмыслить эту механику со стеком. И понять, как это обернуть, чтобы при использовании было проще.

помимо просто С функций, тоже самое что со слонами и мамонтами выше, можно делать и из С/С++ кода, в результате с луа можно обмениваться уже классами из с++.
и для этого так же хватает всяких всяких готовых обёрток.
AlexandrY
Цитата(dxp @ Mar 16 2018, 12:02) *
Задача: распарсить таблицы, извлечь информацию и родить набор заголовочных файлов для всех периферийных устройств.
На питоне эта задача выполнена, результат тут. Три набора файлов (разные стили - макросами, перечислениями и константами).
Покажите всю мощь и мастерство владения дельфями?

Я бы рад, но вы здесь здорово присочинили.
Посмотрите документацию по вашей ссылке и там не найдете имен использованных в хидерах.
Вас кто-то ввел в заблуждение. Это на самом деле было сделано вручную, скрипты если и были, то на этапе выравнивания синтаксиса. laughing.gif
dxp
Цитата(AlexandrY @ Mar 17 2018, 16:57) *
Я бы рад, но вы здесь здорово присочинили.
Посмотрите документацию по вашей ссылке и там не найдете имен использованных в хидерах.
Вас кто-то ввел в заблуждение. Это на самом деле было сделано вручную, скрипты если и были, то на этапе выравнивания синтаксиса. laughing.gif

Каких имён?
AlexandrY
Цитата(dxp @ Mar 17 2018, 13:43) *
Каких имён?

Имен регистров.

Но что-то тема заглохла.
Мне показалась интересной идея формировать хидеры из PDF-ов.
И я для начала сварганил вот такой тестер регулярный выражений - https://github.com/Indemsys/Regular-Expression-Tester
Для тестирования реально больших файлов. В десятки мегабайт.

Интересно кто на питоне может так же быстро сделать такой интерактивный тестер.
Кстати потом и по скорости могли бы помериться, как раз на даташитах.
dxp
Цитата(AlexandrY @ Mar 19 2018, 20:32) *
Имен регистров.

В данном случае это не важно - не требуется получить правильную рабочую реализацию. Там нет имён в таблицах только в считанных случаях, в основном они есть. Можно взять модуль, где нет пропусков. Если хочется сделать как следует, то имена можно дописать (так и было сделано в конечном итоге, и это и заняло основное время). Но парсинг таблиц и формирование выходных заголовочных файлов были выполнены скриптом на питоне.

Парсер файлов, аналогичный вашему, на питоне писать не интересно - разбором текста там будет заниматься стандартная библиотека re, которая внутри реализована очень эффективно. GUI лепить тоже интереса нет, как и сохранять всё это в формате M$ Access. На практике куда удобнее и эффективнее пакетная обработка - скормил утилите файл, она выдала результат в виде файла (файлов).

Кстати, приоткрою завесу: формирование заголовочных файлов из того PDF выполнялось именно по такой схеме - пакетно. Конкретно было так: сначала PDF был преобразован в текстовый файл, далее шёл ручной этап - дополнение недостающих имён. И после этого парсинг описаний, таблиц и формирование всех трёх наборов заголовков. Текстовый файл, насколько помню, весил порядка 2.5 МБ (50+ тыс. строк). Никаких проблем не возникло.
mantech
Цитата(AlexandrY @ Mar 19 2018, 16:32) *
И я для начала сварганил вот такой тестер регулярный выражений - https://github.com/Indemsys/Regular-Expression-Tester
Для тестирования реально больших файлов. В десятки мегабайт.


Но дельфя-же уже мертвый язык biggrin.gif
AlexandrY
Цитата(dxp @ Mar 20 2018, 04:59) *
Парсер файлов, аналогичный вашему, на питоне писать не интересно - разбором текста там будет заниматься стандартная библиотека re, которая внутри реализована очень эффективно. GUI лепить тоже интереса нет, как и сохранять всё это в формате M$ Access. На практике куда удобнее и эффективнее пакетная обработка - скормил утилите файл, она выдала результат в виде файла (файлов).

Кстати, приоткрою завесу: формирование заголовочных файлов из того PDF выполнялось именно по такой схеме - пакетно. Конкретно было так: сначала PDF был преобразован в текстовый файл, далее шёл ручной этап - дополнение недостающих имён. И после этого парсинг описаний, таблиц и формирование всех трёх наборов заголовков. Текстовый файл, насколько помню, весил порядка 2.5 МБ (50+ тыс. строк). Никаких проблем не возникло.

В Delphi регулярные выражения - это тоже стандартная библиотека и даже мощнее чем в питоне.
Про GUI я даже не буду спорить. Преимущества GUI в повышении личной производительности очевидны еще со времен Windows 3.1.
А вот роль MS Acсess наверно даже не поняли. Но об этом позже расскажу.

И тоже приоткрою завесу. Чтобы еще быстрее и более автоматизировано парсить PDF-ы их надо переводить в HTML, а не в plain text.
dxp
Цитата(AlexandrY @ Mar 21 2018, 13:03) *
В Delphi регулярные выражения - это тоже стандартная библиотека и даже мощнее чем в питоне.

Пруф насчёт мощнее?

Цитата(AlexandrY @ Mar 21 2018, 13:03) *
Про GUI я даже не буду спорить. Преимущества GUI в повышении личной производительности очевидны еще со времен Windows 3.1.

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

Цитата(AlexandrY @ Mar 21 2018, 13:03) *
А вот роль MS Acсess наверно даже не поняли.

Где уж нам. Очень важная информация в теме про питон. Странно, что кинетис тут не упомянут. Надо исправить этот недостаток и тиснуть об этом статейку на хабре.
AlexandrY
Цитата(dxp @ Mar 22 2018, 01:56) *
Где уж нам. Очень важная информация в теме про питон. Странно, что кинетис тут не упомянут. Надо исправить этот недостаток и тиснуть об этом статейку на хабре.

Почему же не упомянут.
Вот он парсер мануала на Kinetis K66 - 08.gif
Нажмите для просмотра прикрепленного файла
Снята вся информация о 2182 регистрах.
Обработано 170 тыс. строк мануала.
Сами данные никак в ручную не корректируются, все проходит автоматом.
Все имена остаются оригинальными без всякой отсебятины.
Даже ссылки на секции и страницы мануала для каждого регистра даны.
Статейка тоже будет, вот только закончу сертификацию нашей системы на Kinetis.

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

Где там ваш питон? Ау!!
Пруфы в моей утилите, которую дал выше. Берите и сравнивайте.

И как питон можно обсуждать без сравнения с другими технологиями?
one_eight_seven
Цитата
Где там ваш питон? Ау!!

В каком смысле? Что, правда думаете, что для питона нет коннекторов к БД, если уж очень хочется именно БД? Да всё есть, и ODBC, и JDBC, и прямые коненкторы к PostgreSQL, MySQL/MariaDB и прочим. В общем-то, как и для любого другого популярного языка. Вопрос в том, что дельфины уже мало кого интересуют, а питонистов работодатели хотят видеть. По большому счёту, инструмент должен соответствовать задаче, и обеспечивать простую поддержку после того, как разработчик уйдёт. Питон сегодня этим требованиям отвечает, Delphi - нет.

P.S. Да и порог входа в питон - куда ниже, при не уступающих возможностях.
dxp
Цитата(AlexandrY @ Mar 22 2018, 16:46) *
Где там ваш питон? Ау!!
Пруфы в моей утилите, которую дал выше. Берите и сравнивайте.

Вы заявили, что библиотека работы с регулярными выражениями в дельфях круче, чем в питоне (что, конечно, глупость). Вот и докажите это! Например, что библиотека re питона не поддерживает каких-то фич или работает безобразно медленно по сравнению с дельфовой. Но вы этого не сможете сделать, потому что для этого надо знать обе реализации в практическом применении, а вы питоновую не знаете. Заметьте, никто не утверждает, что библиотека питона круче дельфовой. Может это так, может не так, мы не сравнивали, поэтому не можем ничего подобного утверждать. И вы тоже находитесь в такой же ситуации. Просто сказали глупость, почему бы это не признать.

А приводить в качестве доказательства преимущества библиотеки сторонее приложение - это пытаться слить вопрос на левую тему.

С этим вопросом мне всё ясно, продолжать его обсуждать не буду.
AlexandrY
Цитата(one_eight_seven @ Mar 22 2018, 12:12) *
а питонистов работодатели хотят видеть.
P.S. Да и порог входа в питон - куда ниже, при не уступающих возможностях.

А приятно чувствовать себя волшебником, все таки.
Пока один на питоне ковыряет командную строку,
другой в Delphi за то же время делает гибкое GUI приложение с кучей фичей и отдает его просто пользоваться другим, а не заставляет заниматься вхождением, опять ковырянием и решением проблем зависимостей.
При желании тоже дельфинское приложение переносит на смартфон хоть под андроидом, хоть на айфон.

Питон у программистов - это аналог ардуино у хардваристов.
Да, гвалт вокруг ардуино огромный, но K66 (ладно, STM32) дает непередаваемое чувство превосходства. biggrin.gif


Цитата(dxp @ Mar 22 2018, 13:16) *
Вот и докажите это!

Началось с того что вы сделали некий крутой парсер, а исходники не выложили, предложив нам верить.
Сначала исправьте свой косяк.
one_eight_seven
Цитата
А приятно чувствовать себя волшебником, все таки.

Это мнимое чувство.
Цитата
Пока один на питоне ковыряет командную строку,
другой в Delphi за то же время делает гибкое GUI приложение с кучей фичей и отдает его просто пользоваться другим,

Разница в том, что и там, и там можно работать и в командной строке, и делать GUI.

Цитата
и отдает его просто пользоваться другим, а не заставляет заниматься вхождением, опять ковырянием и решением проблем зависимостей.

Это до тех пор, пока не окажется, что это приложение не отвечает задачам. Вот видел кучу говнокода, сделанного по таким же шаблонам. И на крестах, и на Си, и на питонах, и на жабе.
Ну и... Лев Толстой предложил формулу оценки человека: в числителе его действительные достоинства, а в знаменателе - его мнение о себе. Упоротость в отношении языков программирования, и нежелание смотреть на реальное положение дел - это явно не достоинства.
AlexandrY
Цитата(one_eight_seven @ Mar 22 2018, 13:49) *
Разница в том, что и там, и там можно работать и в командной строке, и делать GUI.

Вопрос не в том можно или нельзя.
А в том почему бы вам не показать это самому здесь и сейчас. И не нужно было бы лишних слов.
Примеры убеждают лучше всего.

Идея делать хидеры из pdf-ов однако благодатная.
Сейчас я в хидеры рядом с регистрами буду вставлять вот такие строки коментов:
Код
// "file://M.cmd 211"

А содержимое файла M.cmd такое :
Код
start  /d "C:\Program Files (x86)\FOXIT SOFTWARE\FOXIT READER" /b FoxitReader.exe  D:\Embedded_uC\Kinetis\MK66\K66P144M180SF5RMV2.pdf /A page=%1


Таким образов в SlickEdit кликая на коммент в сорсах сразу открывается pdf мануал на нужной странице.
Это лайфхак такой. biggrin.gif
one_eight_seven
Цитата
Идея делать хидеры из pdf-ов однако благодатная.

Не в моей области. В моей области и в документацию (в том числе и pdf), и в header'ы для драйверов, и в тестбенчи, и в исходный код это всё попадает из одного первоисточника.
esaulenka
Господа, у меня вопрос, раз уж тут собрались специалисты по скриптовым языкам.

Есть железка, есть программа на Qt (моего авторства). Они обмениваются пакетами, в Qt-шной программе есть класс "пакет".
Для тестов регулярно приходится писать логику вида "если получили пакет А, а перед этим в пакете Б был флажок, то через 100 миллисекунд отправить пакет В".
Сейчас оно написано на C++ и скомпилировано с основной Qt-шной программой, для выбора нужного теста банально вызывается нужная функция.

Вопрос: как бы вынести этот функционал наружу в скрипты? QtScript пробовал, как-то криво оно связывается с плюсовой частью...
_pv
Цитата(esaulenka @ Mar 27 2018, 23:02) *
Вопрос: как бы вынести этот функционал наружу в скрипты?

если не понятно какой язык выбрать, берите lua.
только, пожалуй, не надо сразу какой-нибудь swig пытаться прикрутить особенно если
класс "пакет" один и не сильно большой.
лучше ручками хотя один раз бы проделать, для понимания как оно устроено.
хотя что-нибудь вроде https://github.com/vapourismo/luwra может жизнь облечить.
dxp
esaulenka, если хотите именно встроенный скриптовый движок, то, как уже сказали, Lua или Squirrel. Альтернативный путь - переписать (портировать) программу на PyQt5 (Python), тогда процесс написания, сопровождения, модификации всего приложения изрядно упрощается. Внешне это будет то же самое, работает без тормозов. Какой вариант предпочтительнее - сугубо выбор разработчика.
Kabdim
Цитата(AlexandrY @ Mar 22 2018, 12:46) *
Вот он парсер мануала на Kinetis K66 - 08.gif

Там svd файла что ли не было?
XVR
Цитата(esaulenka @ Mar 27 2018, 19:02) *
Вопрос: как бы вынести этот функционал наружу в скрипты? QtScript пробовал, как-то криво оно связывается с плюсовой частью...
Хм. Если унаследовать класс от QObject и написать слоты для всего, что хочешь передать в скрипт назвать 'криво связывается', то я уж и не знаю, что будет 'не криво' wacko.gif

Если очень хочется попробовать силы в велосипедостроении - то вперёд, в lua. Тут уже насоветовали
_Pasha
Доброго времени суток
как-то понадобилось переставить символы в строке задом наперед, столкнулся с
Код
>>> s='qwertyuiop'
>>> s[::-1]
'poiuytrewq'

сам бы никогда не догадался.
как работает (синтаксически) эта конструкция? s[::-1]
halfdoom
Цитата(_Pasha @ Apr 9 2018, 08:22) *
как работает (синтаксически) эта конструкция? s[::-1]


Последний параметр задает шаг -1, что эквивалентно последовательности:

Код
"123"[-1:] + "123"[-2:-1] + "123"[-3:-2]


Как и многие вещи в Питоне, это не работает со строками в юникоде, в Ruby все проще и понятнее (и работает хоть с иероглифами):

Код
"我爱你".reverse
=> "你爱我"
SSerge
Цитата(halfdoom @ Apr 9 2018, 14:22) *
Как и многие вещи в Питоне, это не работает со строками в юникоде, в Ruby все проще и понятнее (и работает хоть с иероглифами):

Это только у веб-программистов не работает потому что они вынуждены до конца своих дней оставаться на второй версии.
Нажмите для просмотра прикрепленного файла
alexunder
Цитата(halfdoom @ Apr 9 2018, 09:22) *
Как и многие вещи в Питоне, это не работает со строками в юникоде, в Ruby все проще и понятнее (и работает хоть с иероглифами):

Нажмите для просмотра прикрепленного файла
_Pasha
чёт я не пойму, в чем должно быть что то не так
Код
Python 2.7.12+ (default, Sep 17 2016, 12:08:02)
[GCC 6.2.0 20160914] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s=u'العَرَبِيَّة'
>>> s[::-1]
u'\u0629\u0651\u064e\u064a\u0650\u0628\u064e\u0631\u064e\u0639\u0644\u0627'
>>> s
u'\u0627\u0644\u0639\u064e\u0631\u064e\u0628\u0650\u064a\u064e\u0651\u0629'
>>>



Цитата(Эдди @ Mar 14 2018, 12:59) *
А учитывая то, что у меня рвотный рефлекс на синтаксис пхытона, лучше при мне об этой дряни вообще не говорить (а то могу и заляпать ненароком)!!!

я тоже долго плевался на case sensitivity (казалось бы - ну все для пространства имен есть - зачем этот ужас оставлять????) - и на пробелы вместо табуляций.
в итоге - с пробелами так и не могу смириться. количество ошибок при написании в заточенных под питон редакторах в разы выше чем в например geany
может есть какой-то секрет в части пробелов? не могу. не воспринимается. (шел 6й год питонизма)
специально для pep8 когда просили - делал замену tab=4spaces - понятное дело ))))))
AHTOXA
Цитата(_Pasha @ Apr 10 2018, 10:09) *
чёт я не пойму, в чем должно быть что то не так

Питон нужен третий sm.gif
halfdoom
Цитата(AHTOXA @ Apr 10 2018, 09:49) *
Питон нужен третий sm.gif


Это да, только в третьей(!) версии снизошли до этого. Учитывая еще несколько заметных изменений, питоны 2 и 3 можно считать похожими, но разными языками. Что, собственно, и подтверждается отказом некоторых разработчиков адаптировать свой код к питону 3.

Но если эти несовместимости еще как-то можно обходить, то фундаментальные проблемы с зависимостью синтаксиса от форматирования и необходимости указания "self." там, где оно не очень нужно, исправить уже не получится. Ну, разве что, выпустив еще одну несовместимую версию.
_Pasha
Код
Python 3.5.2+ (default, Sep 22 2016, 12:18:14)
[GCC 6.2.0 20160927] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s=u'العَرَبِيَّة'
>>> s.encode('utf-8')
b'\xd8\xa7\xd9\x84\xd8\xb9\xd9\x8e\xd8\xb1\xd9\x8e\xd8\xa8\xd9\x90\xd9\x8a\xd9\x8e\xd9\x91\xd8\xa9'
>>> s[::-1].encode('utf-8')
b'\xd8\xa9\xd9\x91\xd9\x8e\xd9\x8a\xd9\x90\xd8\xa8\xd9\x8e\xd8\xb1\xd9\x8e\xd8\xb9\xd9\x84\xd8\xa7'

переставляет
при непосредственном отображении - живет своей жизнью.
но видимо, с питоном это совершенно не связано
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.