• Как научиться декомпозировать задачи?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Во-первых, слово "не охота" не совместим с уровнем "мастер своего дела". Возможно, потому и начальство кричит... Как правило, когда процесс разработки выстроен и понятен всем заинтересованным лицам, крика значительно меньше, и разработчики появляются тоже в соответствии с планом, не раньше.
    Во-вторых, план - это живой постоянно изменяющийся инструмент руководителей, причём с разных сторон. Заказчик/подрядчик/субподрядчик/ещё кто-то. Если план понятный и "живой", постоянно актуализируемый, то кричать никто не будет - времени нет, надо свои задачи всем делать. А вот если план делают "для галочки", то крика всегда много.
    В-третьих, распараллелить нельзя только жёстко последовательные задачи. Причина - либо технологическая (нельзя данные залить, пока база не создана), либо ограничения ресурсов (дядя Ваня зальёт данные, когда ему компьютер настроят). Всё остальное решается декомпозицией задач с получением понятных промежуточных результатов. SMART ваше всё.
    В-четвёртых, да, план должен быть основан на принятых технических решениях. Иногда эти решения при реализации (и даже позже!) признаются неверными, и приходится перепроектировать систему, и тогда нужно менять план работ. Это нормально и даже неизбежно, особенно для сложных систем. Но тут уже в плане нужно предусматривать работы по управлению рисками, а в самой системе надо предусматривать такие решения, которые позволят изолировать проблемные места и не допустить, чтобы ошибки проектирования или изменения требований не привели к слишком высоким затратам.
    Итого, что крик стоит, и что разработчики ждут - это прямые последствия ошибок планирования и отношения к плану. Не ошибается тот, кто ничего не делает. Вы хорошо знаете аналитику, поэтому с детализацией требований вопросов нет. Но надо развиваться в технологиях, в особенностях процессов разработки, в особенностях управления проектом. Тогда планы будут более реалистичными. Но ещё надо перестать смотреть на план как одну из стадий "водопада". План меняется всё время, планирование продолжается от начала и до конца проекта минимум, а чаще - в течение всего жизненного цикла системы. Тогда и нервы у всех участников работ лишний раз никто не полоскает.
    И ещё про детализацию. Задача длительностью 4 часа сильно отличается от задачи длительностью 5 часов. Потому что первую задачу можно выполнить, не отвлекаясь, один раз "войдя в творческий поток". А задачу длиннее 4 часов исполнитель без отвлечений не выполнит никогда (в смысле 95% случаев, остальные 5% - тоже с разрывом "потока" и исключительно на своей самодисциплине). Итого, 5-часовая задача сразу превращается в 6-8 часовую. Фокус-фактор выше 65% не бывает. Так что декомпозируйте задачи так, чтобы они реально были исполнимыми в указанные сроки.
    Ответ написан
    Комментировать
  • Как подписывать документы ЭЦП на сайте, если используется USB-ключ eToken PRO?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Инструкция по работе с КриптоПро ЭЦП Browser plug-in лежит на сайте производителя: cpdn.cryptopro.ru/default.asp?url=content/cades/pl...
    Пример: https://www.cryptopro.ru/sites/default/files/produ...
    Ответ написан
    Комментировать
  • Правильная структура для хранения посещаемости?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Не очень понятно, откуда берётся и для чего дальше нужна хранимая информация, как долго она хранится. Ещё не ясно, какую СУБД используете. Объёмы у Вас не очень большие.

    Когда мы делали учёт рабочего времени для ПАК "Посетитель", там было всё по честному: регистрировались все события входа/выхода, в том числе между контурами внутри организации. Далее эти события обрабатывались, строилась витрина с учётом плана и факта. Была своя логика определения нарушения рабочего графика, так что опоздание на 5 минут, например, прощалось, но регистрировалось и т.п. Допускалось 15 минут в течение дня на "покурить". Вот со всем этим, с настройками и оперативными данными, с витринами обработанных данных, у нас нормально справлялись и MS SQL, и Firebird, и Postgres. Данные хранились лет 5.
    Ответ написан
    Комментировать
  • Как проще всего сохранить эти данные в реляционной базе(SqlLite)?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    В реляционной модели надо делать несколько таблиц. Одну - для корневой сущности. И по одной - для каждого набора значений; записи этих таблиц должны ссылаться на корневую таблицу. Т.е. в Вашем случае будет корневая таблица CVE и две дополнительные prod и referenc, ссылающиеся на CVE.id.
    summary, как я понял, содержит просто текст. Но если нужно и это значение парсить, будет третья дополнительная таблица.
    Ответ написан
    Комментировать
  • Где хранить данные об уровне доступа пользователя, в Сессии или в Базе данных?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Как правило, информацию о доступе пользователя проверяют каждый раз при поступлении от него нового запроса. Делается это из-за того, что с момента предыдущего запроса пользователя могли блокировать, или изменить его права. Если хранить информацию об уровне доступа в сессии, то до её истечения заблокированный пользователь будет продолжать пользоваться всеми разрешениями, которые у него были на момент начала сессии. А при умелом пользовании запросами сессия может жить очень долго )))
    Ответ написан
    1 комментарий
  • Сбор информации о сертификатах?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Попробуйте так:

    Получение списка сертификатов:
    X509Store store = new X509Store("My"); // личное
    store.Open(OpenFlags.ReadOnly); // только чтение
    foreach (X509Certificate2 mCert in store.Certificates){
    // работаем с конкретным сертификатом как с объектом X509Certificate2
    }

    Контент для записи в файл:
    StringBuilder builder = new StringBuilder();
    builder.AppendLine("-----BEGIN CERTIFICATE-----");
    builder.AppendLine(Convert.ToBase64String(cert.Export(X509ContentType.Cert), Base64FormattingOptions.InsertLineBreaks));
    builder.AppendLine("-----END CERTIFICATE-----");
    var s = builder.ToString();

    Запись в файл:
    File.WriteAllText("c:\\path\cert.cer", s);
    Ответ написан
    Комментировать
  • Как реализовать добавление записей в БД через форму без перезагрузки страницы?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Страница обновляется, потому что метод post на форму повесили. А надо по нажатии на кнопку сохранения в форме вызвать специальный метод js, внутри которого и будет задействован динамический обмен данными, т.е. AJAX. Проще всего использовать какой-нибудь фреймворк типа jquery http://jquery.page2page.ru/index.php5/Ajax-запрос
    Можно, конечно, и самому повозиться с запросом и обработкой ответов и статусов ошибок и ещё потратить кучу времени на кроссбраузерность - смотрите для начала xmlhttprequest.ru
    Ответ написан
    Комментировать
  • Как загрузить картинку на сервер средствами JavaScript?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    https://m-i-kuznetsov.livejournal.com/114764.html
    Пример загрузки картинки.
    Ответ написан
    Комментировать
  • Есть ли перспективы ПО разработки?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Ох... И не знаю даже, как Вам ответить. Да, появилось такое направление, как web-программирование. Но оно появилось уже давно, несколько десятков лет назад. Оно набирает популярность, чему есть объективные и субъективные причины. Но про "сейчас все уходит в веб" Вы сказали не подумав. Web-программирование - это только одно из многих направлений прикладного программирования.
    Я, например, занимаюсь сложными программно-аппаратными комплексами. В них входят разные подсистемы: есть web-интерфейс пользователя, есть web-сервисы, но за этим фронтоном стоят очень мощные системы сбора, обработки и хранения информации. Часто эти системы распределены по всей территории России, и вопрос их взаимодействия/синхронизации - тоже весьма не тривиальный.
    Очень активно сейчас развиваются системы типа "умный дом" или "умный офис", и в них web - важная, но не решающая часть. Важнее по сигналу датчика выполнить корректно некое действие, чем уведомить об этом пользователя. Да и способы уведомлений бывают разные, не только посредством Интернет, и всем этим занимаются программисты.
    В общем, я бы говорил о проникновении программного обеспечения в самые разные области жизнедеятельности человека, просто одни люди чаще работают с web-интерфейсом, а другие - со штурвалом самолёта или щитом управления АЭС.
    А стоит или нет изучать программирование на Java и C# - это уж Вы сами решите. Платформы очень мощные, но есть прикладные задачи, для которых они не очень подходят. Решите, чем Вы сами хотите заниматься, тогда станет понятно, какие инструменты использовать.
    Ответ написан
    Комментировать
  • Стоит ли опциональные вещи уносить в одно сериализованное поле БД?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Если по-серьёзному к такому типу задач подходить, то делается несколько таблиц: таблица типов записей, таблица самих записей, таблица параметров, таблица типов данных и таблица значений. Записи ссылаются на типы записей. Таблица параметров тоже ссылается на таблицу типов записей: у каждого типа записей есть свой набор параметров. Каждый параметр имеет свой тип данных. Наконец, таблица значений содержит значения конкретных параметров для конкретной записи. Иногда в таблице значений имеется не одно, а несколько полей значений: для целочисленных, для вещественных, для строковых значений и т.д. - тогда нужное значение выбирается из нужного поля согласно типу данных.
    Такое решение очень гибкое, масштабируемое, но более сложное в реализации.
    Ответ написан
    Комментировать
  • Что делать если project manager идет на поводу в клиента?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Общее правило тут такое: сделать всё, что возможно самому сделать для решения проблемы, и если этого недостаточно, и проблема остаётся критичной, то надо менять место работы. Последнее - крайнее и очень нежелательное занятие, которое следует избегать. Оно всегда вызывает вопросы в профессионализме того, кто меняет место работы. Поэтому нужно сфокусироваться на первом.

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

    Отсюда вопрос номер один: как архитектура Ваших решений учитывает природу требований к тем проектам, которыми занимается студия? Возможно, технические решения слишком жёсткие, что и оборачивается головной болью для разработчиков. Статья, развивающая тему: "Я разработчик, а не юрист". И мои соображения: "Убедитесь, что вы делаете свою работу, прежде чем....
    Ответ написан
  • Использование ЭЦП КриптоПРО?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    В двух словах, для .NET Вам нужен КриптоПро CSP (криптопровайдер) и КриптоПро .NET (обеспечивает взаимодействие .NET с криптопровайдером).
    Автоматическая подпись возможна, но для нее нужен закрытый ключ. Ваш код (путём вызова соответствующих методов CryptoAPI) должен обеспечить поиск контейнера закрытого ключа и собственно создание и верификацию подписи. Можно указать параметры поиска в конфигурации, но такая реализация удобна, если используется один ключ, обновляемый раз в год (например, для подписи на стороне сервера). Для пользовательской подписи лучше использовать выбор пользователем нужного сертификата. Например, используя КриптоПро ЭЦП Browser plug-in, если говорить о подписи данных посредством web-интерфейса.
    Ответ написан
    Комментировать
  • Правда ли, что в MS SQL Server создавать временные таблицы лучше вне транзакции?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Есть тонкость - распределённые транзакции. В MS SQL Server происходит эскалация транзакции даже в том случае, если в рамках транзакции идёт обращение к двум разным БД на одном сервере. Поскольку временные таблицы создаются в отдельной БД, при некоторых условиях могут возникать проблемы с MSDTC. Эскалация была значительной проблемой в 2005-й версии, но мы не так давно сталкивались с ней на 2008-й.
    Ответ написан
    4 комментария
  • Как правильно хранить большие объекты с вложенными сущностями?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Очень похоже на многомерный куб. Смотрите в сторону OLAP и, соответственно, в сторону схемы БД "звезда". Хотя, в Вашем случае может быть более приемлемой "снежинка".
    Создаёте одну таблицу объектов со сложным ключом, содержащим поля со ссылками на таблицы измерений. Измерения - это расположение, оферы, коммуникации и т.п. Нормализация пострадает, увеличатся затраты на регистрацию/изменение/удаление объекта, но анализ в таком кубе будет идти оптимальнее.
    Ответ написан
    Комментировать
  • Как правильно спроектировать базу данных?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    У Вас не сильно нагружена операционная часть (создание, изменение, удаление задач пользователя), поскольку самих задач у пользователя много не бывает. В сутках только 24 часа, и в году только 365 дней. Гораздо бОльшая нагрузка падает на поиск и фильтрацию списка задач (или дел, как Вы это назвали).

    Возможным решением будет многомерное представление данных. Например, по схеме "звезда": есть таблица задач и несколько таблиц измерений, по которым можно проводить выборку (пользователь, тип задачи, проект или категория задачи, место встречи, дата и время и т.п.). Это требует некоторой денормализации и бОльших затрат на операции с отдельными записями, но упрощает агрегацию и выборку списков.
    Ответ написан
    2 комментария
  • Как развиваться, если команда слабая?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Вот Вы только ВУЗ закончили, и уже жалуетесь, что разработчики вокруг слабые. Что ж Вы говорить будете, когда архитектором станете? :(

    Это я к тому, что (1) любое развитие начинается с личности, а не с команды, и (2) если Вы хотите достичь вершин, то работа с теми, кто слабее Вас, должна стать неотъемлемой частью Вашего бытия. И Вы должны быть этого достойны. Никто не хочет иметь в команде чванливого супергероя, но мудрый и терпеливый наставник, способный вовремя подставить плечо более слабому - это очень важная роль. Так что, если действительно хотите развиваться, в первую очередь займитесь своими личными качествами. Поверьте, они часто более важны, чем умение писать оптимальный код.

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


    Ну и наверняка ещё что-то можно в этот список добавить. Было бы желание. А вот жаловаться - бросьте!
    Ответ написан
    2 комментария
  • Как оценить объем трудозатрат разработчика ПО по результатам разработки?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Поскольку основная часть системы написана на java, то результат представлен в виде промежуточного байт-кода (файлы .class). Часто используются jar-файлы, которые являются по сути обычными zip-архивами, содержащими тот же байт-код. Байт-код по своей структуре близок к ассемблеру и может быть прочитан и даже изменён. По меньшей мере можно использовать такие метрики, как объём нового/изменённого кода, количество новых классов, количество новых/изменённых методов и т.п. При желании можно попробовать восстановить исходный java-код или проанализировать сам байт-код: грубые расхождения между заявленной стоимостью работ и реальными затратами выйдут наружу.

    Вот здесь дан пример того, как командой javap, применённой к class-файлу, получить текст байт-кода.

    Получить примерный исходный код java можно с помощью JD или CFR или другим декомпилятором java.

    С PHP и SQL вообще проблем быть не должно, они открытые. Нужен лишь человек, способный дать оценку "нововведениям".
    Ответ написан
    Комментировать
  • С чего начать писать тех.задание?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Смотрите ГОСТ 34.602-89 "ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА СОЗДАНИЕ АВТОМАТИЗИРОВАННОЙ СИСТЕМЫ" - www.rugost.com/index.php?option=com_content&view=a...
    Для начала, прочтите статейку "Документирование по ГОСТ 34* — это просто".
    Шаблон ТЗ - www.rugost.com/index.php?option=com_content&view=a...
    Комментарии - it-gost.ru/content/view/101/51
    Ответ написан
    Комментировать
  • Что новичку почитать по криптографии?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    О.Ю. Полянская, В.С. Горбатов. Инфраструктуры открытых ключей. - М.: Интернет-Университет Информационных Технологий, 2007
    www.intuit.ru/studies/courses/110/110/info
    Ответ написан
    Комментировать
  • Стандарты разработки GUI?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    https://cours.etsmtl.ca/gpa789/pdf/OfficialGUI.pdf - это под windows ("Official Guidelines for User Interface Developers and Designers")
    Ответ написан
    2 комментария