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

    @Miron11
    Пишу sql 20 лет. Срок :)
    1. подзапросы типа exists лучше для
    • распределенных баз
    • минимизации ресурса памяти и уменьшения или изъятия параллелизма

    2. join лучше для
    • локальной базы
    • концентрации ресурсов на выполнении запроса

    3. outer apply / lateral join позволяют использовать преимущества correlated subqueries и выбирать данные, существенные преимущества
    • минимизируются изменения логики выборки данных
    • часто удается вовлечь индексы в выборку, не обращая внимание на распределение данных внутри домена, когда рост количества таблиц вовлеченных в inner / outer join с различными срезами данных, ведет к отказу оптимизатора запросов использовать индексы
    Ответ написан
    Комментировать
  • Ошибка #1064. Как объявлять переменные в mysql 8.0?

    @Miron11
    Пишу sql 20 лет. Срок :)
    пример из книги, поищите ее, это классика
    MySQL Stored Procedure Programming
    By Steven Feuerstein, Guy Harrison
    ...............................................
    Publisher: O'Reilly
    Pub Date: March 2006
    Print ISBN-10: 0-596-10089-2
    Print ISBN-13: 978-0-59-610089-6
    Pages: 636

    -------------------------------------------
    CREATE TRIGGER account_balance_au
     AFTER UPDATE ON account_balance FOR EACH ROW
    BEGIN
      DECLARE dummy INT;
    
      IF NEW.balance<0 THEN
         SET NEW.balance=NULL;
      END IF;
    
    END
    $$
    Ответ написан
    Комментировать
  • Как записать значение в файл и зашифровать его на языке C?

    @Miron11
    Пишу sql 20 лет. Срок :)
    тут дело не в си или не си, шифрование данных предполагает наличие не связанного с записью файла канала передачи данных
    по-простому люди обходились без компьютеров, чтобы обеспечить те же возможности много-много лет, был гонец
    e91220a637c9320f74982.jpg
    который был наделен царским вензелем, и все, чо он нес был пароль3a8faaf3192a76791a346ab9021fb6b4.jpeg
    прежде, чем что-то шифровать Вам придется понять как Вы перенесете пользователям пароль
    для этого вам надо познакомиться с различными схемами шифрования, и по крайней мере одну из них признать достойной доверия
    потому, что главной изюминкой различных схем шифрования является именно механизм, устройства контроля и подтверждения доверия шага передачи пароля назначенному получателю
    такой вот глубокой проработки без вам больше подойдет записать те самые 30 в файл, и сделать у себя резервную копию этого файла
    слать этот файл кому необходимо
    а когда файл пришлют назад, и там 100500 позвонить пользователю по телефону и спросить., что долно быть на самом деле.
    в данном случае паролем является голос собеседника, за миллионы лет избирательность этого инструмента подтверждения личности собеседника достигла очень высокого совершенства, более того, по интонациям голоса и некоторым жизненным социальным приемам мы, люди, без исключения, наделены способностями выяснить насколько искренен наш собеседник.
    ну а если Вы все таки решитесь создать код с цепочкой инструкций кодирующих пошаговое выполнение столь не простой процедуры, то только тогда придет время си или не си
    Ответ написан
  • Выбор базы данных для быстрой записи меняющихся данных?

    @Miron11
    Пишу sql 20 лет. Срок :)
    и что, вы взяли коэффициент к в 0 часов, ав 0 часов 1'' коэффициент k поменялся k`, и кто-то тем старым коэффициентом k воспользовался.
    Вы серьезно ок забыть, какой он был?
    Наверное даже во время запроса по списку, часть коэффициентов изменится, по мере считывания, при том, что все, как задумано,но по-честному Вам бы наверное хотелось список "к" в 0 часов список в 0 часов + 1 версия + 2 ... n версия.
    Учитывая 300 значений/3 секунды по 32 бита на каждый получаем 1,2МБ в час. В принципе копейки для MySQL
    Редиску можно встроить для текущего слепка, если хочется немедленный ответ из буфера.
    Ответ написан
    Комментировать
  • Книги, курсы по архитектуре приложений?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Один мудрый индийский рекрутер поделился со мной аббревиатурой TOGAF, а всё остальное я нашел сам.
    Надеюсь Вам тоже поможет.
    Не самое важное, на мой скромный взгляд вопрос тянет на уровень сложности средний.
    Ответ написан
    1 комментарий
  • Почему у меня под конец в листе rows начинают хранится одни и те же значения?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Есть два подхода, чтобы справиться, перенести линию кода
    string[] row = new string[rd.FieldCount];
    сюда
    while (rd.Read())
    {

    сразу после фигурной скобки, или изменить линию кода
    rows.Add(row.Clone());
    Причина, array это "reference type", познакомиться с описание reference type можно здесь, ключ к пониманию следующий абзац:
    With reference types, two variables can reference the same object; therefore, operations on one variable can affect the object referenced by the other variable.
    . Точнее, что такое reference type потребует отладчик и работу с MSIL. Вот как описывает reference type MSIL standard:

    I.8.2.1 Value types and reference types
    There are two kinds of types: value types and reference types.
    [...]
     Reference types –A value described by a reference type denotes the location of another
    value.
    По этой причине, не смотря на то, что вы трижды сместили строку в DataReader, запись каждый раз производилась в один и тот же блок данных, переписывая его, а три записи в неизвестной лист были обращены к одному и тому же блоку.
    Ответ написан
    Комментировать
  • Как сделать min() по join таблице в построителе запросов?

    @Miron11
    Пишу sql 20 лет. Срок :)
    SQL
    ---
    select department.*
             , coalesce(dptSlr.minSalary, 0.00) as minSalary
    FROM `department` 
    left outer join 
    (SELECT employee.departmentId, MIN(employee.salary ) AS minSalary 
        FROM employee
        GROUP BY employee.departmentId) dptSlr
    on department.id = dptSlr.departmentId;
    Ответ написан
    Комментировать
  • Как в Selenium Java получить в элементах интрересующие атрибуты (метод findElements()), а потом нажать, в любой элемент, который подходит?

    @Miron11
    Пишу sql 20 лет. Срок :)
    I think you just dialed a bit too far with
    time = driver.findElements(By.xpath(TIME_CHECK)).iterator().next().getAttribute("class");
    with . approach.
    Usually what we do, if you do want to use this convoluted one - liner ( in c# for example ) is call ( this is a pseudocode )
    .iterator().firstOrDefault()
    and that way we get the value.
    In Java I think there are methods such as tail(x) / head(x) / first(x) invoked on the collection ( here it is probably the return of findElement()) which will return an array from which you can take [0] element ( which may fail to null exception )
    The Java pattern is to first check for null and than perform value access.
    So, you can see that while one - liner can look nice, it would require a bit higher effort at understanding internals.
    Simpler pattern is to scroll using iterator
    while(driver.findElements(By.xpath(TIME_CHECK)).iterator().next()) {
    x = driver.findElements(By.xpath(TIME_CHECK)).iterator().current() / item()
    myValue = x.method / property
    break or something else
    }
    This takes a few more lines, but is easy to follow and debug. Personally, I use both approaches, depending on context, but when in doubt the easier one.
    ---
    I was under impression this is where error occurs ( please correct me if I am wrong ).
    If my understanding is correct, the rest looks like somewhat working approach.
    Except it's probably an pattern specific to Selenium.
    In an application, if I wanted to be able to perform some action on items, found in the cycle of the iterator above, while cycle is still running, I'd use a
    yeld
    pattern, and organize concurrency by means of function invoked in yeld block with item / value passed as parameter. Give me a moment to find an example.
    Darn it, yeld is c# pattern, ported to java only as of release 13.
    So, just save the value to list in the cycle and run over it once iterator is done.
    It shouldn't take too long.
    Ответ написан
    Комментировать
  • Как рандомизировать адреса функций в ELF-файле?

    @Miron11
    Пишу sql 20 лет. Срок :)
    смещение адреса функций можно отрегулировать после сборки, есть всякие редакторы для выполнимых
    случайные адреса функций внутри блока, это ответственность так называемых обфускаторов, как правило это отдельные утилиты встроенные в пакеты сборки, возможно GCC имеет встроенный тогда да, может быть флаг, по которому функции будут иметь случайные адреса
    поскольку конкретный флаг легко ищется в яндексе не сложным запросом, будьте так добры, поделитесь в комментарии, когда найдете :)
    Ответ написан
    Комментировать
  • Как ссылаться на другое поле в yaml файле?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Does this help?
    Ответ написан
    Комментировать
  • Русский open-source, есть ли он?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Сделай свой?
    Для начала не надо даже создавать продукт, в привычном понимании слова. Сделайте, например, словарь выражений для выборки данных. Презентуйте здесь с просьбой о критике.
    Мы пока говорить с машинами по-русски не умеем, а должны.
    Я сам пробовал, но я музыкант. У меня на каждый полутон по 200 приемов, как его разукрасить. Здесь не нужно быть старшим. Достаточно быть просто технически грамотным.
    Ответ написан
    Комментировать
  • Как оформить все свойства книг не через константы?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Try Delta Lake Connectors:
    This is a path to use dataframe ( with data stored in something like parquet ).
    This allows to store / maintain data in a simple and portable data store.
    You can keep it on local machine, or push to cloud.
    Access using above or any other technology, capable of understanding parquet.
    In its simplest direct application DSR/DSW provides for
    .filter
    and other expressive methods, good for business and pleasure to code.
    And you won't have to struggle with nested maps and such, which will be dead - end regardless, once number of books is larger than, say, 500, or you need to produce monthly report from bot activities, whichever comes first :)
    Ответ написан
    Комментировать
  • Почему SQL запрос неправильный?

    @Miron11
    Пишу sql 20 лет. Срок :)
    select good, amount as sum from Payments
    order by sum desc;
    Ответ написан
    Комментировать
  • Как в Selenium Java обойти UnhandledAlertException?

    @Miron11
    Пишу sql 20 лет. Срок :)
    catch "Throwable t" ( if it exists in this variant of Java ).
    The downside, if it is intercepted, it may, potentially, intercept everything else.
    So, you may want to check for specific error message, before letting it be ignored.
    So that you do not miss something interesting.
    Ответ написан
  • Есть ли разница в экране realme 9 pro+ и samsung s21+?

    @Miron11
    Пишу sql 20 лет. Срок :)
    у 21-го стекло экрана хрупкое, разбивается, если уронить ( одна из рекламных фишек, якобы стекло устойчиво к удару )
    довольно прожорливый
    чем удобен, заправляется без провода,
    разъём хрупкий, это помогает, если беречь, сохранить устройство работающим
    еще у него антенны лучше защищены от помех, чем у устройств попроще
    если вам важно для дела, или удовольствия, иметь возможность вести переговоры независимо от внешних помех, то более дорогой телефон стоит затрат, а так, если не проблема выйти на улицу побеседовать, когда дома искрит мотор стиралки, то смысла в дорогом телефоне абсолютно нет
    если есть часы от самсунг, то у 21го есть дополнительные фишки, которые его выделяют в класс выше. Например пакет по для измерения давления. Алгоритм работает с оговорками и пока только Эппл может похвастать лицензией государственного департамента еды и лекарств США, но так, не совсем легально, но очень удобно, есть фишка. И в 21м году она была реализована только на 21м изделии фирмы. Возможно в 22м все устройства фирмы интегрируются с этими возможностями? - не знаю
    прошу прощения, если не ответил на вопрос :)
    Ответ написан
  • MSSQL and mysql в чем отличие?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Не удалось выполнить действие "Создать" для следующего объекта: "Пользователь", "sa".
    ---
    И чем вас это обеспокоило? Пользователь sa уже создан, ошибка в данном случае вполне может быть проигнорирована.
    ---
    Есть наверное различные пакеты для трансляции MSSQL Server -> MySQL. запрос в Яндексе "migration from sql server to my sql" третьей линией привел сюда.
    По опыту, на поверхности, многое действительно поддается трансляции, но процедуры и функции, нет.
    Но чуть от поверхности, MySQL уступает в плане отладки и выявления ошибок. А проблемы с правами пользователей мало отличаются. Попытка создать пользователя, который уже есть приведет к той же ошибке и в MySQL.
    Есть конечно возможности отладить код создающий объекты, применяя "IF NOT EXIST" выражение. Профессионалы используют два подхода для кода создающего объекты.
    Подход №1 - фирменный подход специалистов, проверять существование объекта, прежде чем его создать.
    Людям свойственно это делать, чтобы обеспечить наименьшие трения с чтением и пониманием ошибок. В этом случае детальное чтение ошибок необходимо для выявления дефектов.
    Такой код удобен тем, что его можно повторять снова и снова, результат будет всегда один и тот же, а ошибки будут выданы только в случае дефекта, или записи будут чистыми.
    Подход №2 - обычно используют создатели по, которое пишет скрипт "создать такой-то объект", с оглядкой на профессионального пользователя, который ( как считают создатели по ) достаточно знаком и с синтаксисом, и с важностью тех или иных сообщений, и сможет прочитать "с листа" записи машины, и справиться с выдачей решения "все хорошо" или "что-то сломалось" благодаря накопленным знаниям.
    У меня сложилось впечатление, что Вы работаете с кодом, созданным в подходе №2. Возможно если Вы прибавите детали, и опишете что Вы делаете, отвечающим на вопрос будет проще справиться с ответом.
    Всего хорошего
    Ответ написан
    2 комментария
  • Как в Elasticsearch проверить, что массив содержит определенное количество значений?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Did you try this approach, adjusting to field names.
    Passed test on ES 8.2.2:
    {
      "aggs" : {
        "@timestamp": {
          "terms" : { "field" : "@timestamp"},   
    
      "aggs": {
        "shift_count": {
          "value_count": { "field": "shifts.id" }
        },
        "shift_count_filter": {
          "bucket_selector": {
            "buckets_path": {
              "shiftCount": "shift_count"
            },
            "script": "params.shiftCount > 1"
          }
        }
      }}}
    }

    I am still searching how to apply filter over aggregate using "filtered" query approach, something like
    select * from ( select count(*) as count_of_items, item_name from item_collection group by item_name ) as inner_query 
    where count_of_items > 1

    as this approach, using aggregates feels more like a workaround ( thought robust to use in production ).
    If you come over something interesting, please post here.
    ---
    I don't know the reason as to why, since I just installed elasticsearch to investigate your question, the approach with measuring array using property values and function size() didn't work.
    Based on all I have learned so far, the dynamic property, currently set to false on the shifts field may need to be modified to false, to enable dynamic scripting.
    For aggregate approach above to work over nested field with text sub - field, the field may need to be applied with "fielddata" attribute set to true, by default if is false on such fields. It could be this is a new behavior since version 8.2.2. Here is error message I was getting in some experiments
    "type" : "illegal_argument_exception",
    "reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [...] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
    here is script to apply fielddata attribute:
    shifts: {
      type: 'object',
      dynamic: false,
      fielddata: true,
      properties: { id: { type: 'keyword' }, { type: 'keyword' } },
    }

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

    @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.
    Ответ написан
    Комментировать