Pull to refresh

Comments 12

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

Ну, очень круто!!! Нужно иметь «семь пядей во лбу», чтобы решать задачи подобного уровня. Отличный образец командной работы!

Нам, «простым программистам», о подобных достижениях можно только мечтать. Но, теперь, разве что, уже в следующей жизни :) .

Что такое разработка нетривиального алгоритма, я столкнулся в своем индивидуальном пет-проекте ( https://habr.com/ru/articles/848836/ ). Самым сложным, в этой обучающей программе, оказалось разработать (именно разработать, а не реализовать) алгоритм подготовки данных и обработчик выбора для проверка запомненных слов. Другими словами, сформировать и обработать один правильный вариант, в случайном месте, среди нескольких неправильных, того же самого грамматического типа.

При всей кажущейся простоте, и, притом, что прототип данного модуля у меня работал еще пару месяцев до этого, реализация алгоритма с расширенными возможностями, вызвала у меня ступор. Даже реализация полноценного видео в (неопубликованном) «МедиаТексте», для ручного, но удобного извлечения текста из медиа-контента (видео, аудио, изображения, см. http://scholium.webservis.ru/Pics/MediaText.png ), для того, чтобы создавать озвученные файлы данных (компьютерные уроки) для обучающей программы, не вызвала у меня столько головной боли, как последний реализуемый алгоритм. Вы не поверите, но я даже пить из-за этого полностью бросил (до этого, правда, ограничивался бутылкой коньяка в месяц). Одних только блок-схем, для этого алгоритма, я нарисовал не менее двадцати.

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

Приятным бонусом из всего этого стала «прокачка мозгов». Уже ради одного этого стоит заниматься серьезной интеллектуальной работой.

А вы работали один? Это ведь экстремально сложно, работать в одиночку, и нести ответственность за все. И эмоционально очень тяжело.

Да, один. Так получилось, что программировать на предприятии я начал с появлением персональных компьютеров. Специалистов по ним просто, тупо, не было. Со временем, появились друзья-программисты, самые крутые в нашем регионе. Однако вместе работать не пришлось, хотя я предлагал, да и задачи (учетные) у нас были общие в то время.

Потом пригласили в другую фирму, для тех же целей компьютеризации учета. Мол, не дело солидному предприятию вести учет на стороне. Речь шла о внедрении любых программ, которые можно купить. Деньги давали. Главное, чтобы все работало. Мы купили все учетные программы, которые были доступны в то время. Но, при ближайшем рассмотрении, оказалось, они «что нужно было – не делали, а что делали - не нужно было!». Деваться было некуда. Надо было срочно писать собственный вариант учетной системы. Благо, у меня был трехлетний опыт на предыдущей работе, где я как раз этим и занимался, но программу написать, еще не успел. По срокам меня сильно не гнали, так что несколько месяцев в запасе у меня было. Однако пахать пришлось по 12 часов в сутки, без выходных. Главное, что к ключевой сдаче отчетности успел, хотя моя главбухша очень сильно переживала.

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

Когда появилось свободное время, начал смотреть в сторону создания обучающих программ. Здесь больше всего времени ушло на вынашивание концепции. Сейчас вот опубликовал уже третью ключевую версию. Главное теперь определиться с концепцией обучающих данных (уроков) и подготовить их. Мог бы заниматься и развитием своих учетных систем, с учетом новых возможностей, но без внешнего стимула (кому это надо, кроме меня?) делать это достаточно глупо. Обучающие программы, те, хотя бы , теоретически, могут быть востребованы.

А что именно не понятно? Разложите общее непонимание на составляющие, выделите между ними связи, проанализируйте, как одно непонимание влияет на другое, и задавайте вопросы - все отвечу. Когда пробелы заполнятся, непонимание пройдет (мне так кажется).

Мне кажется, или в этом фрагменте кода:

//command contains preliminary parsed json; it is a map of <json-key> <json-value>
void cmd_send (const command& cmd) 
{ 
    auto account = cmd.args().find("account"); 

    if (account == cmd.args().end()) //account is mandatory
        return cmd.make_reply(error_t::param_count); 

    tx_send tx;
    // ref is a parameter parser. We assign which type is allowed
    param acc = param::parse(account, pt_id | pt_pk | pt_name); 

    tx.acc = get_account(param); //depending on type we search appropriate id

внезапно появилась новая переменная param, которой ранее не было, но не использовалась переменная acc?

Даже не знаю, что сказать, чтобы не обидеть автора. Ведь работа им была проделана титаническая, это, пожалуй, самая объемная статья на Хабре из мной прочитанных. Но...

...но есть ощущение, что она была помещена не в тот раздел, т.к. конкретно о C++ или о применении C++ для такого рода задач из статьи ничего нового или хотя бы сколько-нибудь интересного узнать не удалось. Даже не было сказано почему именно C++ (а не Rust, Go, Java или какой-нибудь другой ЯП) был выбран для разработки, какие преимущества дал, какие проблемы привнес и т.д., и т.п.

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

Она опубликована в трех хабах, один из них - это C++. Да, вы правильно заметили, здесь речь не об использовании C++, это рассказ о разработке. В общем-то, в введении я это подчеркнул, что код используется только для иллюстрации. Реализация могла быть и на другом языке, в рассматриваемо контексте это не принципиально. Здесь речь идет о технических решениях, а не об использовании языка в том или ином аспекте. Но, посольку реализация была на C++, то я посчитал нужным добавить статью и в этот хаб.

Почему С++. В первую очередь, из-за быстродействия. Java по этому критерию отпадает сразу - в этом аспекте она не может тягаться с C++. Go: по своей парадигме это больше процедурный язык, чем объектно-ориентированный, на нем проблематично реализовывать сложные модели. Rust: да, это конкурент C++, но в настоящее время C++ имееет бОльшую поддержку в плане различных библиотек. Например, вы знаете на расте аналог libsodium ? Может, и есть, но я не слышал. В этом плане C++ более знаком - его библиотеки у всех на слуху, тот же буст имеет практически все необходимое.

Как-то так.

Она опубликована в трех хабах, один из них - это C++.

Ну и в С++ она выглядит чужеродно.

Java по этому критерию отпадает сразу - в этом аспекте она не может тягаться с C++

Тут нужно смотреть на конкретные сценарии. Это в 1990-е Java однозначно сливала C++у. Уже во второй половине нулевых для server-side задач все было уже не так однозначно.

Go: по своей парадигме это больше процедурный язык, чем объектно-ориентированный, на нем проблематично реализовывать сложные модели.

Из того, что вы описали в статье и из приведенных примеров кода вообще не видно, что где-то были бы нужны сложные модели.

Например, вы знаете на расте аналог libsodium ?

libsodium, насколько я знаю, это чистый Си. И биндинги для Rust-а к libsodium перечислены прямо на сайте libsodium.

Очень круто, сам занимался подобными штуками. По поводу модификации кода - тут прям проситься WebAssembly...

Не, WebAssembly здесь не поможет. Все проблемы, связанные с верификацией исходного и двоичного кода, остаются те же самые

Sign up to leave a comment.

Articles