Учебный курс. Повышение качества разработки. Ошибки программы




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

90 Comments

  1. Hans

    Сделай видео лучше.

    Reply
  2. Артано

    (1) прошу прощения, но зачем? Текстовый формат, на мой взгляд, это очевидное преимущество

    Reply
  3. Dem1urg

    (2) Поддерживаю. Видео я бы смотреть не стал. А текст обязательно почитаю. Еще и цитат надергаю из особенно понравившихся мест.

    Reply
  4. Hans

    (2) Пришел домой после трудового дня, легче видос посмотреть сидя на диване чем сидеть за компом и читать текст. Текстовый формат это недостаток. Прошлый век. Все курсы делаются в виде видео.

    Reply
  5. Артано

    (4) Если на диване и с пивком, то только за деньги 😀

    Reply
  6. Hans

    Сделай один демо видос, сравнишь с просмотрами по тексту и по видео. Если хорошо видео будет заходить, будешь продавать. Текст ты точно никому не продашь.

    Reply
  7. yogaga

    Автор, а как вы считаете, использовать ВызватьИсключение для обработки ошибок это плохой стиль?

    Reply
  8. AlexeyPapanov

    Очень хорошая статья!

    Reply
  9. FesenkoA

    а еще про комментарии стоит добавить. Когда 2 прораммиста работают без хранилища, один не ставит свой комментарий на код , а второй из своей базы ЦФ обновляет… Собственно после этого мне дали доступ к хранилищу)

    А еще во всех статьях про правильность программирования нужно давать ссылку на

    https://its.1c.ru/db/v8std

    https://its.1c.ua/db/v8std

    Reply
  10. Артано

    (7) Зависит от контекста, и общей архитектуры. в п 2.6 (Неверное употребление оператора «Попытка…Исключение») приводил пример где очевидно это оправдано: перехват исключения, переопределения текста, вызов исключения с новым текстом

    Reply
  11. Артано

    (9) Все главные ошибки связанные с комментариями описываются в п 2.13 (Несоответствие наименования переменной хранимому значению). При следующей правке дополню пункт.

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

    В личной практике даже для проектов которые я веду один, всегда использую репозиторий с версионированием.

    Reply
  12. olegtymko

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

    Reply
  13. yogaga

    (10) Я имею в виду не перехват исключений, а генерация исключения в случае, если с точки зрения платформы все нормально, но с точки зрения логики программы произошла исключительная ситуация.

    Reply
  14. yogaga

    (12) Видео намного сложнее изменять/дополнять, чем текст…

    Reply
  15. Артано

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

    Reply
  16. CSiER
    Например, у вас есть 10 ошибок примерно одинаковой вредности. Но одна из них предварительно оценивается в 40 часов, тогда как остальные, даже по пессимистичным оценкам укладываются в 1-8 часов.

    Как именно происходит предварительная оценка?

    Ведь не стоит забывать, что сложно оценить трудоёмкость более 16 часов без декомпозиции

    Уже не первый раз встречаю именно 16 часов — откуда это значение (тот же Спольски тоже пишет про 16 часов)?

    Reply
  17. FesenkoA

    (11) нет, там описаны не правила документации изменений, а использования другой переменной. На это и вашу аналогию привожу реальный пример:

    Крайне доработанная конфигурация БУ 1.2 (БУ 2 в РФ) крайне отставшего релиза предыдущий программист обновлял ее путем внесения кода, в ней кусок «Если налог = перечисление.ставкиНДС.НДС20 и ХХХ=УУУтогда…., иначеесли налог=перечисление.НДС20 тогда…. итд». Обновляю релиз до актуального. Комментариев не вижу, заменяю типовым куском (что то типа «если дата>ДатаХХХ и налог = УУУ тогда..», то есть вполне каардинально отличающимся), обновляю. Через 2 дня звонок «аааа, ничего не работает». Оказалось это была доработка программиста, он увидел типовое изменение с датой (дата НКУ, или как то так) но это под их специфику не подходило, и он добавил свое условие. При этом чуть выше комментарии его были, а тут ему было лень.

    Reply
  18. Артано

    (16)

    Как именно происходит предварительная оценка?

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

    Уже не первый раз встречаю именно 16 часов — откуда это значение (тот же Спольски тоже пишет про 16 часов)?

    Обычный житейский опыт. Сложно прогнозировать что-то более чем на два дня вперед. Т.е. я могу достаточно уверенно сказать что и как я буду делать сегодня-завтра или завтра-послезавтра. Но на более длительный срок прогнозировать сложно. Вообще даже 16 часов это много и на крупных проектах планку снижали до 4-8 часов.

    Reply
  19. FesenkoA

    (11) или допустим код

    попытка

    Действие1(а,б,в);

    Исключение

    Действие1(а,б,в);

    Конецпопытки

    стоит снабжать комментариями. Причем чуть более подробными чем «// Иванов И.И 01.01.1234»

    Reply
  20. FesenkoA

    (19)что интересно — ошибкой было именно убрать 2й вызов из исключения

    Reply
  21. Артано

    (17) В данном случае проблема не в комментариях, а в методике доработки конфигурации на внешней поддержке. Если ваам необходимо переопределить поведение типовых модулей или свойства типовых объектов, то необходимо это делать в специально отведенных местах, а не там где застала нужда =)

    Reply
  22. CSiER

    (18)

    до 4-8 часов.

    Из моего опыта оптимально как раз 8 часов, 16 — уже перебор.

    Reply
  23. Артано

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

    Согласен, что неочевидные, нестандартные ходы нужно описывать специально. Почему-то был уверен, что уже писал об этом и много раз проговаривал.

    UPD: да, в первой лекции. Вижу что стоит еще раз подробно на этом остановиться. Надеюсь, меня не закидают помидорами за повторы =)

    Reply
  24. FesenkoA

    (23) Ну на самом деле процедура вызывает СОМ объект Экселя, с нестандартным файлом. Файл открывается, но пустой, при попытке получить строки — исключение. Выполняется еще один вызов процедуры с етем же (или новым) ком объектом, и все открывается четенько и гладенько. Согласен, это ппц писать так, но раз уж пишешь и оно работает — черкни пару строк почему так.

    Ну и ксати в последнее время начинаю комментариями создавать описание сложных процедур, помимо объединения их в области. Стам натолкнулся на «ааа, что это за фигня? кто это писал? а, я что ли?» и оно пришло…Тому кто будет сидеть после меня комментарии помогут

    Reply
  25. Артано

    (24)

    (23) Ну на самом деле процедура вызывает СОМ объект Экселя, с нестандартным файлом. Файл открывается, но пустой, при попытке получить строки — исключение. Выполняется еще один вызов процедуры с етем же (или новым) ком объектом, и все открывается четенько и гладенько. Согласен, это ппц писать так, но раз уж пишешь и оно работает — черкни пару строк почему так.

    Ну и ксати в последнее время начинаю комментариями создавать описание сложных процедур, помимо объединения их в области. Стам натолкнулся на «ааа, что это за фигня? кто это писал? а, я что ли?» и оно пришло…Тому кто будет сидеть после меня комментарии помогут

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

    Reply
  26. TODD22

    (16)

    Уже не первый раз встречаю именно 16 часов — откуда это значение

    Все читают Спольски 🙂

    Reply
  27. Designer1C

    Предлагаю использовать фразу :

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

    вместо фразы :

    «Каждый лишний час потраченный на обдумывание структуры приложения до его разработки, экономит десятки часов на исправление ошибок или обход ограничений архитектуры и вызванные этим ошибки.»

    Reply
  28. starik-2005

    И много, интересно знать, 1С-ников, которые в принципе способны научиться на примере настоящего текста чему-либо? В ряде пунктов вообще дана достаточно сильная аргументация в пользу ООП, но ведь разработчики языка 1С вряд ли сделают нормальную объектную модель, а разработчики на 1С вряд ли когда смогут это освоить (не про всех говорю, конечно).

    Reply
  29. Артано

    (28) Вот так всегда. Стоит один раз написать статью в стиле «ООП для детей», так сразу евангелистом ООП обзывают ))

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

    Насчет способностей — так не боги горшки обжигали. Каждый что-то своё вынесет в меру способностей и объективных ограничений практического применения. Сложно предположить что сразу, без практики, можно взять и освоить чужой опыт. Статья здесь не только и не столько набор методик и полезных советов, сколько пример организации мышления человека. Если во вводных лекциях об этом говорилось абстрактно, то начиная с этой статьи начались конкретные примеры.

    Также не согласен с пренебрежительной оценкой способностей большинства программистов. В большинстве своём эти люде не глупые, а просто необразованные или слабохарактерные.

    Большая часть хороших и крепких средних программистов стали такими потому что когда-то повезло им попасть в хорошую команду, где привили вкус прекрасному. Меньшая часть «выросли на помойке» за счет характера и выдержки. Основная же часть людей не готова бороться. Это не про интеллект, а вполне себе про психологию.

    По этому поводу могу привести наглядную иллюстрацию из практики:

    Был у меня небольшой проект на разработку подсистемы в самиписной конфе. В помощь дали одного штатного программиста. Так вот, когда я его код смотрел по проекту вообще не было нареканий, но как-то зашел в другие места и сразу глазам не поверил — словно другой человек писал. А разгадка простая была — на моём небольшом проекте изначально были чистота и порядок и человек интуитивно принял негласные правила этого места. А там где срач и бардак он вел себе соответственно месту. Когда спросил его как он переключается так легко (мне, признаюсь, было бы сложно) — он просто не понял меня. Мол просто пишу и всё. Такие дела…

    Reply
  30. starik-2005

    (29)

    Основная же часть людей не готова бороться.

    Полезное замечание.

    Reply
  31. Rustig

    (0) наконец-то в центре внимания сообщества нормальная картинка!

    Reply
  32. Rustig

    (21) прошу прощения, все так условно — каждый случай с клиентом индивидуален — иногда надо поправить в специально отведенном месте, иногда там где нужда застала…

    Reply
  33. Артано

    (32) «И ты, Брут, продался большевикам?!» (с)

    Помню, как несколько лет назад ты экспериментировал с методами неразрушительной доработки типовых. Что случилось?

    Reply
  34. Synoecium

    «Если вам не нужно редактировать переданные параметры, то передавать их нужно по значению. »

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

    Reply
  35. yogaga

    (34) А как вообще ссылочный объект по значению передать?

    Reply
  36. Synoecium
  37. Ndochp

    (17) Так трёхстороннее объединение однозначно отделяет типовые куски от изменённых местными ребятами без всяких комментариев.

    Это чистый косяк обновления, а не разработки.

    Reply
  38. yogaga

    (36) Это с клиента на сервер и обратно, тут понятно, а только в контексте клиента или в контексте сервера?

    Reply
  39. Synoecium

    (38) а что вы понимаете под ссылочным объектом? Если кратко ответить — то просто добавить Знач перед параметром.

    Reply
  40. yogaga

    (39) Ссылка на элемент справочника, например. Что в этом случае даст Знач?

    Reply
  41. Synoecium

    (40) ничего, это же ссылка на запись в БД, а не объект в памяти

    Reply
  42. yogaga

    (41) А я уж подумал, что изменилось что-то.

    Reply
  43. Rustig

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

    Reply
  44. FesenkoA

    (37) Да, но предыдущий программист не пользовался обновлениями. Он просто брал кусок кода который ему нужен и закидывал в рабочую. Если ему что то казалось не нужным или неправильным — он убирал/менял. Трехстороннее сравнение показало почти все 🙁 как это работало? А как программисту на (на то время) умирающем заводе ухватиться за место если у них одна торговая база?..

    Reply
  45. Артано

    (34) Разумное замечание. Хотя потери здесь не такие существенные. Самое узкое место в этой проблеме — транспортные расходы

    Reply
  46. neikist

    (4) Как говорится в подобных случаях: «Горите в аду!».

    Вы серьезно считаете что видео удобней и проще для восприятия? А как в видео реализовать беглый просмотр (когда просто взглядом за секунды десятки предложений текста пробегаешь). А как без попытки угадать «на какой же секунде это было» возвращаться к нужному предыдущему фрагменту? А как цитаты вытаскивать? А что делать с тем что отдельное предложение хочется раза 3 перечитать, а соседнее мельком проскакиваешь поскольку объем информации в нем меньше на единицу текста?

    Reply
  47. herfis

    (46) +100500

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

    Печатное слово (хорошее) требует усилий с обеих сторон. Требует наработки определенных навыков работы с ним (читать, опять же, надо уметь). Но его эффективность выше на ПОРЯДКИ. Я с ужасом представляю будущее, в котором больше не будет хороших книг. Потому что пиплу подавай видосики.

    Reply
  48. spacecraft

    (47) видосики тоже полезны. Но не как только они.

    Лично для себя нашел приемлемое обучение в таком формате:

    1. Теоретические основы из книг, статей, документаций.

    2. Видео-курсы.

    3. закрепление материала по книгам, статьям, документации.

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

    Reply
  49. herfis

    (48) Я не против видосиков. Иногда они незаменимы. Недавно разбившийся экран телефона заменял по видосику. Есть виды знаний, при передаче которых визуализация значительно помогает. Но что касается передачи знаний, для которых видеоряд не критичен — мое мнение однозначно. Лучше хорошей книги/статьи/монографии — быть не может ничего.

    «Из книг не всегда удается сразу понять последовательность и сложные моменты.»

    Просто-напросто навыков автора и твоих навыков не хватило для достижения взаимопонимания. Поэтому и потребовался альтернативный источник знаний. Это легко могла быть и другая книга. Еще лучше в закрытии частых дыр понимания, которые возникают у многих — форумы и системы вопрос/ответ. Поиск рулит. И работает гораздо быстрее и эффективнее видосиков. Ты сразу видишь ответ, а не ждешь пока кто-то прокашляется.

    Reply
  50. Hans

    (46) Нет не серьезно. Но почему все нормальные курсы в виде видео выходят, а не в виде текста? Текст же лучше воспринимается. Если у тебя навыки фоточтения — поздравляю, читай дальше.

    Reply
  51. Артано

    (50)

    Но почему все нормальные курсы в виде видео выходят, а не в виде текста?

    из-за бабок. Бабло побеждает так как себестоимость и риски при производстве видеокурсов ниже, чем при производстве в текстовом формате. Чем ниже себестоимость тем проще штамповать видосы и снижать отпускные цены вытесняя с рынка более качественных, но менее успешных «текстовиков».

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

    Ну а если сильно нужно смотреть лекции на дома диване, то уже писал ранее — занеси денег автору, может и согласится =)

    Reply
  52. spacecraft

    (49)

    Просто-напросто навыков автора и твоих навыков не хватило для достижения взаимопонимания

    Почему в книгах по изучению ЯП обычно простые примеры? Потому что формат книги не удобен для показа большого листинга кода. Не воспринимается как единый. Да, основные навыки получить можно, но сложное взаимодействие не раскрывает. Во всяком случае для начинающих. Видео дает больше информации на единицу времени, при условии последовательности подачи информации, а не скачках и «прокашливаний». Но перед просмотром видео необходимо уже имень базовые знания по предмету.

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

    Ведь обучение у хорошего наставника дает больший профит, чем только книги. Не становятся мастером «шаолиня» только по книгам 🙂

    Может просто-напросто видео-уроки были такого качества, что не воспринимались?

    Reply
  53. Артано

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

    Насчет одного органа чувств — здесь или лукавство или очевидное непонимание. Тексту не принципилаьно ваше чувственное восприятие. Есть конечно приёмы психологические при построении фраз в тексте и самой структуры текста. Но главное в тексте, что он при прочтении целиком помещается в мозг и там окончательно обрабатывается и анализируется. А как текст читается: глазами или наощупь дело десятое.

    Reply
  54. Артано

    (47) Спасибо, как с языка снял. Дополнил этот довод в (51)

    Reply
  55. spacecraft

    (53)

    Насчет одного органа чувств — здесь или лукавство или очевидное непонимание.

    А как текст читается: глазами или наощупь дело десятое.

    Могу только согласиться с первым, но в прямо противоположным выводом. Текст воспринимается только зрением. Видео воспринимается зрением и слухом.

    «наощупь» это из другой оперы.

    Чем видео принципиально отличается от преподавания в институте? А от удаленного обучения? Видео бывает еще и как «стрим».

    Так что попытка приписать «уход в демогогию» — слабая попытка.

    Выше по ветке уже сделали достаточно доводов в пользу текста

    А я не отделяю видео от текста. В смысле одно только видео бессодержательно.

    См. (48). Именно такая последовательность. И «Только видео должно быть не просто пересказ книги с простыми примерами. Желательно еще с печатными материалами, хотя бы кода.»

    Reply
  56. Артано

    (55) Чем видео отличается от очной лекции?! Листинги кода в видео?!

    Пойду я из этой ветки.

    Reply
  57. pm74

    (49)

    Я не против видосиков. Иногда они незаменимы. Недавно разбившийся экран телефона заменял по видосику.

    мне кажется вы несколько утрируете.

    безусловно для глубокого изучения материала нет ничего лучше хорошей книги,

    но в плане быстроты «погружения» в новый материал (имо) нет ничего лучше просмотра видео , особенно если автор (диктор) имеет достаточный опыт очного преподавания.

    на мой вкус лучше всего получается у преподавателей вузов возрастом over 50 .

    Reply
  58. Alex_CheST

    Интересная лекция, спасибо. Не скажу что сильно новая информация, но читается легко и понятно.

    Reply
  59. herfis

    (57)

    но в плане быстроты «погружения» в новый материал (имо) нет ничего лучше просмотра видео , особенно если автор (диктор) имеет достаточный опыт очного преподавания

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

    Reply
  60. pm74

    (59) я повторюсь , все зависит от диктора и подачи материала в видео

    например недавно нашел в сети прекрасный курс лекций по основам GTL LTL, где автор излагает тему очень просто и ясно

    Reply
  61. herfis

    (60) Ясень пень. С этим спорить глупо.

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

    Reply
  62. pm74

    (61) разница в напечатанном и записанном как видео , на мой взгляд , только в удобстве поиска при повторении

    т.е. проще перевернуть страницу и заново прочитать и переосмыслить уже пройденный материал,

    но при этом , видеоряд обладает возможностями недоступными для обычного текста

    Reply
  63. herfis

    (62) Это удобство невозможно переоценить. Намного легче держать новый сложный контекст.

    Reply
  64. herfis

    Не, можно, конечно, по-старинке. Сидеть как на лекции в универе и вести конспект. Если будешь успевать. Это зело увеличивает эффективность обучения, совмещая сразу несколько каналов восприятия, давая ретроспективу и смазывая недостатки «видеопотока».

    Reply
  65. Артано

    (64) Лектор, пожалуйста помедленнее, я записываю! =)

    Reply
  66. herfis

    Я когда-то ходил в радиокружок. Но если азбуку морзе я до сих пор помню, то стенографию успешно позабыл.

    Reply
  67. pm74

    (63) давным давно и недолго , занимался рекламой и кое-что читал по сабжу

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

    (64) это факт

    Reply
  68. herfis

    (67)

    видеореклама в лидерах с большим отрывом

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

    Reply
  69. pm74

    (68)

    Потому как для обучения первично не запоминание, а понимание

    не всегда.

    возьмем к примеру курс по скд от Гилева

    конструктор скд весьма насыщен разными настройками, назначение которых нужно просто запомнить

    Reply
  70. herfis

    (69) Мне есть что ответить, но мне кажется что тема себя исчерпала и мы просто перебрасываемся мячиком.

    Reply
  71. pm74

    (70) ок

    Reply
  72. herfis

    Но, кстати, настройки СКД — как раз тот случай когда видео гораздо уместнее скупого текста с миллионом скриншотов. Специфика такая.

    Хотя внятной статьи по механизмам работы СКД в стиле проф-разработки первой редакции ой как не хватает.

    Reply
  73. Артано

    (73) Хорошее наблюдение, не знал. Не приходилось работать с настолько большими списками в памяти.

    Reply
  74. LordKim

    (74)

    Я тоже не знал =)

    Оптимизировал поиск по ТЗ (по составному ключу) и попервой хотел использовать соответствие (строковый составной ключ / строка ТЗ)

    Мне повезло что ТЗ была 124к строк, и я практически сразу обнаружил проблему

    В результате сделал индексирование по ТЗ (скорость поиска сопоставима, затраты на индексацию значительно меньше чем на формирование соответствия)

    Хотя сам объект соответствия мне очень нравится, удобная штука, но редко кто ей умеет пользоваться

    Reply
  75. Артано

    (75) Если ТЗ уже есть на входе, то самый лучший способ это именно индексирование ТЗ. Кстати об этом написано в том же абзаце где говорится про соответствие )

    Reply
  76. herfis

    (73)(74) Так себе наблюдение.

    Только что затестил наполнение и работу с соответствием на миллион элементов — никаких проблем не встретил.

    Платформа 8.3.6, наполнение заняло 10 секунд.

    Никогда не встречал ни в одном источнике упоминания явного ограничения на количество элементов ни в одной универсальной коллекции.

    Reply
  77. herfis

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

    Reply
  78. herfis

    Соответствие — любимая универсальная коллекция. Ибо HashMap 🙂

    Reply
  79. Артано

    (77) Кстати да, не обратил сразу внимания на магическое число 99999, скорее всего уши растут из табличной части

    Reply
  80. grumagargler

    (73) у соответствия нет такого ограничения

    Reply
  81. LordKim

    (77)

    хз, завтра проверю, и заскриню, благо код наполнения соответствия остался

    Платформа 8.3.6.2299

    Не поленился, проверил сейчас

    Действительно, в соответствие можно добавлять произвольное количество

    Вероятно количество уникальных ключей в ТЗ было 99999 (отлаживал несколько раз, но видимо исходные данные не менялись в процессе)

    Мне подумалось что есть ограничение (в структуре же есть), ненаучно подошел, признаю

    Reply
  82. herfis

    (82)

    Мне подумалось что есть ограничение (в структуре же есть)

    Да что ж это такое. Что еще за ограничение в структуре? 🙂

    Еще раз — НИ У ОДНОЙ универсальной коллекции нет явных ограничений по размеру.

    Тест с миллионом элементов по-прежнему чувствует себя хорошо.

    Да и неоткуда взяться ограничению у структуры — это тоже самое соответствие, только с небольшим синтаксическим сахаром.

    Reply
  83. LordKim

    (83)

    Я не проверял, это не мое мнение, это отсюда

    http://forum.infostart.ru/forum9/topic37061/message405365/#message405365

    Reply
  84. LordKim

    (84)

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

    Reply
  85. herfis

    (84) Да, что-то Ильдарович в тот раз прогнал.

    «Проведя эксперименты, получим, что структура может хранить максимум 999 свойств» — вангую, что он генерил ключи в цикле и уперся в неразрывный пробел, как недопустимый символ для ключа структуры 🙂

    Другое дело, что в качестве hash-map соответствие эффективнее структуры. Считать хэши по строкам, тем более длинным — менее эффективно чем по примитивным типам и ссылкам. То же заполнение миллиона элементов в соответствии по числовым ключам происходит ощутимо (но не разитильно) быстрее.

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

    Reply
  86. awk

    1. Определение ошибки есть, а определения качества нет. Хотя определение ошибки выводиться на основании качества.

    2. Кластеризация смешана с классификацией.

    Это по форме статьи.

    По содержанию поставил бы два плюса если бы мог….

    Reply
  87. Артано

    (88) Спасибо

    1. Определение качества в первой статье. Это третья

    2. Классификация лишь метод, кластеризация результат. Но подумаю над формулировками, возможно стоит расставить акценты

    Reply
  88. user940969

    Однозначно полезная и интересная статья. Из комментариев не понял, зачем к данной статье видео… Лучше потратить некоторое количество времени и прочесть её вдумчиво и внимательно. Больше пользы будет, чем от видео.

    Reply
  89. Plotks2017

    А как конкретно «Выполнить» влияет на производительность? Откуда такая информация?

    Reply
  90. Артано

    (91)

    А как конкретно «Выполнить» влияет на производительность?

    Выполнить и Вычислить компилируются динамически в момент их вызова. Отсюда потери производительности.

    Откуда такая информация?

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

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

    Например код типа:

    А = 0;
    Для Сч = 1 По N Цикл
    Выполнить(«А = А + 1»);
    КонецЦикла;

    Будет выполняться в разы дольше чем

    А = 0;
    Выполнить(»
    |Для Сч = 1 По N Цикл
    | А = А + 1;
    |КонецЦикла;»);

    И по мере увеличения N разница будет расти

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *