Властелины кода
G
GigaVolt
но из-за прекращения поддержки этого языка программирования и моего желания перейти на более низкоуровневый язык я решил перейти на C++
Продвинутые посоны на питоне реализуют разработки в области ИИ (свёртки, градиентные спуски и т. п. херню :-) ).
Python - бесплатный, и никакой микрософт не уворует твои разработки, если ты этого не захочешь.
Н
Ну и как вы тут
Клован.
Я работаю в области близкой к методу Q-learning, который применяется для создания самообучающихся систем и искусственного интеллекта.
Если есть какой-то результат, а не кодерское дрочево - то похвально.
Если результата нет, то это все равно лучше чем с дивана жаждать сжигать соотечественников, у которых другое мнение
S
Stavr
Автор приходит к издателю и подписывает бумаги. Но может этого и не делать.
конешно конешно.
И прочитает его ноль целых, ноль десятых в итоге, и останется никому неизвестным Ну если уж не натуральный какой-то гений
Но шота подсказывает, что даже тех же Стругацких если бы не печатали, то никому бы оне так и не были особо известны. Да еще в те времена.
S
Stavr
Какой уж там уворовать...
мало кому нужно копаться в библиотеке, которая чего-то там работает себе и делает нужное
хотя конешно вставлять такое во что-то серьезное, брать на себя ответственность и продавать потом, это уже другое дело. А вдрух там какая закладка или вирусяка?
Z
Z fernes land (Зануда) Z
Но код он пишет так, что потом по прошествии времени сам в нём разобраться не может
Это не только он. Любой программист в своём старом коде разобраться не может. Иногда проще по новой написать, чем в своём же старье разобраться.
Зная всё это я стал писать код совсем по другому, используя несколько правил:
1) Все переменные и структуры данных у меня длинные и написаны на русском языке. Например:
struct Блок_управления_роботом
{
int Количество_датчиков;
vector<string> Название_датчика;
vector<float> Минимум_датчика;
vector<float> Максимум_датчика;
int Количество_каналов_управления;
vector<string> Название_канала_управления;
vector<float> Минимум_канала_управления;
vector<float> Максимум_канала_управления;
vector<float> Реакция_канала_управления;
vector<float> Показание_датчика;
...
2) Все процедуры и функции также имеют длинные названия на русском языке. Например:
void Инициация_блока_управления_робота_тениссиста(Блок_управления_роботом& БУ)
{
БУ.Количество_датчиков = 2;
БУ.Название_датчика.resize(БУ.Количество_датчиков+1);
БУ.Минимум_датчика.resize(БУ.Количество_датчиков+1);
БУ.Максимум_датчика.resize(БУ.Количество_датчиков+1);
БУ.Название_датчика[1] = "Горизонтальная координата тележки";
БУ.Минимум_датчика[1] = 30;
БУ.Максимум_датчика[1] = 270;
БУ.Название_датчика[2] = "Угол наклона ракетки (в градусах)";
БУ.Минимум_датчика[2] = 0;
БУ.Максимум_датчика[2] = 180;
БУ.Количество_каналов_управления = 2; БУ.Название_канала_управления.resize(БУ.Количество_каналов_управления+1);
БУ.Минимум_канала_управления.resize(БУ.Количество_каналов_управления+1);
БУ.Максимум_канала_управления.resize(БУ.Количество_каналов_управления+1);
БУ.Название_канала_управления[1] = "Усилие на привод тележки";
БУ.Минимум_канала_управления[1] = -1;
БУ.Максимум_канала_управления[1] = 1;
БУ.Название_канала_управления[2] = "Усилие на привод ракетки";
БУ.Минимум_канала_управления[2] = -1;
БУ.Максимум_канала_управления[2] = 1;
....
3) Я стараюсь разбивать код на максимальное количество процедур, чтобы не было длинных непонятных фрагментов кода. А процедура или функция что делает даже по названию можно определить. При этом дополнительно я пишу длинные многострочные комментарии о том что делает эта процедура и какие параметры она принимает и отдаёт. В самом теле подпрограммы я тоже пишу кучу комментариев почти по каждому действию (в примере выше я их просто удалил, чтоб форум не загромождать).
4) Пишу подробные комментарии по каждому чиху в коде. Например:
Событие.Показания_сенсоров.resize(a, b); //Создаём массив показаний сенсоров длиной a и заполняем его исходными значениями b (если второй аргумент не получен, то заполняется нулями)
Лента_памяти.push_back(Событие); //Добавляем новое событие в ленту памяти (новый элемент вектора)
Теперь по прошествии времени этот код могу расшифровать не только я, но и практически любой программист средней руки, если потребуется вытащить из кода какой то интересный алгоритм. Потому что код написан почти что на человеческом языке как в блок-схемах. Расшифровывается на раз-два.
Z
Z fernes land (Зануда) Z
Python - бесплатный, и никакой микрософт не уворует твои разработки, если ты этого не захочешь.
Дочь у меня Питон изучает (прежде всего чтобы 3д графику и анимацию на Блендере удобнее было писать).
Говорить о воровстве в случае Питона вообще не приходится. Это интерпретатор, поэтому ваш продукт по определению будет в исходных кодах. С Питоном любой программист абсолютно гол. Всё его исподнее видят все, кому он передаёт программу. Ни о какой конфиденциальности алгоритмов в такой ситуации и речи идти не может.
В моей же области Питон и вовсе не подходит. Он тормозной до ужаса. Вставки всё равно придётся писать на Си, поэтому какой мне вообще смысл в Питоне? Можно сразу делать всё на С++.
Что касается Питоновых библиотек со всякими свёртками, градиентными спусками и прочими инструментами нейронных сетей, деревьев выбора и подобной фигни (написанной кстати в основном на вставках Си), то я вот что вам скажу...
На Питоне очень удобно ИСПОЛЬЗОВАТЬ уже имеющиеся алгоритмы ИИ, но абсолютно невозможно РАЗРАБАТЫВАТЬ новые методы ИИ. А я именно занимаюсь разработкой новых методов, а не прикладным использованием старых.
Z
Z fernes land (Зануда) Z
Если результата нет
Результата пока что нет. Вернее результат есть, но он меня пока не устраивает. Самообучающийся робот получается довольно бестолковым и неловким, хотя и ловит шарики раз в 5 лучше, чем при случайных движениях приводов.
Может оказаться так, что устраивающего результата и вовсе не будет.
Чтобы получился один Хассабис должно быть несколько тысяч пытающихся.
Z
Z fernes land (Зануда) Z
Инициация_блока_управления_робота_тениссиста
Ага, вот сразу и опечатку нашёл. "Теннисиста" должно быть.
Инициация_блока_управления_робота_тениссиста
Вот. Это фишка языка 1с. Длинные русские названия идентификаторов, методов и объектов очень помогают пониманию (своего) кода.
Но и бесконечный источник ошибок.))
Не страшно, на самом деле привыкаешь, и первым делаем проверяешь орфографию.
В 1с я бы назвал так: ИнициацияБлокаУправленияРоботаТеннисиста()
Вообще код на 1с некрасив. Но то такэ.
У меня полно говнокода, ибо пишу для себя, сдавать проект не надо.
Эффективность не интересует. Тысячи записей будут обработаны в мгновение ока. А миллионов у меня не будет. Движок e1 корявит структурный код.(
&НаКлиенте
Процедура ИзменитьПоШтрихкоду(Команда)
" КоличествоСтрок = ВернутьКоличествоСтрокТабличнойЧасти();
" Если КоличествоСтрок > 0 Тогда
"
" Строка = "" ;
" ВвестиСтроку(Строка,"Введите штрихкод");
" Если СтрДлина(Строка) <= 12 Тогда
" Строка = "0"+Строка;
" КонецЕсли;
" Ссылка = НайтиШтрихкодНаСервере(Строка);
"
" ТекущаяСтрока = ВернутьТекущуюСтрокуТабличнойЧасти();
"
" Элементы.Списокпокупок.ТекущаяСтрока = ТекущаяСтрока; //вот так "СтрокаТабличнойЧасти = Элементы.Списокпокупок.ТекущиеДанные;
" СтрокаТабличнойЧасти.Цена = ПолучитьЗначениеРеквизитаНаСервере(Ссылка,"ВходнаяЦена");
" СтрокаТабличнойЧасти.СрокГарантии = ПолучитьЗначениеРеквизитаНаСервере( СтрокаТабличнойЧасти.Наименование,"СрокГарантии");
" СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.КоличествоПринято;
" СтрокаТабличнойЧасти.ЕдИзм = ПолучитьЗначениеРеквизитаНаСервере( Ссылка,"ЕдИзм");
" СтрокаТабличнойЧасти.НаименованиеДляЦенника = ПолучитьЗначениеРеквизитаНаСервере( СтрокаТабличнойЧасти.Наименование,"НаименованиеДляЦенника");
" СтрокаТабличнойЧасти.Наименование = Ссылка;
"Иначе
" Сообщить("Товар не найден по штрихкоду");
" КонецЕсли;
"КонецЕсли;
"КонецПроцедуры
Z
Z fernes land (Зануда) Z
Процедура ИзменитьПоШтрихкоду(Команда)
" КоличествоСтрок = ВернутьКоличествоСтрокТабличнойЧасти();
" Если КоличествоСтрок > 0 Тогда
"
" Строка = "" ;
" ВвестиСтроку(Строка,"Введите штрихкод");
" Если СтрДлина(Строка) <= 12 Тогда
" Строка = "0"+Строка;
" КонецЕсли;
" Ссылка = НайтиШтрихкодНаСервере(Строка);
"
" ТекущаяСтрока = ВернутьТекущуюСтрокуТабличнойЧасти();
"
" Элементы.Списокпокупок.ТекущаяСтрока = ТекущаяСтрока; //вот так "СтрокаТабличнойЧасти = Элементы.Списокпокупок.ТекущиеДанные;
" СтрокаТабличнойЧасти.Цена = ПолучитьЗначениеРеквизитаНаСервере(Ссылка,"ВходнаяЦена");
" СтрокаТабличнойЧасти.СрокГарантии = ПолучитьЗначениеРеквизитаНаСервере( СтрокаТабличнойЧасти.Наименование,"СрокГарантии");
" СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.КоличествоПринято;
" СтрокаТабличнойЧасти.ЕдИзм = ПолучитьЗначениеРеквизитаНаСервере( Ссылка,"ЕдИзм");
" СтрокаТабличнойЧасти.НаименованиеДляЦенника = ПолучитьЗначениеРеквизитаНаСервере( СтрокаТабличнойЧасти.Наименование,"НаименованиеДляЦенника");
" СтрокаТабличнойЧасти.Наименование = Ссылка;
"Иначе
" Сообщить("Товар не найден по штрихкоду");
" КонецЕсли;
"КонецЕсли;
"КонецПроцедуры
Ну вот. Вполне себе понятный код.
Кстати, синтаксис похож на VB с его end if, end sub...
Но и бесконечный источник ошибок.))
В большинстве языков это не страшно, так как ошибка возникает только при объявлении переменной. При использовании если не так написал название, то просто компилятор выдаст ошибку типа "переменная не определена". Да и в процессе набора редактор уже её красным подчеркнёт точно так же, как проверяльщик орфографии подчёркивает слова в Ворде.
В принципе набирать эти длинные названия нужно только один раз (при определении переменной), а потом редактор после набора первых букв уже список возможных переменных выкатывает как Т9 в телефоне, так что на набор длинного "человекоязычного" кода уходят секунды и ошибки практически исключаются (по крайней мере в Визуал Студио). Очень удобно. Лет 30 назад писать код было в сто раз геморнее.
Ну а если ошибка возникла в определении переменной, то она ни на что не влияет. Ну разве что самому противно смотреть на грамматические ошибки. Исправить её тоже легко сразу во всей программе через "быструю замену". Несколько секунд на это надо.
Н
Ну и как вы тут
Быдлокодеры это откуда то с няшорга.
Z
Z fernes land (Зануда) Z
Примерно через месяц использования Visual Studio "написала", что прощается со мной, так как я не зарегистрировался. Как оказалось, регистрация возможна только через номер телефона или через адрес почты. Ну я и зарегился через почту. Не ожидая
подвоха я использовал свою основную почту, а не левый ящик (впрочем левый ящик тоже особо не помог бы). Да это и не главное...
Веселье, как оказалось, только начинается.
Надо было всё таки на левый адрес в Visual Studio региться.
Не прошло и недели после регистрации, как мою почту взломали:
Фотография из Фотогалереи на E1.ru
Этой почте у меня больше 25 лет и такое случается впервые. И, самое интересное, случилось это спустя пару-тройку дней после регистрации в Visual Studio по этой почте.
"Совпадение? Не думаю."
Ну дела....
Так то не до смеха.
Я пока могу пользоваться ящиком и даже могу сменить пароль, но в специальной службе Яндекса пишут следующее:
"Взломщик, которому удалось войти на Яндекс от вашего имени, может восстановить доступ к аккаунту, даже если вы смените пароль. Следуйте инструкции ниже, чтобы проверить, что взломщик не подключил свои средства восстановления. ..."
Блин, сейчас ещё этот геморрой предстоит.
Лучше бы я регился в Visual Studio по номеру телефона.
[Сообщение изменено пользователем 07.10.2019 15:06]
Z
Z fernes land (Зануда) Z
Мне сейчас спецы сказали, что эта фигня может быть и не вскрытием почты. Говорят, что я просто мог зайти в почту Яндекса в тот момент, когда в браузере был включен VPN.
VPN я пользуюсь наверно года 3 уже, но никогда такого не было. Хотя, обычно я врубаю VPN только на время входа в нужные сайты, а потом сразу вырубаю (потому что он жутко тормозит). Ну может зашёл на секунду на почту при включенном VPN, хз...
Ну только 5 октября в 3-20 ночи ... Неужели я ещё не спал в это время? Хотя вполне возможно, это же с пятницы на субботу было.
VPN я пользуюсь наверно года 3 уже, но никогда такого не было. Хотя, обычно я врубаю VPN только на время входа в нужные сайты, а потом сразу вырубаю (потому что он жутко тормозит). Ну может зашёл на секунду на почту при включенном VPN, хз...
Ну только 5 октября в 3-20 ночи ... Неужели я ещё не спал в это время? Хотя вполне возможно, это же с пятницы на субботу было.
S
Stavr
как страшшшшно стало жить в эпохи инторнетов!
Авторизуйтесь, чтобы принять участие в дискуссии.