• Могут ли разные сущности объектов объединять в одной таблице?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    >> Реляционная база подходит или стоит посмотреть в сторону NoSQL?
    Хранить первичные данные в реляционной базе правильно, а изменения, которые делают сотрудники (версионность) записывать в отдельную JSON-сущность и складывать в отдельную таблицу. Дело в том, что бизнеслогика может требовать возможности работы с транзакциями, а в NoSQL они поддерживаются только на уровне документа (ElasticSearch, Mongo). Если во время работы вам потребуется откатить изменения в нескольких сущностях, то NoSQL вам этого не обеспечат.
    Есть вариант скрестить NoSQL и реляционные базы - использовать JSON в MySQL. Но тут будет другая проблема - проверка схемы записываемых данных. Нетривиальная задача для MySQL. В общем, NoSQL на сегодняшний день ещё сыроват и для применения в проектах над ним надо попотеть. В Mongo схема вроде как есть, в ElasticSearch вообще жесткач по схеме (раз вы задаёте вопрос, то точно с ним не сталкивались и уверяю, что на изучение схемы в Elastic вы потратите время не меньше, чем на сам проект)

    Вчера как раз отвечал на похожий вопрос с версионностью в MySQL: Как сделать версионность как на вики?

    Что касается версионности, то тут есть ещё один момент - как защитить сущности от перезаписи другим пользователем? Основываясь исключительно на своём субъективном мнении я делаю инкрементируемое поле (скажем, version) для каждой сущности (группе значений, которых я принимаю за сущность), значение которого я отдаю при select-е из базы. При сохранении сущности клиент обязан предоставить этот индекс. Если индекс не менялся, то запись разрешена. Как только происходит запись сущности, то я инкрементирую это поле и если другой человек тоже попытается перезаписать данные со старым значением поля version, то программа ему не позволит это сделать (это очень примитивный способ блокировки, очень отдаленно напоминающий git. Там используются хеши, ну а я все упростил до безобразия) Проверка значения поля version делается в триггере, он же и отменяет процесс записи, если версии не совпадают (чего как раз нельзя сделать в чистой NoSQL). Можно было бы сделать как в 1С блокировку чтения, но для программ не уровня 1с имеем кучу геморроя при реализации.

    Что касается Excel и Word, то читайте описание формата OOXML и смотрите библиотеки по работе с офисными форматами. Для Node не знаю, но для Java и C# есть очень мощные, если не хотите разбираться с OOXML.

    Остальные сущности по бизнеслогике вы описали нормально. Лично я бы в постановке задал бы несколько вопросов непосредственным исполнителям этой бюрократической процедуры, а так вроде все норм.
    Ответ написан
    1 комментарий
  • Как сделать версионность как на вики?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Не работал с бухгалтерскими базами, но для своей базы MySQL хранение истории изменений использую JSON. Есть отдельная таблица history с полями - table_name, table_id и history (JSON) с данными типа массив [], в который добавляются записи формата JSON, за которыми производится наблюдение. На пользовательской таблице висят триггеры на добавление, изменение, удаление. Как только в пользовательской таблице производятся изменения, то триггеры записывают изменения в таблицу history. Это позволяет отслеживать всю историю работы с записью от момента создания, до удаления не вставляя код во всякие процедуры или бизнеслогику, а работая абстрактно только средствами базы.
    Ответ написан
    4 комментария
  • Возможно ли загрузить файл через форму автоматически?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Если у вас задача тестировать upload файлов через форму, то генерировать http-запросы выгрузки файлов можно не только через браузер. Выгрузка файлов - это стандартизованная процедура http протокола, а не просто фишка браузера. Называется multipart form data: https://ru.m.wikipedia.org/wiki/Multipart/form-data Сгенерировать такой запрос как через curl, fiddler, так и на разных языках, например c#: https://stackoverflow.com/questions/27425043/uploa... и это позволит вам выполнить даже нагрузочное тестирование выгрузки файлов на сервер.
    Ответ написан
    Комментировать
  • Whitelist для CORS из базы данных?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Учитывая, что CORS не поддерживает wildcard и regexp-ы, то без проверки тут не обойтись и нормальной практики тут нет. Замерьте сколько времени занимает у вас проверка с запросом к БД и если устраивает, то работайте так. Если нет, то ищите подходящий вариант БД или храните белый список прямо в коде.
    Ответ написан
    Комментировать
  • Нужна ли программисту профильная математика?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Чем больше вы знаете, тем лучше. Как обычно, самым важным качеством программиста является поиск решения. Сначала правильного, потом оптимального. Иногда это математическое решение, иногда нет. Но если уж речь идёт об образовании, то его никогда мало не бывает. Неочевидное, нелогичное следствие - учиться надо будет всю жизнь. Эх, если бы мне об этом сказали в первом классе, я бы очень расстроился )))
    Ответ написан
    8 комментариев
  • Какой поиск лучше сделать на странице "Проекты"?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Всё норм, только поиск следует делать в форме, состоящей из одной строки ввода. На моей памяти, некоторые "программисты" выдавали форму аж из 10 полей (поле для поиска по имени проекта, поле для поиска по номеру проекта, поле поиска по ФИО согласующего, поле для поиска по ФИО начальника и дальше по штампу... )! Пользователи избалованы гуглем. Сделайте им маленький "гугл" )))
    Ответ написан
    Комментировать
  • Есть ли в PHPStorm инструмент для просмотра того, какие файлы инклюдят друг друга?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    В самом PHPStorm вроде как нет. Отвечал на похожий вопрос, поэтому не буду повторяться: Какие инструменты использовать для отсечению лишнего неиспользуемого кода в проекте?


    e7c1055d0515476fa49451fc601bcb5f.png
    Ответ написан
    Комментировать
  • Может кто объяснить, что происходит при кликании ярлыка программы на физическом уровне?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Не очень понятно, что для вас "физический уровень" (мышки или экрана?), но если без шуток, то есть WinAPI функции и они вызываются при действиях самой же операционной системы. Вот пример статьи как можно посмотреть, что происходит по разным поводам (Нужен Spy++, если установлена Visual Studio, то смотрите меню Tools):
    zennolab.com/discussion/threads/pm-winapi-ili-upra...
    Ответ написан
    Комментировать
  • Как посчитать пример в input?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Нашёл пример решения вашей задачи: https://github.com/wangyanxi/calculator

    32b32a00bebf47ae821f76f651bae485.png
    Ответ написан
    Комментировать
  • Как подвязать куки к HttpWebRequest [C#]?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Скорее всего вы не ввели необходимые файлы куки (обычно нужное количество куки исчисляется единицами). Советую вам пропустить страницы через fiddler и глянуть все куки там, а не на странице.
    Поскольку у вас всё-таки проблема с задачей более высокого порядка - парсить залогиненного пользователя, то посоветую вам пользоваться не C# в чистом виде, а браузерным компонентом. Для простых случаев использовать c# WebBrowser, в нём логиниться пользователем, а потом парсить всё что загружено (там же и скрипты начальные загружаются и меняют DOM). Для сложных случаев отлично подходит CefSharp - Chrome для C#. Вот этот зверь очень послушно делает всё что вы ему прикажете. Я на нём с сайта гостов периодически документацию для своей фирмы загружаю, например.
    Вот, нашёл интересный пример: zennolab.com/discussion/threads/c-sharp-vs-webbrow...
    Ответ написан
    Комментировать
  • Как выбирать расположение пакетов?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    К сожалению - никак:
    https://social.msdn.microsoft.com/Forums/en-US/3e7...
    Note: this won't change location of all files, but only of those which can be (by design) installed onto different location. Be warned that there is many shared components which will be installed into shared repositories on drive C: without any possibility to change their path
    Ответ написан
    Комментировать
  • Как подружить Fiddler и Java?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Встречный вопрос. Вы не пробовали вот эту настройку:

    97f64eb5c3144b3e997d3e4b6d9969bb.png

    Я через неё несколько фидлеров в цепочку ставил...
    Ответ написан
    Комментировать
  • Чем можно подменить запрос и отправить его через прокси?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Вот в официальной документации описаны много вариантов, что можно вообще с URL сделать: docs.telerik.com/fiddler/KnowledgeBase/FiddlerScri...
    Подойдёт?
    Ответ написан
    Комментировать
  • Fiddler как сделать, чтобы определенные запросы не доходили?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Есть такой вариант:

    717c619e282a4d948bdfedd24544ec3f.png
    Ответ написан
    Комментировать
  • Когда и как компилируется JSP?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Грубо говоря, .jsp это что-то типа .php.
    Вот первое же описание по поиску :)
    https://ru.wikipedia.org/wiki/JSP


    JSP страницы имеют расширение .jsp и размещаются там же, где и обычные Web-страницы
    Поэтому при первом запросе этот процесс может вызвать небольшую задержку

    сервлет и .jsp - это зеркальные близнецы, что-то типа когда один - это вывернутое наизнанку представление другого. Просто после некоторого опыта использования того и другого вы будете их применять по своему вкусу. По моему личному опыту, я не пользуюсь ни тем, ни другим, а предпочитаю рендерить страницы в html/js, а данные получать через ajax (через сервлеты, хотя теоретически можно и через jsp - им без разницы, что вы через них отдаёте).

    P.S.
    JavaEE - это такой миф в мире Java. Все о нём говорят. Не парьтесь. Просто изучайте работу backend-а. Когда вы достигнете определённого уровня, то сами себе ответите на вопрос, что такое JavaEE.
    Ответ написан
    Комментировать
  • Как просклонять имя существительное и прилагательное в единичном и множественном числе?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Видел такой: www.morfologija.ru бесплатный, про ограничения ничего не нашёл.

    81f5f804918747d498c1a1c1ce2155dd.png

    Вроде как разбор страницы сделать не трудно.
    Ответ написан
  • Как использовать несколько IP, если прокси-сервис разрешает только один?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Прокси скрывает своего клиента (IP и прочие атрибуты) от сервиса. В том числе и от следующего в цепочке прокси. Поэтому под своим IP 2s уже не выйдет. Наружу смотрит IP прокси.
    Ответ написан
    Комментировать
  • [Solved, решено как частный случай] Windows 8.1. C# задать новое положение окна без дёргания окна?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Решил. Частный случай.
    Результат:

    041785659a30481b8f0b5832b9d51023.gif


    Решение:
    Разворачиваю главное окно программы на ВЕСЬ экран. Если экранов несколько, то суммирую их размеры, чтобы главное окно программы перекрывало все экраны. Главное окно прозрачное, поэтому его всё равно не видно. А теперь главный фокус: главное окно программы остаётся на месте всё время, а вот рамка и индикаторы перемещаются внутри главного невидимого окна, которое находится поверх экрана:

    046140d9ed7649dcbdc67ff4f45d470a.png

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

    Решено!
    Ответ написан
    Комментировать
  • Есть ли менеджер команд командной строки?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Не могу гадать чем вы пользуетесь кроме cmd.exe на сервере windows, но если сервер с GUI, то могу предложить неплохую программу ConEmu:
    https://conemu.github.io/en/Screenshots.html
    Одни скриншоты чего стоят.
    Однако, если вы считаете, что нужно как-то удобнее работать с текстом, то по своему опыту могу предложить вам попробовать неплохой менеджер буфера обмена - ditto: ditto-cp.sourceforge.net/. Он помнит всю историю (обычно все скрипты/команды проходят через буфер обмена) и можно искать по части кода. Например, я не помню на память команду запуска сборки некоторых проектов мавеном и делаю так:

    0fca0952f2b34d4f82d0d21134dd91fb.png

    Старт mysql:

    825bab285f854ddfa57fdb803e6fcfc8.png

    Остановка mysql на локальном компе:

    44fd188d26c14d7e8e62491409947ef7.png
    Ответ написан
    3 комментария