Ого, у вас тоже неплохой прогресс за короткий срок! Ваш пример сам по себе тянет на отдельную статью.
Спасибо! Я планирую статью на Хабре, как только более-менее сформируются результаты.
Кстати, большую часть времени в освоении Питона я потратил на выбор подходящей IDE. После IDE из Visual Studio, они как-то бледно смотрятся, даже PyCharm. В итоге решил, что проще писать код в Notepad++ и компилировать в консоли, а если скрипт нужно будет исследовать в отладчике, то тогда применять PyCharm, Wing-101 или даже IDLE. А для консоли в Python3, довольно долго выяснял, как запустить целиком питоновский скрипт. Оказалось, что есть 4 или 5 способов, из которого я выбрал «хакерский» вариант:
exec(open('Script.py', encoding='utf-8').read())
А так, просмотрев примеры кода по открытию и записи файлов, работы со списками и словарями и т.п., а также используя аналогию из С++, можно понять синтаксис Питона достаточно быстро, за считанные дни. Далее, в процессе работы, смотрим офлайновые и онлайновые справочники, вроде aliev.me/runestone.
Интересно почитать про опыт изучения Питона, поскольку я сам только что начал учить его. Наверное, еще и недели не прошло.
Хочешь изучить Python – найди ему применение, пиши код каждый день.
Как бы не хотелось это признавать, но изучение Python по книгам – не лучшая идея.
Полностью согласен! Книги удобно использовать как справочник либо когда нужна начальная информация, чтобы написать и выполнить свою первую программу.
Сам я пришел в Питон из С++. Но я не профессиональный программист, просто любитель. С++ мне очень нравится и я уходить из него никуда не собираюсь.
Необходимость в Питоне возникла в силу борьбы с нарастающей сложностью «приплюснутых» проектов. Я начинал делать несколько проектов, но рано или поздно возникали проблемы развития и модифицирования кода. Что-то забывал, что-то не до конца понимал и т.п.
В итоге решил, что надо менять свой подход к программированию. После некоторых размышлений остановился на идее итерационного модульного программирования. Идея простая, нужно вносить изменения только во внешние файлы данных, как я их называю, «реплики изменений». А первоначальный файл, с кодом для проекта, пишу вручную в так называемом файле «предисходников». Затем пишу скрипт на Питоне, который из нулевой итерации предисходников и первой итерации реплик изменений формирует, как первую итерацию предисходников, так и первую итерацию файлов проекта, которые уже будет компилировать С++.
Так что, моя первая реальная программа на Питоне уже умеет генерировать первую итерацию предисходников. Сегодня, надеюсь, сгенерировать первую итерацию исходников.
Главной проблемой для меня оказался даже не Питон, он прекрасно справляется со своей задачей, а структура файлов данных для предисходников и реплик изменений, содержащих, в т.ч., команды для скрипта на Питоне.
Пока, вроде бы, удалось найти подходящий формат данных, хотя, не исключаю, что он будет еще модифицироваться.
Таким образом, Питон вполне подходит для моих задач, и я с удовольствием его осваиваю.
Я решила совместить два моих минуса – плохое запоминание английских слов и неидеальное владение Python – и получить из них плюс. Был написан скрипт, который выводит рандомные слова из заранее подготовленного списка и проверяет введенный мной перевод.
О-о-о! Тоже интересная тема для меня. Только у меня другой подход. Я пишу обучающую программу на С++ для изучения французского языка. Которым я заинтересовался из-за французской певицы ZAZ. В качестве основы предполагаю использовать обучающие ролики «Easy French» и аналогичные, в том числе из французского TV «7jours», использующих встроенные французские субтитры. Сами субтитры пытаюсь распознавать и дополнить русским переводом. Работать со всем этим хозяйством намерен в собственном видеопроигрывателе, скомпилированном на базе консольного опенсорного файла «FFplay.c». Что-то уже получается, но работы еще много.
Статья отличная. Чувствуется литературный профессионализм. В связи с этим вопрос, не задумывался ли автор о литературной карьере? Про тех же хакеров, например. Они ведь далеко забрались, есть даже книга Андрея Реутова, «Хакеры сновидений», впечатляет. А кое-какие процессы, описанные в книге, я наблюдал в Интернете.
У меня есть статья здесь: «Hello, World!» для начинающих литераторов ( habr.com/ru/post/342512 ). Жаль, нет времени развивать эту тему. А так я вижу много сходств между программированием и литературой. И даже по части хакерских методов. Можно, скажем, «декомпилировать» литературное произведение, вычислить его структуру и шаблоны, заменить своей фактурой и получить другое произведение. А если еще модифицировать паттерны произведения, то сходства не заметит даже родной автор :).
– По специальному алгоритму входной массив разделяется на подмассивы.
– Каждый подмассив сортируется сортировкой вставками.
– Отсортированные подмассивы собираются в единый массив с помощью модифицированной сортировки слиянием.
Принципиальные особенности алгоритма в деталях, а именно в алгоритме разделения и модификации сортировки слиянием.
Да, основные различия в деталях реализации. У меня опубликована рабочая версия, демонстрирующая работу внешней сортировки реального dbf-файла. Кроме этого, вычислена средняя длина упорядоченной подпоследовательности в случайной, равномерно распределенной последовательности (равная 2e – 3) и показана наихудшая (зигзагообразная) последовательность для сортировки этим алгоритмом. Также показана зависимость работы алгоритма от двоичного разложения количества упорядоченных подпоследовательностей в искомой последовательности. У Тима Петерсона этого в явном виде нет, но есть субалгоритм «Галоп», которого нет у меня.
А с учетом широкого использования алгоритма TimSort, автору публикации можно было включить его в свой курс обучения. Причем разные источники помогут лучше понять суть данной сортировки.
Object Professional это не язык программирования, а библиотека от TurboPower Software
По ссылке можно скачать исходники, которые они при закрытии выложили в открытый доступ (но не Object Professional).
Я же в скобках указал Pascal. Понятно, что речь шла о библиотеке, которая до этого распространялась только в бинаринках. Но мы купили именно Object Professional, v. 1.02. Даже книги были.
Кроме этого мы еще купили исходники стандартной библиотеки Си (до 1995 года еще), типа код функций printf и т.п., но меня разочаровало отсутствие там исходного кода для работы с графикой.
ЯП же называется Object Pascal от Борланд, есть коллизия с версией от Эппл.
В литературе, которая шла с исходниками, речь была только о паскале. Может и были какие-то нюансы, но я их не заметил, хотя успел написать серьезную программу, с использованием кода Object Professional, v. 1.02.
Могу только пособолезновать такому жизненному пути (
Сейчас актуальны искусственный интеллект и 3d-моделирование. Вы занимаетесь этими вещами? Нет? Тогда тоже сочувствую. Какие такие собственные преимущества вы имеете в виду?
Не зная даже названия ЯП....(Object Professional)
О! Это очень прикольная штука на заре заката MS-DOS. DOS уже уходил в небытие и фирмы спешно продавали исходный код своих программ за символические деньги (до этого библиотека распространялась только в бинарниках). Мы купили эти исходники и я даже успел наваять одну серьезную программу. Object Professional поддерживала работу резидентных программ и доступ к расширенной памяти, что во времена MS-DOS было очень актуально. Получалось очень круто по тем временам, но вскоре пришла Windows 95/98 и DOS стал постепенно отмирать.
А так еще приходилось иметь дело с VB.NET, интересная система, но .NET, как и COM не стали слишком уж популярными.
Это замечательно, но мы, вроде как, об обучении говорим? И выше как раз было о том, что университетские знания не должны быть бесполезными для «реального программирования». Так вот WTL подавляющему большинству не пригодится.
Т.е., выходит я занимаюсь «не реальным программированием»? Меня же никто не принуждает, сам пришел к необходимости освоения WTL, значит, потребность была немного более чем абстрактный интерес.
Кстати, вы же изучение Qt или wxWidgets не отрицаете, видите в этом пользу. А WTL это тоже самое, только легковесное. Разве программист обязан делать только монструозные программы? Тем более что один и тот же результат, что для Qt, что для WTL можно получить сопоставимыми усилиями. Разница только в объеме конечной программы.
Более того, можно вообще поставить задачу создания интерфейсного контейнера, как я его называю, в виде некоего мастера. Допустим, вам дали задачу перенести данные из одной системы (формата) в другую. Вы быстренько наваяли какой-нибудь sql-скрипт с элементами пред и постобработки, вручную завели исходные параметры, выполнили, получили результат. Завтра другие данные и параметры, вы вручную меняете их и снова получаете результат. И так каждый раз. У меня лично подобных программ по разовой конвертации данных сотни, если не тысячи.
Вот сидишь и думаешь, нафига козе баян? А так берешь наш мастер по генерации произвольного интерфейсного контейнера, в автоматическом режиме генеришь код, добавляешь туда содержательную часть и у вас получается программа вполне товарного вида, от которой пользователи будут просто пищать. А усилий минимум. Профит? Вполне!
Или возьмем ту же программу 1С77. Ее все не любят, она давно морально устарела, но часто – густо более предпочтительна, чем 1С82 или 1С83. Она на порядок дешевле, непритязательна к ресурсам, легко поддерживается и программируется, поэтому для учета на средних предприятий, особенно в случае таких непризнанных республик, как ЛНР / ДНР просто идеальное решение.
Но почему бы не пойти дальше и не сгенерировать интерфейсный контейнер а-ля 1С77, только на более современном уровне, в т.ч., для 64-х битных платформ. В качестве движка базы данных можно взять опенсорсный SQLite, навигацию по данным делать с помощью MMF, а поддержку отчетов использовать на первых порах опенсорсную.
В общем, проблем с содержательной частью у меня не было, прототипы работали вполне успешно. Однако проблемы возникли на уровне интерфейса, поскольку стандартный Windows интерфейс оказалось для всех нелюбимым дитем, соответственно, чтобы сделать конфетку надо хорошо повозиться (так как мастера генератора интерфейсных контейнеров пока нет).
Кстати, бизнес логику удобно вынести на уровень плагинов, так чтобы каждый мог добавлять в программу нужный модуль. Отсюда мы плавно переходим к модульному учету, который вполне востребован на разных уровнях, на всех предприятиях. Речь не идет об альтернативе для корпоративных пользователей, только для малых и средних предприятий, коими 1С просто тупо перестала заниматься.
И после этого фразы типа: «Так вот WTL подавляющему большинству не пригодится» выглядят несколько наивно :). Хотя, по сути, вы правы, всем не нужно. Народу нужен результат, а результат должны дать программисты, а они вправе желать облегчить себе генерацию шаблонного кода. А спрос для подобных программ я лично у себя в ЛНР (и не только) всегда найду. Вот почему я кровно заинтересован решить проблему пользовательского интерфейса на приемлемом для себя уровне.
ядро/бэкенд лучше написать один раз — это и поддерживать будет проще
Пересборкой своих и чужих программ приходится заниматься постоянно. Я бы даже назвал это методом освоения и совершенствования программирования. Поэтому насчет «один раз» весьма спорно, если вы конечно не гений программирования.
Любопытно было бы услышать подробности. В чём выражается это «очень большой»? В микроконтроллер не влезает? Или просто занимает на пару мегабайт больше, чем хотелось бы?
Естественно, дело не объеме выходного кода, хотя если размер можно уменьшить на порядок, без потери качества, то почему бы этого не сделать? Скорее речь идет о понимании используемого опенсорса. Qt объемный в смысле освоения, но если следовать в парадигме стиля программирования Qt, то проблем как бы не возникает. Нюансы появляются, когда что-то хочешь сделать по своему, что не является стандартным для Qt. Можно это сделать? Конечно можно! Только надо знать как.
Поэтому вопрос в данном случае чисто прагматический. Да, Qt очень мощный и там можно делать все. Особенно мне нравится, что он поддерживает SQLite на уровне встроенного драйвера, а также контрол «форма списка» или грид. Это лучший опенсорсный грид, который я видел. Тем не менее, у меня и здесь есть собственные нюансы. Во-первых, SQLite мне нужен только для создания и поддержки индексов, а для юзания базы данных (типа sdf – simple data format) я хочу использовать технологию MMF (отличнейшая вещь, у меня даже статья на codeproject.com есть на эту тему). А по гриду я хочу иметь универсальный контрол, общий и для формы списка и для формы элемента (диалога) и для печатной / табличной форм. А экспериментировать с этим лучше в «чистой» системе, т.е., не такой сложной как Qt, поэтому WTL – идеальное решение.
Прошу прощения, если я вас обидел, или задел какие-то чувства. Цели у меня такой не было. Однако я ценю ваш заинтересованный ответ.
Насчет 5-го или 7-го класса спорить не буду, но ощущения знакомства с квадратными уравнениями у меня очень ранние.
Насчет, «куда же нас занесло», это нормально. По основной теме как бы уже все сказано, добавить особо нечего, поэтому либо «а поговорить» либо подождать публикации другой, более соответствующей статьи.
По задачке, «физической интерпретации» особо никакой нет. Речь идет просто об избыточном корне квадратного уравнения. У нас в школе их называли «паразитными». Скажем так, уравнение Шредингера может быть записано без паразитных корней для постоянной Планка, присутствующей в первой степени. Но это будет не одно уравнение, а несколько. Путем математических преобразований из нескольких уравнений получено одно, соответственно добавился лишний корень для h (типа, из х = 1 получаем x^2 = 1 и избыточный корень х = –1). При этом избыточные корни отсекаются за счет краевых условий, поэтому подобная форма УрШ вполне всех устраивает.
Однако если для данного уравнения Шредингера известно решение для пси-функции, то подставив его в выражение для h (в виде формального решения квадратного уравнения), то мы получим первое значение для известной постоянной Планка, в виде константы, а второе в виде некой функции. И так будет всегда. Т.е., второе значение для h никогда не будет константой, только функцией. Понятно, что подобная функция (причем, всегда разная для разных начальных условий) не может являться решением и явно представляет из себя паразитное значение.
Как видите, особого физического смысла здесь нет, уравнение подобного типа в физике может встречаться и в других моделях, анализ, по сути, чисто математический.
Не понимаю к чему это. В квантовой физике я понимаю примерно ничего, проблема наличия решения уравнений Навье-Стокса лежит исключительно в области математики, никак не касаясь физики. Давайте не уходить в оффтопик.
Там квантовая механика, дана, как я написал, «для маскировки». По сути, чтобы напугать, а не в силу особой необходимости. Поэтому проблема чисто математическая, а не физическая. Физики там не больше, чем в уравнении жидкости в трехмерном пространстве, то бишь, Навье-Стокса. Модель имеет физические истоки, но стала чисто математической. Так и в указанной задачке для пятого класса. Для ее решения достаточно школьных знаний, возможно советских времен, а не российских. Странно, немного, что проблему Навье-Стокса вы понимаете лучше, чем эту достаточно простую задачу.
Однако могу вас утешить, впервые я обратился за разъяснениями к своему физику-семинаристу, в первом ВУЗе, ученику Капицы. Он любил задалбливать нас трехмерными интегралами из гидродинамики, но по этой задачке сказал, что здесь должна быть ошибка, но где, ищи сам. Потом, обратился к одной даме физику, случайно оказавшейся напарницей по автобусу. Она тоже не смогла ответить по существу. И только студент мехмата второго курса, который оказался моим напарником по комнате в общежитии МГУ, ответил четко и правильно, причем быстрее, чем я даже успел сформулировать эту задачу. Даже раздосадовало немного, что все оказалось так просто.
Я сам предпочитаю десктопные приложения повсеместному уходу в веб, но надо быть реалистом: на WTL/ATL сейчас очень мало что пишут (а уж начинать проект с прицелом на эти технологии так вообще почти никто не будет). Да и кроссплатформенность сейчас более актуальна.
Я могу себе позволить не обращать внимания на моду. Да и выражение такое есть, если хотите добиться успеха, идите туда, где никого нет. Этот принцип меня вполне устраивает.
Что касается кроссплатформенности, то проще переписать программу с нуля, чем сразу поддерживать «коня и трепетную лань». Тем более что необходимости осваивать другие платформы, пока нет.
Мне кажется, что вы зацикливаетесь на устаревшей технологии с которой любите (или вынуждены) иметь дело и экстраполируете это на всю индустрию. Если уж писать гуй на С++, то лучше Qt взять что ли.
Я работал с Qt, он мне нравится, но он очень большой для моих целей. Потом взял систему попроще, wxWidgets, тоже милая вещь, но тоже великовата для меня. Потом нашел WTL и это оказалось то, что мне нужно. Есть еще легкий опенсорсный Win32++, как заменитель MFC, однако WTL мне импонирует больше.
Никогда не считал, что это задача мне по силам (если она вообще кому-то по силам), но интересно же.
Ну, если вам нравится теоретическая физика, то давайте обсудим что-нибудь попроще.
Вот школьная задачка, на квадратные уравнения (которые мы проходили в пятом классе). Нужно найти ошибку в рассуждениях. Правда, содержимое будет из квантовой механики, но это для маскировки :).
Общее уравнение Шредингера (УрШ) можно рассматривать как квадратное уравнение относительно постоянной Планка h. Решаем его, получаем формально два корня. Но постоянная Планка то одна, поэтому либо дискриминант квадратного уравнения равен нулю, либо у постоянной Планка есть второе фундаментальное значение. Оба случая интересны. В первом варианте получаем из одного уравнения два, что упрощает решение и анализ УрШа. А, во втором, делаем научное «открытие», постоянная Планка имеет два разных значения. Ура, товарищи! Куда обращаться за Нобелевской Премией? :)
Вы мне предлагаете поспорить о вкусах. Я знаком с проблемами и сложностями проектирования GUI, не интересно.
Ну, на нет и суда нет. Верю, что вам не интересно, плохо не это, плохо то, что это никому не интересно. Книги на эту тему всего лишь пережевывание MSDN. Однако мне интересно, поэтому, хотя бы одна книга, написанная на данную тему, увлеченным автором должна быть. Поэтому, как накоплю достаточно практического опыта, так и опубликую свой опус. А потом посмотрим, заинтересуется ею хоть кто-нибудь.
Не знаю будет ли это хорошим примером, но интересна ли вам проблема числа 10958?
Не интересна! Когда я был маленьким, море подобных задач публиковалось в журнале «Наука и Жизнь». Тогда это было хоть немного интересно. А сейчас…
Вот смотрите, я придумал новый алгоритм внешней сортировки «естественным слиянием» ( emery-emerald.narod.ru/Cpp/2E1562.html ), который использует частичный порядок даже в произвольных последовательностях. Самое интересное, что случайная последовательность обладает частичным порядком больше минимального, который теоретически равен 2! А именно, после обсуждения на форуме математиков dxdy.ru, удалось доказать, что средняя длина упорядоченной подпоследовательности L для равномерно распределенной случайной последовательности данных равна: L = 2e – 3 = 2.436563656918.
Поэтому, если хотите решить задачу числа 10958, обратитесь на этот форум, очень вероятно, что вам помогут. Недавно я там обсуждал тему, связанную с распознаванием встроенных субтитров обучающих видео: «Как группировать бинарные матрицы по степени их похожести?» ( dxdy.ru/topic142232.html ). В результате нашел подходящий алгоритм решения, не связанный с OpenCV.
Или доказательства/опровержения существования и единственности решения системы уравнений Навье-Стокса?
Это вы собираетесь доказать экспериментально, с помощью компьютерного моделирования?
Вы сами только что ответили «Я не хочу Си, я хочу С++.». Все дальнейшие разговоры непродуктивны, как и непродуктивны выши комментарии к данному посту.
Претензия ко всем туториалам, для начинающих, это увлечение консольными приложениями в ущерб оконным. Зачем ломиться в открытую дверь? С консольным программированием нет проблем, когда примеров учебного кода порядка 99%. Если бы ваш любимый «D» дал бы примеры нетривиального подхода к программированию пользовательского интерфейса, то это было бы интересно всем, кому уже надоела консоль.
Я лишь прокомментирую «Зачем мне «умножать сущности без необходимости»?». Это надо делать, чтобы быть профессионалом. Недостаточно знать один язык, надо знать около 5 языков.
А кто вас сказал, что я не знаю «5 языков»? Пожалуйста, Ассемблер (MASM-32) (можете посмотреть мои статьи на erfaren.narod.ru ), Object Professional (Pascal), Adobe Action Script (AS3) ( scholium.webservis.ru ), Visual FoxPro 9 и C++ (с фреймворками), наконец. Кстати, кормит меня 1С и VFP-9.
А С++ это язык для удовольствия.
У D есть много интересных решений, которые сделают вас лучшим специалистом, особенно, если вы пишете код на С++.
Интересного есть много где. Мои задачи мне поможет решить С++ / WTL, а не «D». А курс «Программирование пользовательского интерфейса на С++ / WTL / ATL» в университете, не исключено я буду вести лично, благо образование позволяет.
У D действительно не так много библиотек как у C/C++. Но любые С либы можно использовать в D т.к. этот язык ABI совместим с С
А зачем? Я не хочу Си, я хочу С++. Для меня это идеальный язык программирования. Зачем мне «умножать сущности без необходимости»?
Что касается опенсорсных библиотек, веб фреймворк vibe.d и mir-algorithm приходят на ум. У D около 1.8к пользовательских библиотек, не говоря об очень большой стандартной библиотеке.
Вы меня сможете заинтересовать, если покажите пример опесорса, типа «2С» (достаточно одного только интерфейса, без содержательной части), но сделанного красиво и удобно. Главные требования: MDI, закладки (табы) окон, грид (форма списка), поддерживающий группы элементов, как в 1С77 и согласованный с деревом (TreeView), удобные настраиваемые панели инструментов, а также полноценные локальные меню в дочерних окнах, поддержка ГУИ-шной мультипоточности и т.п.
Это на ваш взгляд, а для меня нет хуже задачи, чем GUI. Занимался им на Qt и на Flash. Я верю, что вам и многим другим нравится, но на нём свет клином не сошёлся.
Вполне верю, но у вас просто не было амбициозной задачи, требующей хорошего интерфейса. Вот, я только что написал в соседней реплике: «Для примера, сделайте аналог интерфейса пользователя (но более современно выглядящий) для учетной платформы 1С77. Не надо движков баз данных, макетирования отчетов, запросов и т.п. Сложно это или просто? С учетом любых доступных систем программирования и опенсорса. Можно посмотреть в сторону опенсорса «2С», но там ужасная реализация GUI на MFC. Если сделаете, цены вам не будет. А все остальное мы уже «припердолим» сами :) .»
Про опенсорс согласен, хотелось бы больше. Не хватает какой-то библиотеки, которая подняла бы D своей популярностью. Я надеялся, что vibe.d станет ею, но разочаровался — удобно, но не быстро, не хватает какой-то изюминки.
Как по мне, то С++ с существующими фреймворками вполне хорош! Поэтому лично у меня нет потребности в другом языке программирования. Я много чего перепробовал, но остановился на С++ / WTL ( возможно еще ATL). Все остальное – опенсорс, которого более, чем достаточно, успевай только осваивать. Super!
А какое отношение этот опус имеет к университетскому программированию?
А что университетское программирование это типа учебного, т.е., ненастоящего программирования? Чтобы, придя на предприятие, сказали: «Забудьте все то, чему вас учили!»?
А так, мое мнение, программистам надо давать отдельный курс, вроде: «Программирование пользовательского интерфейса на С++ / WTL / ATL», вплоть до программирования собственных контролов, типа форм списков. Вообще, почти все стандартные контролы Windows требует «напильника», чтобы довести их до ума. Те же закладки для MDI-окон, вроде не сложно, но хороших примеров нет, а то, что есть, имеет явно избыточный вес.
Впрочем из GUI на D лично я собирал еще в 2014г демки с разными библиотеками — DWT, GtkD, DFL. Недавно — с DlangUI
Это все опенсорс, включая компилятор и стандартную библиотеку.
Не интересно GUI вообще, интересно иметь легкий рабочий вариант. Для примера, сделайте аналог интерфейса пользователя (но более современно выглядящий) для учетной платформы 1С77. Не надо движков баз данных, макетирования отчетов, запросов и т.п. Сложно это или просто? С учетом любых доступных систем программирования и опенсорса. Можно посмотреть в сторону опенсорса «2С», но там ужасная реализация GUI на MFC. Если сделаете, цены вам не будет. А все остальное мы уже «припердолим» сами :).
Спасибо! Я планирую статью на Хабре, как только более-менее сформируются результаты.
Кстати, большую часть времени в освоении Питона я потратил на выбор подходящей IDE. После IDE из Visual Studio, они как-то бледно смотрятся, даже PyCharm. В итоге решил, что проще писать код в Notepad++ и компилировать в консоли, а если скрипт нужно будет исследовать в отладчике, то тогда применять PyCharm, Wing-101 или даже IDLE. А для консоли в Python3, довольно долго выяснял, как запустить целиком питоновский скрипт. Оказалось, что есть 4 или 5 способов, из которого я выбрал «хакерский» вариант:
А так, просмотрев примеры кода по открытию и записи файлов, работы со списками и словарями и т.п., а также используя аналогию из С++, можно понять синтаксис Питона достаточно быстро, за считанные дни. Далее, в процессе работы, смотрим офлайновые и онлайновые справочники, вроде aliev.me/runestone.
Полностью согласен! Книги удобно использовать как справочник либо когда нужна начальная информация, чтобы написать и выполнить свою первую программу.
Сам я пришел в Питон из С++. Но я не профессиональный программист, просто любитель. С++ мне очень нравится и я уходить из него никуда не собираюсь.
Необходимость в Питоне возникла в силу борьбы с нарастающей сложностью «приплюснутых» проектов. Я начинал делать несколько проектов, но рано или поздно возникали проблемы развития и модифицирования кода. Что-то забывал, что-то не до конца понимал и т.п.
В итоге решил, что надо менять свой подход к программированию. После некоторых размышлений остановился на идее итерационного модульного программирования. Идея простая, нужно вносить изменения только во внешние файлы данных, как я их называю, «реплики изменений». А первоначальный файл, с кодом для проекта, пишу вручную в так называемом файле «предисходников». Затем пишу скрипт на Питоне, который из нулевой итерации предисходников и первой итерации реплик изменений формирует, как первую итерацию предисходников, так и первую итерацию файлов проекта, которые уже будет компилировать С++.
Так что, моя первая реальная программа на Питоне уже умеет генерировать первую итерацию предисходников. Сегодня, надеюсь, сгенерировать первую итерацию исходников.
Главной проблемой для меня оказался даже не Питон, он прекрасно справляется со своей задачей, а структура файлов данных для предисходников и реплик изменений, содержащих, в т.ч., команды для скрипта на Питоне.
Пока, вроде бы, удалось найти подходящий формат данных, хотя, не исключаю, что он будет еще модифицироваться.
Таким образом, Питон вполне подходит для моих задач, и я с удовольствием его осваиваю.
О-о-о! Тоже интересная тема для меня. Только у меня другой подход. Я пишу обучающую программу на С++ для изучения французского языка. Которым я заинтересовался из-за французской певицы ZAZ. В качестве основы предполагаю использовать обучающие ролики «Easy French» и аналогичные, в том числе из французского TV «7jours», использующих встроенные французские субтитры. Сами субтитры пытаюсь распознавать и дополнить русским переводом. Работать со всем этим хозяйством намерен в собственном видеопроигрывателе, скомпилированном на базе консольного опенсорного файла «FFplay.c». Что-то уже получается, но работы еще много.
У меня есть статья здесь: «Hello, World!» для начинающих литераторов ( habr.com/ru/post/342512 ). Жаль, нет времени развивать эту тему. А так я вижу много сходств между программированием и литературой. И даже по части хакерских методов. Можно, скажем, «декомпилировать» литературное произведение, вычислить его структуру и шаблоны, заменить своей фактурой и получить другое произведение. А если еще модифицировать паттерны произведения, то сходства не заметит даже родной автор :).
Вот, что пишет https://ru.wikipedia.org/wiki/Timsort по этому поводу:
Да, основные различия в деталях реализации. У меня опубликована рабочая версия, демонстрирующая работу внешней сортировки реального dbf-файла. Кроме этого, вычислена средняя длина упорядоченной подпоследовательности в случайной, равномерно распределенной последовательности (равная 2e – 3) и показана наихудшая (зигзагообразная) последовательность для сортировки этим алгоритмом. Также показана зависимость работы алгоритма от двоичного разложения количества упорядоченных подпоследовательностей в искомой последовательности. У Тима Петерсона этого в явном виде нет, но есть субалгоритм «Галоп», которого нет у меня.
В общем, я думаю, что используются похожие идеи, отличающиеся в нюансах. Но приоритет за Тимом, поскольку его публикация 2002 года, а моя 2010 (см. также https://www.codeproject.com/Articles/92761/Work-C-Algorithm-of-External-Natural-Merge-Sort-wi)
А с учетом широкого использования алгоритма TimSort, автору публикации можно было включить его в свой курс обучения. Причем разные источники помогут лучше понять суть данной сортировки.
Я же в скобках указал Pascal. Понятно, что речь шла о библиотеке, которая до этого распространялась только в бинаринках. Но мы купили именно Object Professional, v. 1.02. Даже книги были.
Кроме этого мы еще купили исходники стандартной библиотеки Си (до 1995 года еще), типа код функций printf и т.п., но меня разочаровало отсутствие там исходного кода для работы с графикой.
В литературе, которая шла с исходниками, речь была только о паскале. Может и были какие-то нюансы, но я их не заметил, хотя успел написать серьезную программу, с использованием кода Object Professional, v. 1.02.
Сейчас актуальны искусственный интеллект и 3d-моделирование. Вы занимаетесь этими вещами? Нет? Тогда тоже сочувствую. Какие такие собственные преимущества вы имеете в виду?
О! Это очень прикольная штука на заре заката MS-DOS. DOS уже уходил в небытие и фирмы спешно продавали исходный код своих программ за символические деньги (до этого библиотека распространялась только в бинарниках). Мы купили эти исходники и я даже успел наваять одну серьезную программу. Object Professional поддерживала работу резидентных программ и доступ к расширенной памяти, что во времена MS-DOS было очень актуально. Получалось очень круто по тем временам, но вскоре пришла Windows 95/98 и DOS стал постепенно отмирать.
А так еще приходилось иметь дело с VB.NET, интересная система, но .NET, как и COM не стали слишком уж популярными.
Т.е., выходит я занимаюсь «не реальным программированием»? Меня же никто не принуждает, сам пришел к необходимости освоения WTL, значит, потребность была немного более чем абстрактный интерес.
Кстати, вы же изучение Qt или wxWidgets не отрицаете, видите в этом пользу. А WTL это тоже самое, только легковесное. Разве программист обязан делать только монструозные программы? Тем более что один и тот же результат, что для Qt, что для WTL можно получить сопоставимыми усилиями. Разница только в объеме конечной программы.
Более того, можно вообще поставить задачу создания интерфейсного контейнера, как я его называю, в виде некоего мастера. Допустим, вам дали задачу перенести данные из одной системы (формата) в другую. Вы быстренько наваяли какой-нибудь sql-скрипт с элементами пред и постобработки, вручную завели исходные параметры, выполнили, получили результат. Завтра другие данные и параметры, вы вручную меняете их и снова получаете результат. И так каждый раз. У меня лично подобных программ по разовой конвертации данных сотни, если не тысячи.
Вот сидишь и думаешь, нафига козе баян? А так берешь наш мастер по генерации произвольного интерфейсного контейнера, в автоматическом режиме генеришь код, добавляешь туда содержательную часть и у вас получается программа вполне товарного вида, от которой пользователи будут просто пищать. А усилий минимум. Профит? Вполне!
Или возьмем ту же программу 1С77. Ее все не любят, она давно морально устарела, но часто – густо более предпочтительна, чем 1С82 или 1С83. Она на порядок дешевле, непритязательна к ресурсам, легко поддерживается и программируется, поэтому для учета на средних предприятий, особенно в случае таких непризнанных республик, как ЛНР / ДНР просто идеальное решение.
Но почему бы не пойти дальше и не сгенерировать интерфейсный контейнер а-ля 1С77, только на более современном уровне, в т.ч., для 64-х битных платформ. В качестве движка базы данных можно взять опенсорсный SQLite, навигацию по данным делать с помощью MMF, а поддержку отчетов использовать на первых порах опенсорсную.
В общем, проблем с содержательной частью у меня не было, прототипы работали вполне успешно. Однако проблемы возникли на уровне интерфейса, поскольку стандартный Windows интерфейс оказалось для всех нелюбимым дитем, соответственно, чтобы сделать конфетку надо хорошо повозиться (так как мастера генератора интерфейсных контейнеров пока нет).
Кстати, бизнес логику удобно вынести на уровень плагинов, так чтобы каждый мог добавлять в программу нужный модуль. Отсюда мы плавно переходим к модульному учету, который вполне востребован на разных уровнях, на всех предприятиях. Речь не идет об альтернативе для корпоративных пользователей, только для малых и средних предприятий, коими 1С просто тупо перестала заниматься.
И после этого фразы типа: «Так вот WTL подавляющему большинству не пригодится» выглядят несколько наивно :). Хотя, по сути, вы правы, всем не нужно. Народу нужен результат, а результат должны дать программисты, а они вправе желать облегчить себе генерацию шаблонного кода. А спрос для подобных программ я лично у себя в ЛНР (и не только) всегда найду. Вот почему я кровно заинтересован решить проблему пользовательского интерфейса на приемлемом для себя уровне.
Пересборкой своих и чужих программ приходится заниматься постоянно. Я бы даже назвал это методом освоения и совершенствования программирования. Поэтому насчет «один раз» весьма спорно, если вы конечно не гений программирования.
Естественно, дело не объеме выходного кода, хотя если размер можно уменьшить на порядок, без потери качества, то почему бы этого не сделать? Скорее речь идет о понимании используемого опенсорса. Qt объемный в смысле освоения, но если следовать в парадигме стиля программирования Qt, то проблем как бы не возникает. Нюансы появляются, когда что-то хочешь сделать по своему, что не является стандартным для Qt. Можно это сделать? Конечно можно! Только надо знать как.
Поэтому вопрос в данном случае чисто прагматический. Да, Qt очень мощный и там можно делать все. Особенно мне нравится, что он поддерживает SQLite на уровне встроенного драйвера, а также контрол «форма списка» или грид. Это лучший опенсорсный грид, который я видел. Тем не менее, у меня и здесь есть собственные нюансы. Во-первых, SQLite мне нужен только для создания и поддержки индексов, а для юзания базы данных (типа sdf – simple data format) я хочу использовать технологию MMF (отличнейшая вещь, у меня даже статья на codeproject.com есть на эту тему). А по гриду я хочу иметь универсальный контрол, общий и для формы списка и для формы элемента (диалога) и для печатной / табличной форм. А экспериментировать с этим лучше в «чистой» системе, т.е., не такой сложной как Qt, поэтому WTL – идеальное решение.
Насчет 5-го или 7-го класса спорить не буду, но ощущения знакомства с квадратными уравнениями у меня очень ранние.
Насчет, «куда же нас занесло», это нормально. По основной теме как бы уже все сказано, добавить особо нечего, поэтому либо «а поговорить» либо подождать публикации другой, более соответствующей статьи.
По задачке, «физической интерпретации» особо никакой нет. Речь идет просто об избыточном корне квадратного уравнения. У нас в школе их называли «паразитными». Скажем так, уравнение Шредингера может быть записано без паразитных корней для постоянной Планка, присутствующей в первой степени. Но это будет не одно уравнение, а несколько. Путем математических преобразований из нескольких уравнений получено одно, соответственно добавился лишний корень для h (типа, из х = 1 получаем x^2 = 1 и избыточный корень х = –1). При этом избыточные корни отсекаются за счет краевых условий, поэтому подобная форма УрШ вполне всех устраивает.
Однако если для данного уравнения Шредингера известно решение для пси-функции, то подставив его в выражение для h (в виде формального решения квадратного уравнения), то мы получим первое значение для известной постоянной Планка, в виде константы, а второе в виде некой функции. И так будет всегда. Т.е., второе значение для h никогда не будет константой, только функцией. Понятно, что подобная функция (причем, всегда разная для разных начальных условий) не может являться решением и явно представляет из себя паразитное значение.
Как видите, особого физического смысла здесь нет, уравнение подобного типа в физике может встречаться и в других моделях, анализ, по сути, чисто математический.
Там квантовая механика, дана, как я написал, «для маскировки». По сути, чтобы напугать, а не в силу особой необходимости. Поэтому проблема чисто математическая, а не физическая. Физики там не больше, чем в уравнении жидкости в трехмерном пространстве, то бишь, Навье-Стокса. Модель имеет физические истоки, но стала чисто математической. Так и в указанной задачке для пятого класса. Для ее решения достаточно школьных знаний, возможно советских времен, а не российских. Странно, немного, что проблему Навье-Стокса вы понимаете лучше, чем эту достаточно простую задачу.
Однако могу вас утешить, впервые я обратился за разъяснениями к своему физику-семинаристу, в первом ВУЗе, ученику Капицы. Он любил задалбливать нас трехмерными интегралами из гидродинамики, но по этой задачке сказал, что здесь должна быть ошибка, но где, ищи сам. Потом, обратился к одной даме физику, случайно оказавшейся напарницей по автобусу. Она тоже не смогла ответить по существу. И только студент мехмата второго курса, который оказался моим напарником по комнате в общежитии МГУ, ответил четко и правильно, причем быстрее, чем я даже успел сформулировать эту задачу. Даже раздосадовало немного, что все оказалось так просто.
Я могу себе позволить не обращать внимания на моду. Да и выражение такое есть, если хотите добиться успеха, идите туда, где никого нет. Этот принцип меня вполне устраивает.
Что касается кроссплатформенности, то проще переписать программу с нуля, чем сразу поддерживать «коня и трепетную лань». Тем более что необходимости осваивать другие платформы, пока нет.
Я работал с Qt, он мне нравится, но он очень большой для моих целей. Потом взял систему попроще, wxWidgets, тоже милая вещь, но тоже великовата для меня. Потом нашел WTL и это оказалось то, что мне нужно. Есть еще легкий опенсорсный Win32++, как заменитель MFC, однако WTL мне импонирует больше.
Ну, если вам нравится теоретическая физика, то давайте обсудим что-нибудь попроще.
Вот школьная задачка, на квадратные уравнения (которые мы проходили в пятом классе). Нужно найти ошибку в рассуждениях. Правда, содержимое будет из квантовой механики, но это для маскировки :).
Общее уравнение Шредингера (УрШ) можно рассматривать как квадратное уравнение относительно постоянной Планка h. Решаем его, получаем формально два корня. Но постоянная Планка то одна, поэтому либо дискриминант квадратного уравнения равен нулю, либо у постоянной Планка есть второе фундаментальное значение. Оба случая интересны. В первом варианте получаем из одного уравнения два, что упрощает решение и анализ УрШа. А, во втором, делаем научное «открытие», постоянная Планка имеет два разных значения. Ура, товарищи! Куда обращаться за Нобелевской Премией? :)
Ну, на нет и суда нет. Верю, что вам не интересно, плохо не это, плохо то, что это никому не интересно. Книги на эту тему всего лишь пережевывание MSDN. Однако мне интересно, поэтому, хотя бы одна книга, написанная на данную тему, увлеченным автором должна быть. Поэтому, как накоплю достаточно практического опыта, так и опубликую свой опус. А потом посмотрим, заинтересуется ею хоть кто-нибудь.
Не интересна! Когда я был маленьким, море подобных задач публиковалось в журнале «Наука и Жизнь». Тогда это было хоть немного интересно. А сейчас…
Вот смотрите, я придумал новый алгоритм внешней сортировки «естественным слиянием» ( emery-emerald.narod.ru/Cpp/2E1562.html ), который использует частичный порядок даже в произвольных последовательностях. Самое интересное, что случайная последовательность обладает частичным порядком больше минимального, который теоретически равен 2! А именно, после обсуждения на форуме математиков dxdy.ru, удалось доказать, что средняя длина упорядоченной подпоследовательности L для равномерно распределенной случайной последовательности данных равна: L = 2e – 3 = 2.436563656918.
Поэтому, если хотите решить задачу числа 10958, обратитесь на этот форум, очень вероятно, что вам помогут. Недавно я там обсуждал тему, связанную с распознаванием встроенных субтитров обучающих видео: «Как группировать бинарные матрицы по степени их похожести?» ( dxdy.ru/topic142232.html ). В результате нашел подходящий алгоритм решения, не связанный с OpenCV.
Это вы собираетесь доказать экспериментально, с помощью компьютерного моделирования?
Да нет, не шучу! Но я вполне понимаю вашу неприязнь к GUI, а вы мою любовь к пользовательскому интерфейсу оценить не в состоянии :).
Претензия ко всем туториалам, для начинающих, это увлечение консольными приложениями в ущерб оконным. Зачем ломиться в открытую дверь? С консольным программированием нет проблем, когда примеров учебного кода порядка 99%. Если бы ваш любимый «D» дал бы примеры нетривиального подхода к программированию пользовательского интерфейса, то это было бы интересно всем, кому уже надоела консоль.
А кто вас сказал, что я не знаю «5 языков»? Пожалуйста, Ассемблер (MASM-32) (можете посмотреть мои статьи на erfaren.narod.ru ), Object Professional (Pascal), Adobe Action Script (AS3) ( scholium.webservis.ru ), Visual FoxPro 9 и C++ (с фреймворками), наконец. Кстати, кормит меня 1С и VFP-9.
А С++ это язык для удовольствия.
Интересного есть много где. Мои задачи мне поможет решить С++ / WTL, а не «D». А курс «Программирование пользовательского интерфейса на С++ / WTL / ATL» в университете, не исключено я буду вести лично, благо образование позволяет.
А зачем? Я не хочу Си, я хочу С++. Для меня это идеальный язык программирования. Зачем мне «умножать сущности без необходимости»?
Вы меня сможете заинтересовать, если покажите пример опесорса, типа «2С» (достаточно одного только интерфейса, без содержательной части), но сделанного красиво и удобно. Главные требования: MDI, закладки (табы) окон, грид (форма списка), поддерживающий группы элементов, как в 1С77 и согласованный с деревом (TreeView), удобные настраиваемые панели инструментов, а также полноценные локальные меню в дочерних окнах, поддержка ГУИ-шной мультипоточности и т.п.
Вполне верю, но у вас просто не было амбициозной задачи, требующей хорошего интерфейса. Вот, я только что написал в соседней реплике: «Для примера, сделайте аналог интерфейса пользователя (но более современно выглядящий) для учетной платформы 1С77. Не надо движков баз данных, макетирования отчетов, запросов и т.п. Сложно это или просто? С учетом любых доступных систем программирования и опенсорса. Можно посмотреть в сторону опенсорса «2С», но там ужасная реализация GUI на MFC. Если сделаете, цены вам не будет. А все остальное мы уже «припердолим» сами :) .»
Как по мне, то С++ с существующими фреймворками вполне хорош! Поэтому лично у меня нет потребности в другом языке программирования. Я много чего перепробовал, но остановился на С++ / WTL ( возможно еще ATL). Все остальное – опенсорс, которого более, чем достаточно, успевай только осваивать. Super!
А что университетское программирование это типа учебного, т.е., ненастоящего программирования? Чтобы, придя на предприятие, сказали: «Забудьте все то, чему вас учили!»?
А так, мое мнение, программистам надо давать отдельный курс, вроде: «Программирование пользовательского интерфейса на С++ / WTL / ATL», вплоть до программирования собственных контролов, типа форм списков. Вообще, почти все стандартные контролы Windows требует «напильника», чтобы довести их до ума. Те же закладки для MDI-окон, вроде не сложно, но хороших примеров нет, а то, что есть, имеет явно избыточный вес.
Не интересно GUI вообще, интересно иметь легкий рабочий вариант. Для примера, сделайте аналог интерфейса пользователя (но более современно выглядящий) для учетной платформы 1С77. Не надо движков баз данных, макетирования отчетов, запросов и т.п. Сложно это или просто? С учетом любых доступных систем программирования и опенсорса. Можно посмотреть в сторону опенсорса «2С», но там ужасная реализация GUI на MFC. Если сделаете, цены вам не будет. А все остальное мы уже «припердолим» сами :).