• Как протестировать функцию, в которой пользователь вводит данные?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Did you try this?
    Оператор SendKeys
    The other way is to write an c/c++ program using win32 API "startprocess", grab its handle, and send to the console window keystrokes using "SendMessage" core API method, one symbol at a time.
    I wonder if this is really what you want, because it looks more like testing keyboard events of a computer than your function.
    Perhaps for a test you can substitute this "readline", with something that reads lines from some file, you pass to test program at the beginning in the form of input parameter from command line or using some kind of configuration approach.
    This will not really invalidate your API, but reduce complexity of arranging user input to something, I'd say, reasonable.
    Ответ написан
    Комментировать
  • Как будет работать система плагинов, при условии что плагины можно писать на разных языках?

    @Miron11
    Пишу sql 20 лет. Срок :)
    nothing can be easier.
    in the end all you need, is have your mind work through the following point "what it means to have plugin and what it means to the application that launches this plugin"
    to my understanding, all there is to it is electronic data interchange protocol, EDI.
    For EDI first thing you define is "what"
    Second thing you define is "how"
    And the last, the third one, is you define, depending on your application very special needs is "when".
    ---
    To tally thing up and to clarify, where you stumble at the moment, on my mind, is you are trying to explore and come to definitive conclusion with regards to point, that has no real bearing on what you need to do, what you are asking is "which".
    That is simply is a moot point.
    ---
    Now, that above points simplify and somewhat layout fundamentals, one usually picks and chooses from toolchest what to do.
    What should be the format of EDI between main application and plugin ( or subfeature )? -
    a. none
    b. CSV, Excel, Flat, TSV, LLVT, Parquet, Fixed Width ... ... ... yada yada yada - THE FILE
    c. database, well, I am fun of SQL Server, but you are more likely to prefer Postress or Oracle? ( smile )
    d. there is always a network way, which can be as simple as raising HTTPServer, however this idiom is implemented in the form of class in the language of your choice, followed by using Get, Post, Put, Delete ( my vocabulary of RESTFull verbs is limited, but it is readily available on the Yandex ), yes, one can open a socket ( whatever that means ) and then there are yet more ways, IPC, Shared Memory ( now, don't really use this last one, it never works well even within same language application, unless you really know what and how to do here )
    this point d can be further extended and deliniated.
    It can be local ( yes, the localhost, IP Address 127.0.0.1 exists!!! I have seeing it, and it's there, and I can prove it to you in 30 seconds, even if you are in Africa! And then there is network, sometimes, and when there is network there is yamm yamm yamm cloud ( this is where warm and fuzzy feelings usually start to flow ).
    And the nice thing about point d, particularly RESTFull, it works and it is easy, and it can be done practically in any language today, more or less.
    If I haven't annoyed you at this moment, it would probably mean that you are invariably damaged person when excessive beliefs in technology, go out and have a nice and long walk.
    Ответ написан
    Комментировать
  • Почему используется потенциально неинициализированная локальная переменная-указатель "matrix"?

    @Miron11
    Пишу sql 20 лет. Срок :)
    When code reaches this line:
    if (d == '1') {//ручной ввод данных в матрицу
    it sees curly brace "{" and opens, what is called, a new scope of automatic variable.
    Subsequently this line:
    //создаем массив
    float** matrix = new float* [n];
    is the place where the above feature allows for mistake to occur.
    If it wasn't for new scope, compiler would have notified you of error, something like "attempt to declare variable, variable matrix already declared"
    provided you with error message, line number, and later edition even notify users of possible fix.
    All you need to do is to remove
    float** inside this if condition
    --if (d == '1') {//ручной ввод данных в матрицу--
    and error would be mended.
    Here is link from wikipedia. I have red its section "In specific programming languages", subsection "C, C++", and I can confirm that it is speaking truth.
    Ответ написан
    Комментировать
  • Какой open source проект написан на труъ Си++?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Good example with templates and patterns.
    One of a few projects where modules carefully encapsulate internals and expose a finely tuned publicly accessible interface
    https://github.com/apache/arrow.git
    Ответ написан
    Комментировать
  • Что это за конструкция?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Обычно в SQL это пишут, чтобы не забыть проверить какие - то условия, когда появляются ошибки. Никто не объясняет эти вещи в комментариях. Процедуры, обычно, длинные, и каждая лишняя строчка, это не позволительная роскошь.
    Иногда это результат спешки, тогда надо покопаться, и если все верно, убрать лишние шаги. Да, некоторые программисты пишут такой код, в качестве флажка, чтобы напомнить себе, что что - то надо доводить до ума.
    Ответ написан
    Комментировать
  • Как указать в Startup путь станартный Web api?

    @Miron11
    Пишу sql 20 лет. Срок :)
    По идее в Web API не существует реализации. Вы сами создаете и физический и логический слой службы. А Web API дает Вам только набор ( весьма запутанных ) стандартных сочленений различных устройств.
    Поэтому так или иначе Вам необходимо будет выбрать платформу, на которую ляжет обертка Web API, а сверху реализация продукта.
    Отказавшись от физической реализации, и взяв на себя полностью ответственность за её создание Вы выигрываете в простоте платформы ( это не ирония и не ехидство, это действительно так ). Поскольку, несмотря на количество очень тесно состыкованных сочленений и оберток Wrb API, правила их состыковки единообразны, лекала легко поддаются интуитивному запоминанию, а материализация не такое уж и сложное дело.
    MVC, с другой стороны, это уже реализация, и здесь и маршрутизация и каждое отступление от предписанных реализацией шагов, это практически безнадежное предприятие.
    По этой причине в UI пользуются MVC. Здесь меньше внимание, насколько оптимально машина верстает страничку, а вот возможность расцветить текст образами и эффектами, чтобы захватить воображение пользователя, есть все инструменты.
    Web API это платформа, когда каждый винтик машины необходимо подчинить передаче данных. Это позволяет на связке из нескольких сравнительно дешевых двух - процессорных машин строить предприятия по сборке самолетов, экономя на компьютерах миллионы долларов.
    Ответ написан
    Комментировать
  • Как Apache Spark будет параллельно(или не) брать и обрабатывать данные?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Ууу... три года назад вопрос задан.
    Так не интересно :)
    Но попробую ответить, все-равно. Даже зная, что автор наверное поднаторел и возможно может ответить на свой вопрос сам, намного лучше.
    Итак.
    1. Спарк все и всегда делает параллельно. Вопрос лишь в том, дает ему пользователь выполнить параллельный запрос используя 2 или больше, так называемых "executor(s)", по русски наверное "выполнимых".
    Выполнимый это просто java.exe выполнимый. Кроме того, что это выполнимый, это тот ( или те ) выполнимый(ые), которые и выполняют такие операции, как считывание файлов, запись файлов, jdbc, spark sql и другие запросы.
    В зависимости от конфигурации Spark их может быть один или больше.
    Как правило эти executors запускаются на машинах, которые распределены в сети, и физически отделены друг от друга. Есть настройки, которые устанавливают сколько именно executors могут быть запущены на этом массиве машин.
    Машины эти, в свою очередь, называются "worker nodes".
    Кроме worker nodes несущих executors Spark требуется driver. И хотя на этом драйвере так же выполняется java.exe, в свою очередь этот выполнимый не входит в счет executors, за исключением того случая, когда Вы работаете с Spark в режиме локальной консоли "spark-shell". При запуске Spark в режиме локальной консоли все возможности Spark по параллельному распределенному выполнению заданий сводятся к немного больше, чем нулю.
    Да, никто не мешает создать Thread и запустить её параллельно, но это уже не совсем Spark, но собственный код.
    Итак, как же добиться, чтобы Spark выполнил задание параллельно, пользуясь встроенными в Spark возможностями.
    Часть ответа уже прояснилась - надо запустить Spark кластер, по крайней мере с одним worker на котором надо отконфигурировать и запустить 2 или больше Executors. После чего надо выполнить задание, которое Spark умеет выполнить параллельно.
    При этом надо всегда помнить, что Spark попытается оттянуть выполнение задание как можно больше, а вместо выполнения задания, при вызове той или иной функции, запомнить некий план выполнения, который будет выполнен в будущем. Такой план называется DAG ( direct acyclic graph ).
    Хорошим примером операции, которую Spark выполняет одновременно несколькими потоками, это считывание файлов из директории
    spark.read.format("json").load("my_path_to_json_files/files_subdirectory/*.json")
    хотя и не прочитает файлы, как таковые, но создаст DAG, при этом воспользовавшись thread равным по количеству executors. То есть уже некоторые аспекты параллельного выполнения появляется.
    Далее, если Вы выполните следующую линию, запомнив этот DAG в неизвестном
    val df = spark.read.format("json").load("my_path_to_json_files/files_subdirectory/*.json")
    а следующим шагом, допустим, запишете этот же список файлов в формате parquet в другой файловой системе, например

    val df = spark.read.format("json").load("my_path_to_json_files/files_subdirectory/*.json")
    df.write.format("parquet").save("my_path_to_parquet_files/files_subdirectory")

    Spark воспримет эти две линии как команду создать, так называемую job, в рамках этой job Spark задаст executors их собственные Tasks в рамках этой самой job, и по мере выполнения Task на executors будет продвигаться к тому, чтобы выполнить всю Job, при этом заметьте
    задание будет выполнено параллельно
    и
    независимо друг от друга, теми самыми Тhreads.
    Стоит заметить, что если Job задает driver, то распределением Tasks, и отслеживанием стадий их выполнения ( Stages ) уже занимается Spark Scheduler.
    Так выглядит архитектура Spark при выполнении некоего задания.
    Есть ещё несколько способов обратиться к подсистеме executors с целью параллельного и одновременного выполнения задания, это
    df.edd.foreachPartitionAsync()
    но в этом случае Вам придется написать код, который уже будет выполняться настолько параллельно, насколько умело Вы владеете языком описания заданий для Spark, scala и где то java.
    Кроме параллельного выполнения заданий Spark поддерживает, через свой язык, scala, те же Threads и параллельные коллекции, которые так же способны поддерживать параллельное выполнение потоков. Но, по большей части, эти потоки будут выполняться на driver, то есть сами по себе они не будут выполняться распределено. А это уже сильно уменьшает возможности Spark использовать параллельное выполнение заданий, поскольку ресурсы одного отдельно взятого driver конечны, и при параллельном выполнении заданий driver довольно быстро их, эти ресурсы, исчерпает, если Вы попытаетесь считывать, допустим, файлы большого размера, или выполнять задания на данных большого размера.
    Я попытался найти в документации описание распределенного параллельного выполнения запросов, но как - то быстро у меня найти не получилось.
    Не поленитесь, и поищите Spark документацию. Там все эти детали досконально описаны.
    Ответ написан
    Комментировать
  • Существует возможность подключения к Microsoft Analysis Services кроме коннектора?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Есть
    https://docs.microsoft.com/en-us/analysis-services...
    XMLA, XML for Analysis протокол.
    Есть плагины для разных серверов, например IIS Microsoft, которые транслируют запросы написанные на XMLA диалекте в родные запросы аналитической службы, и отвечают таблицами данных. При чем они работают не только с Microsoft Analysis Services, но всеми службами, которые соответствуют интерфейсу, в частности есть транслятор для Kettle Pentaho, который во всяком случае раньше, работал поверх Tomcat. В прошлом году их обещали перевести на рельсы Хитачи центра разработки ПО, но я так и не удосужился познакомиться, если платформа была выпущена одним из домов Мацушита Корпорэйшн в поле открытых источников, или хотя бы как открытая платформа, её, лицензия для "коммуналки".
    Ответ написан
  • В каких случаях стоит предпочесть MS SQL Server другим БД?

    @Miron11
    Пишу sql 20 лет. Срок :)
    MySQL имеет значительно более слабая поддержка выполнения запросов
    Вплоть до 5.7 не имел процедур.
    Хотя структуры языка позволяющие создать процедуры у MySQL после этого появились, как такового языка программирования, выполнения логических операций, у MySQL не существовало. Возможно это изменилось. Но скорее нет.
    Таким образом называть MySQL полноценной СУБД нельзя.
    Если кого - то возможно не смущает создание кластеризованных индексов "по умолчанию", то для меня отсутствие подобных рычагов управления верстки цифровых записей неприемлемы.
    ----
    PosgreSQL база совершенно иного уровня, в плане академических требований, но вплоть до 9-й версии страдала от файл-объектной структуры записи, то есть каждая таблица или индекс это свой файл. Неизбежным результатом оказались провалы в аккуратности учета данных, когда от базы потребовались решения сверхзадач. Передача файловой системе ОС ответственности за аккуратность учета операций записи привели к потере самой базой доверия пользователя ( Uber ).
    Ситуация была выправлена в авральном порядке, и теперь у PostgreSQL все в полном порядке. Костяк команды разработчиков сумел быстро поправить ситуацию через несгибаемую волю и удивительный профессионализм ( как нам всем сейчас этого в России не хватает после того, как это было в избытке в советское время ).
    Поэтому с PostgreSQL на сегодня вопрос конечно не простой. Но и здесь, конечно, базе, которую поддерживают исключительными личными жертвами группа волевых и компетентных соратников, трудно тягаться с коллективом у которого есть цель, план развития, и видение изнутри всего многообразия цифровой индустрии.
    Ни у одной базы никогда не будет возможности похвастаться полноценной и постоянно улучшающейся поддержки очередей, встроенных каталогов интеграции данных, отдельная но хорошо отлаженная для совместной работы на сервере службы OLAP, и полноценного ядра обработки данных непосредственно в памяти резидента выполнимого ( Hecaton ). Плюс разнообразные форматы хранения данных, безупречная поддержка языков и кодирования символов, c SQL Server трудно состязаться. А возможность запросто вскрыть протокол общения и просмотреть запросы выполненные базой через profiler делают работу как разработчика, так и службы поддержки простой и легко поддающейся уму человека, у которого есть семья, дети, родители, и что - то в жизни, кроме работы.
    ----
    Я писал этот пост и уже тогда подумал, что MySQL и PostgreSQL не полный выбор из возможного списка конкурентов SQL Server на место СУБД. Меня, в свое время, заинтересовал Линтер. Раньше эта СУБД считалась русской, но в 2015-м - 17-м проскользнули данные о выкупе продукта зарубежными гражданами. Оставив темную историю с правами на продукт в стороне, по моим оценкам у базы есть все необходимые качества для обслуживания цифрового предприятия.
    Возможно там есть ограничения по количеству потоков, объему хранимых данных. Это наверное надо проверить с поставщиком.
    Поиск и оценку русских продуктов СУБД я веду непрерывно, и буду благодарен за любые подсказки и указатели.
    Ответ написан
    1 комментарий
  • Как в Вывести обединение таблиц по условию ??

    @Miron11
    Пишу sql 20 лет. Срок :)
    Книга без автора?
    Код книги в списке авторов?
    Если первое ещё возможно, если запись утеряна, то второе, это скорее пережиток ручной учетной записи, которую не стоит мучать в СУБД.
    Может не так элегантно, но понятнее сделать UNION
    1. select ..., min(author_id) from books inner join authors on books.author_id = authors.author_id
    group by ...
    2. select ..., 'empty' as author_id from books where not exists ( select 1 from authors where author_id = books.author_id)
    и представить их
    1 union 2
    -- CTE прекрасно работают с union, их надо вынести в предъём выражения.
    -- Если у авторов есть взаимоотношения родитель - ребенок, то эти взаимоотношения и отслеживаются в CTE, там же задается указатель уровня, по которому можно выбрать старшую запись в выборке ( where parent_level = 1 )
    Ответ написан
    Комментировать
  • Какой компилятор для языка Си посоветуете?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Я, по доброте душевной, думал Вам Windows SDK с MSBuild посоветовать. И тут прочел MSDN статью по WSL и почувствовал себя безнадежно отставшим от жизни :)))))))))))))))))
    https://code.visualstudio.com/docs/cpp/config-wsl
    Но потом посмотрел здесь https://docs.microsoft.com/en-us/cpp/build/buildin...
    и немного успокоился
    https://docs.microsoft.com/en-us/cpp/build/buildin...
    Вспомнил, что есть Visual Studio Community Edition, есть, хорошо законспирированный, но неубиваемый, Борлановский компайлер, который после 10 часов поиска раз в 10 лет спасает корабль, и все встало на место.
    Vulkan... запретный плод сладок.
    Ответ написан
    Комментировать
  • Почему не записывает значение в БД?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Может дело в символе & между Sapdragon&Time = 10.02.2002?

    Для проверки работы SQL кода не пробовали без PHP в редакторе SQL запроса
    INSERT INTO `u707651_forum`.`configs` (`CName`, `Username`, `Time`) VALUES ("Rage", "Sapdragon", "10.02.2002")
    Ответ написан
    Комментировать
  • Как прочитать и распаковать Rar/Zip файл?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Дефолт должна работать. Отсутствие "header" почти наверняка означает, что файл был обработан не утилитой, но кодом. Утилиты обязательно создают header запись.
    Возможно надо покопаться в документации дефолт библиотеки, как обработать stream, а не архив. Во всяком случае для zip файлов. Rar, возможно, имеет другие требования.
    Ответ написан
    Комментировать
  • Как правильно составить запрос mySQL с выборкой данных из другой таблицы?

    @Miron11
    Пишу sql 20 лет. Срок :)
    select logs.id
    , logs.serial
    , logs.action
    , logs.ip
    , logs.date
    from owners owners
    inner join clients clients on clients.token = owners.token
    inner join logs logs on logs.serial = clients.serial
    where owners.token = 'abcd...'
    Ответ написан
    4 комментария
  • Как сделать AUTO_INCREMENT в postgresql?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Мне больше нравятся секвенции. Около часа назад, когда нашел вопрос оказалось, что мой pgAdmin 4 серьёзно поотстал. Поставил новый, уже 64-х битовый, подсоединился к настольной службе, и только через GUI построил следующие объекты, никуда не торопясь. Все удивительно приятно и удобно. Надеюсь пригодится :)

    CREATE SEQUENCE public.testincrement_sequence
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    CACHE 1;

    CREATE TABLE public.testincrement
    (
    i integer NOT NULL DEFAULT nextval('testincrement_sequence'::regclass),
    a character varying(250) COLLATE pg_catalog."default",
    dt timestamp without time zone,
    un character varying(128) COLLATE pg_catalog."default"
    )
    WITH (
    OIDS = FALSE
    )
    TABLESPACE pg_default;
    Ответ написан
    Комментировать
  • VisualVM или IDEA?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Видимо коллекции рассредоточены в потоках ( threads ) которые что - то удерживает в памяти.
    Если Вы пользуетесь потоками ( thread ) непосредственно, то наверное надо вызывать "return" в методе run, чтобы они сигналили процесс, что их можно безопасно чистить, если же они в некоем контейнере, которым управляет некий объект по умолчанию ( pool ), то здесь все зависит от контейнера, есть хорошие, но бывают всякие :)
    Ответ написан
    Комментировать
  • Как правильно составить SQL запрос?

    @Miron11
    Пишу sql 20 лет. Срок :)
    select count(*) from (select game, game_id from bets group by game, game_id) as dt
    Ответ написан
    Комментировать
  • Как скопировать представление?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Иногда view создают в какое - то время, а потом база меняется.
    И так view может и есть, но не работает.
    Их можно игнорировать.
    Если базы на самом деле одинаковые, это одно из таких устаревших view, которое не построится и на той базе, из которой Вы его оригинально взяли.
    Возможно есть другие причины... поделитесь копией ошибки и, если имеет смысл, строкой, которая её вызывает.
    Ответ написан
    Комментировать
  • Как создается серверная часть программно-аппаратного устройства?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Каждое устройство имеет своего поставщика.
    В проэктах, в которых я принимал участие, вендор предоставлял некоторый пакет ПО, который дает доступ к набору функций, с помощью которых с устройством можно общаться. Как правило описывается дополнительный, инженерный вход, для отладки ПО, доступ к которому либо с помощью специального разъема, либо через хорошо известный стандарт ( например I2C )
    На каких языках поставщик предоставляет вход в устройство как правило описано в технической документации. Обычно устройства защищающие допуск к машине имеют выход через библиотеки на С++, это связано с требованиями по интеграции с устройствами ввода вывода, которые традиционно пишутся для этого языка.
    3 месяца это приемлемый срок для проэкта, где все на местах, включая команду профессионалов, и надо внедрить новый компонент.
    Если надо писать защищенное хранилище для паролей, если надо писать ярус интеграции с ярусом защищенных цифровых продуктов шифрующих и защищающих содержание, если есть ( высокая ) вероятность изменений других компонентов машины, с которыми в свою очередь этому сенсору надо как - то вместе работать, то одни внешние зависимости займут хорошие 2 месяца на усушку - утруску, то есть брать на себя ответственность сделать все за 1 месяц в такой ситуации не рекомендую.
    Если же задача просто наладить обмен информацией с новым устройством, то тогда все иначе. На нашем проэкте смена встроенного шифровального устройства на внешнее сетевое заняла 2 недели от запроса до выхода продукта на линию и безупречной работы.
    Многое зависит от того, что именно необходимо сделать.
    Ответ написан
    2 комментария
  • Запрет на редактирование строки в Mysql по ID?

    @Miron11
    Пишу sql 20 лет. Срок :)
    снимите привилегии пользователей, которые сейчас созданы в базе данных. Оставьте им право читать. Особое внимание уделите административным учетным записям, например root. В моей практике мне не приходилось защищать конкретно MySQL, поэтому я не знаю, можно ли изменить имя пользователя root, если можно, сделайте это, конечно же изменив его пароль.
    Сделайте специальный логин, которому присвоено разрешение изменять данные. Запомните пароль этого пользователя и сложите его в сейф. Ключ от сейфа повесьте на шею и никому не давайте.
    Сделайте так, чтобы вход с паролем этого пользователя имел отдельный доступ к базе данных. Чтобы его не надо было выводить где - то в конфигурации программы, обеспечивающей работу сайта. Входите в этот счет с паролем через защищенное приложение так, чтобы никто не смог ни увидеть ваш пароль, ни считать его через какие - то устройства, в частности тех, которые слушают что передается по сети. В принципе все современные программы, которые приходят с продуктом защищают пароль логина. Но детали могут быть существенны, прочтите документацию, если есть сомнения. Там как правило описывается хорошо ли защищен сам процесс присоединения к базе данных тем или иным устройством.
    Ну и наконец, защитите таким же подходом машину на которой установлена база данных и сайт.
    В конце - концов, если с первой попытки не получится, и кто - то продолжит "безобразничать", повторите цикл, только теперь уже с некоторым опытом прежней тренировки.
    По мере работы над этой областью рано или поздно Вы столкнетесь с тем, что либо человек, либо какой - то процесс установленный либо на машине, либо в самом приложении сайта, выполняет подмену указателей адресов, либо заметив этот процесс и сличив временные метки записей - их изменений, либо заметив, что кто - то присоединился к базе данных без разрешения с высоко привилегированным пользователем. Обнаружить это можно так же установив триггеры на таблицах, фиксирующие изменения, включая время записи имя учетной записи и значение поля до изменения и после. Проблема в том, что Ваша база в данный момент эксплуатируется не по назначению неким третьим лицом, и это лицо может исказить и эти трассировочные записи, поэтому на начальном этапе необходимо все - таки изолировать пользовательские записи и засекретить вход имеющий привилегии менять данные и административно распоряжаться ресурсами.
    Ответ написан
    4 комментария