Pay for the code

Events from the world of KolibriOS and its developers
  • Привет есть работка на заказ ?
  • HasbersHz wrote: Sat Sep 02, 2023 9:02 pm Делаю переименование NTFS. Скорее всего срок 0.5-3 месяца. Заинтересован в остальном, но выглядит сложно.
    Там сложность в том, что нужно обеспечить надёжность операции. Для переименования нужно создать новый индекс и удалить старый. С удалением могут быть проблемы по пункту 3 viewtopic.php?p=67988#p67988
    То-есть, что делать если новый индекс создан, а старый удалить не удаётся? Нужно сначала исправить пункт 3, а там читать пункт 1.
  • Lorddress wrote: Sun Sep 03, 2023 12:50 am Привет есть работка на заказ ?
    Да.
    Из хаоса в космос
  • HasbersHz wrote: Sat Sep 02, 2023 9:02 pm Делаю переименование NTFS. Скорее всего срок 0.5-3 месяца. Заинтересован в остальном, но выглядит сложно.
    Хорошо. Могу добавить в чат разрабов, если хочешь. Напиши мне свой ТГ в личку в таком случае.
    Из хаоса в космос
  • What task can you give me and can we somehow interact through instant messengers, such as Telegram?
  • You can pick any task mentioned in the opening post. Feel free to ask questions here or in our telegram group t.me/kolibri_os
  • I have finished a QR code generator and would like to claim the bounty.
    I am unfamiliar with code submission processes. Should I post the code on pastebin and share a link to it?
    Image
  • Hello,

    I am the mentor for the QR task. You can share the code any way you prefer, e.g. attach to your post in this thread, post to github, request a new account on https://git.kolibrios.org in PM and push it there, anything else.

    The payment was declared as $100-200 depending on the amount of work done. Please, specify what has been done (or not done): QR code variants, a kernel function, etc. Any tests?

    I hope you enjoyed the task. The screenshot looks great :)
  • Implementing the algorithm was fun, however some of the debugging process was dreadful. It was only today that I found out the debugger can load symbols.
    This is my first significant project in ASM.
    I didn't make a kernel function.
    Some last-minute tests are included around line 155; they all decode successfully when I scan them. I did not test any character encodings other than UTF8 and cp1251.

    This program implements a subset of the features of QR Code, or QR Code Model 2, as defined in ISO/IEC 18004:2015. This program does not produce Micro QR Code, nor QR Code Model 1.

    Out of the default encodable character sets, namely numeric, alphanumeric, byte, and kanji, kanji is not supported.
    Reflectance reversal (color inversion) is not implemented in this program. This means QR codes are only produced with dark features on a white background. Mirror imaging is also not implemented.

    This program does not provide a way to select the desired level of error correction; instead it finds the smallest size of QR code with the highest level of error correction that is able to contain the message.

    Extended Channel Interpretation is partially supported, however this program does not allow using more than one character set in each message, nor mixing modes. This program automatically escapes any backslashes found in an ECI message.
    ECI assignment numbers greater than 127 are not supported.
    Structured append mode is not implemented.
    FNC1 mode is not implemented.

    Some non-trivial upgrades to this program would be:
    In-place interleaving of data codewords and error correction codewords, to reduce memory usage.
    Allowing the user to define size/shape of modules of the QR code, for use in high-resolution displays or displays with non-square pixels.
    Attachments
    QRclipboard.asm (67.53 KiB)
    Downloaded 13 times
  • Your QR related code looks like a disassembly of some C code you didn't mention. What was the reference code? Doesn't seem to be a 'from scratch' implementation as requested.

    If it is your from scratch implementation, you should be able to explain the logic behind this part of your code.

    Code: Select all

    mask11:
        mov eax, DWORD [ebp - 8]
        and eax, 1
        jne  mask27
        mov DWORD [ebp - 28], 1
        jmp  mask28
    mask27:
        and DWORD [ebp - 28], 0
    mask28:
        mov al, BYTE [ebp - 28]
        mov BYTE [ebp - 1], al
        jmp mask8
    mask12:
        mov eax, DWORD [ebp - 12]
        cdq
        push 3
        pop ecx
        idiv ecx
        test edx, edx
        jne  mask29
        mov DWORD [ebp - 32], 1
        jmp  mask30
    mask29:
        and DWORD [ebp - 32], 0
    mask30:
        mov al, BYTE [ebp - 32]
        mov BYTE [ebp - 1], al
        jmp mask8
    mask13:
        mov eax, DWORD [ebp - 8]
        add eax, DWORD [ebp - 12]
        cdq
        push 3
        pop ecx
        idiv ecx
        test edx, edx
        jne  mask31
        mov DWORD [ebp - 36], 1
        jmp  mask32
    mask31:
        and DWORD [ebp - 36], 0
    mask32:
        mov al, BYTE [ebp - 36]
        mov BYTE [ebp - 1], al
        jmp mask8
  • Yes, most of the code is taken from the ASM output of a compiler with optimizations disabled, as I found that with optimizations enabled, the code would work erratically or not at all when tested in KolibriOS. In the makeQR function I kept the names of local variables, whereas in the ancillary functions I did not.
    The original C++ code, which I did write myself, can be seen here: https://pastebin.com/wazUKhQR

    After writing the C++ code to understand the algorithm, I tried to write it again in FASM from scratch. Although I made some progress, eventually I got stuck in debugging. That's why I decided to just use the output of the C++ compiler.

    The quoted code is part of the masking function, specifically the patterns 1, 2, and 3.
    In pattern 1, which is between labels mask11 and mask12, the row number is ANDed with 1 as a substitute of the "modulo 2" operation. According to whether the result is 0 or 1, a 1 or 0 respectively is stored in an unnecessary local variable (created by the compiler), then the content of that local variable is stored in another local variable which I call "flip" that indicates if the current pixel of the QR code should be inverted or not.
    In pattern 2, between labels mask12 and mask13, the column number is converted to a quadword and divided by 3. Another unnecessary local variable is given a 1 or 0 according to whether the remainder of the division is 0 or not. The content of that local variable is then stored in the "flip" variable.
    In pattern 3, the row and column numbers are added together, and the result is treated much like the column number in the previous pattern, involving yet another unnecessary local variable.
  • It's great the reference C++ code is written by you. I do value your effort to study the algorithm. That said, I will be ready to pay only for fasm code written from scratch. As you understand, disassembly is almost impossible to maintain, fix and improve. You are welcome to ask questions on how to do things in fasm for KolibriOS but you can't get money for disassembly, sorry.

    If you want to learn more about KolibriOS and fasm, people here will share their knowledge. This way you will improve your skills, rewrite your algorithm from scratch in fasm eventually and get paid. This will take some time though.
  • Who is online

    Users browsing this forum: No registered users and 0 guests