Pull to refresh
0
@vdemread⁠-⁠only

User

Send message
Вы же по-прежнему не продаёте Novec 1230 (Фторкетон ФК-5-1-12) в розницу

Возможно, по этой причине:
Пары вещества разлагаются в атмосфере под воздействием солнечного света, ультрафиолета или при нагревании с образованием токсичных веществ, в том числе фтороводорода (при взаимодействии с парами воды), трифторуксусной кислоты, угарного и углекислого газов. Поэтому компания 3M ограничивает применение вещества только профессиональной сферой. (Википедия)
Ее и не собиралсь запускать, неужели не очевидно? Оно ж даже не на стартовой площадке было, а на стенде.
А в предыдущем комменте (за ~3 часа до вашего) на какой шаблонизатор ссылка?
Ну чтоб совсем быстро было, можно вообще не париться с фреймворками и обойтись даже без подключения дополнительных файлов. Т.е. и конфиг для доступа к БД, и подключение к ней, и выборка/запись данных и прочая логика, и HTML — в одном файле. Будет ОЧЕНЬ быстро :D Так делали 20-25 лет назад. А если серьезно, то например само подключение к БД займет намного больше времени (если оно используется, конечно).

P.S. Я хочу сказать, что это не тот случай, когда следует беспокоиться о производительности. Ну выиграете вы с eval несколько лишних микросекунд (если, конечно, выиграете), толку с этого?

P.P.S. Ведь view все равно подключать надо как отдельный файл, или вы это в контроллере хранить собираетесь? И параметры ему распаковать тоже надо.
Ну так я ту самую идею и написал, просто без подробностей типа обработки ошибок.
Вместо eval может больше подойти что-то вроде
class Renderer
{
...
    function render($viewPath, array $params = [])
    {
        extract($params);
        include($viewPath);
    }
...
}

Ну и использовать ob_* функции если надо вывод перехватить.
Там выше ссылка на osdev, где показано как это делается.
А не лучше ли вместо
$html = '<html><head></head><body>';
foreach ($data as $message) {
    $html .= "<p>$message->code : $message->message</p>";
}
$html .= '</body></html>';

делать
<html><head></head><body>
<?php foreach ($data as $message) { ?>
    <p><?= $message->code ?> : <?= $message->message ?></p>
<?php } ?>
</body></html>


Такой подход мало чем отличается от прочих шаблонизаторов.
Я что-то такое читал на osdev. Просто с long mode еще не разбирался, а с protected mode игрался еще в старших классах. Ну и я не супероперационку делаю, просто балуюсь :) Хотел вспомнить ассемблер — написал загрузик, вспомнил, ну и забил пока. Будет совсем нечего делать — попробую уже с grub поиграть.

P.S. Ну вот выше как раз ссылку на ту статью дали.
Ну это да, я вот тоже не так давно игрался, вспоминая былые времена :) Просто решил что нет смысла дальше возиться с защищенным режимом (который я кое-как помню еще) если сейчас используется long mode.

Заголовок спойлера
use16
org 0h

; ---------------------------------------------------------------------------------------
; Boot
;
; DL - Boot drive number
; ---------------------------------------------------------------------------------------

; Start
    mov     ax, 07C0h
    mov     ds, ax

; Initialize stack
    mov     ax, 9000h
    cli
    mov     ss, ax
    mov     sp, 0FFF0h
    sti

; Set destination segment to load kernel to
    mov     ax, 50h
    mov     es, ax

    mov     si, msg_boot_loading
    call    print_string

; Reset floppy drive
    mov     ah, 0
    int     13h
    jc      .boot_error

; Load kernel into memory
    mov     ax, 0
    mov     bx, sectors_per_track
    mov     cx, heads_per_cylinder
    call    calc_chs

    xor     bx, bx ; es:bx -> buffer
    mov     al, 18 ; sectors count; read 18 sectors of loader
    mov     ah, 2
    int     13h
    jc      .boot_error

; Set data segment
    push    es
    pop     ds

; Pass control to kernel
    push    ds
    push    word kernel_entry
    retf

; Show error
.boot_error:
    mov     si, msg_fail
    call    print_string

.boot_finish:
    hlt
    jmp     .boot_finish

;
; Print String
;
; DS:SI must point to zero-terminated string
;------------------
print_string:
    pushf
    push    ax
    push    bx
    push    si
    cld
    mov     ah, 0Eh
    mov     bh, 0
print_string.repeat:
    lodsb
    cmp     al, 0
    je      print_string.finish
    int     10h
    jmp     print_string.repeat
print_string.finish:
    pop     si
    pop     bx
    pop     ax
    popf
    ret

;
; Calculate CHS address by logical sector address
;
; AX - Logical sector number
; BX - Sectors per track
; CX - Heads per cylinder
; Returns (ready for Int13h:02h call):
; CL - Sector number
; CH - Track number
; DH - Head number
; -----------------
calc_chs:
    pushf
    push    ax
    push    bx
    xor     dx, dx ; prepare dx:ax for operation
    div     bx ; divide by sectors per track
    inc     dl ; add 1 (obsolute sector formula)
    mov     bl, dl
    xor     dx, dx ; prepare dx:ax for operation
    div     cx ; mod by number of heads (Absolue head formula)
    mov     dh, dl ; everything else was already done from the first formula
    mov     ch, al ; not much else to
    mov     cl, bl
    pop     bx
    pop     ax
    popf
    ret

; Data

msg_boot_loading        db 'Loading kernel... ', 0
msg_ok                  db 'Ok.', 0Dh, 0Ah, 0
msg_fail                db 'Failed!', 0Dh, 0Ah, 0

sectors_per_track       dw 18
heads_per_cylinder      dw 2

times 510 - ($ - $$)    db 0
                        dw 0xAA55

; ---------------------------------------------------------------------------------------
; Kernel (real mode)
; ---------------------------------------------------------------------------------------

; CS, DS, and ES now set to 0050h, SS to 9000h

kernel_entry:
    mov     si, msg_ok
    call    print_string

    mov     eax, 0FAFAFDFDh
    shr     eax, 16
    cmp     ax, 0FAFAh
    jne     .fail

    mov     si, msg_ok
    call    print_string

; push 0B800h
; pop es
; xor di, di
; mov word [es:di], 0730h

    nop
    nop
    nop
    nop
    mov     ax, an_address

.finish:
    hlt
    jmp     .finish

.fail:
    mov     si, msg_fail
    call    print_string
    jmp     .finish

; ---------------------------------------------------------------------------------------
; Kernel (protected mode)
; ---------------------------------------------------------------------------------------

; Data

gdt:

; null descriptor
                        dd 0
                        dd 0

; code descriptor
gdt_code_limit_low      dw 0FFFFh
gdt_code_base_low       dw 0
gdt_code_base_middle    db 0
gdt_code_access         db 10011010b
gdt_code_granularity    db 11001111b
gdt_code_base_high      db 0

; data descriptor
gdt_data_limit_low      dw 0FFFFh
gdt_data_base_low       dw 0
gdt_data_base_middle    db 0
gdt_data_access         db 10010010b
gdt_data_granularity    db 11001111b
gdt_data_base_high      db 0

;
; Print Byte
;
; AL - byte to print
;------------------
print_byte:
    pushf
    push    ax
    push    dx
    mov     dl, al
    shr     al, 4
    add     al, 48
    cmp     al, 58
    jl      print_byte.print
    add     al, 7
print_byte.print:
    call    print_char
    mov     al, dl
    and     al, 0Fh
    add     al, 48
    cmp     al, 58
    jl      print_byte.print2
    add     al, 7
print_byte.print2:
    call    print_char
    pop     dx
    pop     ax
    popf
    ret

;
; Print Char
;
; AL - char to print
;------------------
print_char:
    pushf
    push    ax
    push    bx
    xor     bx, bx
    mov     ah, 0Eh
    int     10h
    pop     bx
    pop     ax
    popf
    ret

;
; Print New Line Chars
;
;------------------
print_nl:
    pushf
    push    ax
    mov     al, 0Dh
    call    print_char
    mov     al, 0Ah
    call    print_char
    pop     ax
    popf
    ret

;
; Print Word
;
; AX - word to print
;------------------
print_word:
    push    ax
    mov     al, ah
    call    print_byte
    pop     ax
    call    print_byte
    ret

;
; Print Bytes
;
; DS:SI - pointer to data to print
; CX - number of bytes to print
;------------------
print_bytes:
    pushf
    push    ax
    push    cx
    push    si
print_bytes.repeat:
    mov     al, [si]
    call    print_byte
    dec     cx ; !!
    inc     si
    jcxz    print_bytes.finish ; replace to loop???
    mov     al, 20h
    call    print_char
    jmp     print_bytes.repeat
print_bytes.finish:
    pop     si
    pop     cx
    pop     ax
    popf
    ret

;
; Print Number
;
; AX - number to print
; BL - number base (2, 8 or 10)
;------------------
print_num:
    pushf
    push    ax
    push    bx
    push    cx
    push    dx
    xor     cx, cx
    mov     bh, 0
print_num.repeat:
    xor     dx, dx
    div     bx
    push    dx
    inc     cx
    cmp     ax, 0
    jne     print_num.repeat
print_num.output:
    pop     ax
    add     al, 48
    call    print_char
    loop    print_num.output
    pop     dx
    pop     cx
    pop     bx
    pop     ax
    popf
    ret

;
; Print Decimal Number
;
; AX - number to print
; -----------------
print_decimal:
    push    bx
    mov     bl, 10
    call    print_num
    pop     bx
    ret

an_address:

;
;
;
;
; -----------------



Вообще скорее просто ассемблер хотел вспомнить от нечего делать.
В качестве загрузчика лучше уж тот же grub использовать. Зачем велосипедить? Впрочем я недавно сам всё это писал, чисто вспомнить детство, дошел до загрузки ядра и остановился на переходе в защищенный режим, именно потому что подумал, что нет смысла это всё писать, если можно использовать уже готовое решение, к тому же более универсальное.
Завтра стыковка, надо будет тоже посмотреть :)
Вот и я сначала пишу какую-то небольшую часть кода, прикидываю, что получается, и когда картина более-менее ясна, дальше уже продолжаю кодить одновременно с написанием тестов. Здесь тесты очень помогают не сломать что-то очередными изменениями.
Интересно, но не вычитано настолько, что с середины просто надоело. Обычно я через Ctrl+Enter отправляю сообщения о серьезных ошибках/опечатках, но в данном случае это было бы с моей стороны DoS-атакой :) Это что, публикация «для галочки»?
Так бы и в заголовке написали, что это про российских фрилансеров.
Т.е. автор накатал целую статью чтобы рассказать, как он намучился, не умея пользоваться программой. Я в свое время тоже с GnuPG работал, и да, там не все с ходу понятно. Но есть же наверняка для него графические оболочки или вот как выше написали плагины для почтовых клиентов.

P.S. Прошу прощения, не сразу увидел что это перевод. Отредактировано.
Так я и не спорю с тем, что облака — это хорошо :) Я еще в конце 90-х в старших классах подобную идею вынашивал. Просто сомневаюсь что например тем же банкам или АЭС следует экономить на собственной инфраструктуре и переезжать в облако. Ну и вычисления разного рода там можно проводить, и хранить не особо ценную информацию.
По моему скромному имху, в облаках стоит держать только некритичные данные и сервисы. Или вообще использовать облака только для быстрого развертывания, перенося понемногу потом на свои серверы как в старые добрые времена. Если уж конкретно вашу систему взломают, то ну не повезло / допустили дыру в безопасности, и это коснется только вас. Если взломают облако — пострадают все клиенты. Сколько уже было историй про утечки пользовательских данных хотя бы с тех же почтовых сервисов? Правда, это мнение просто человека который из-за косности и консервативности ко всему новому относится с подозрением, как к очередному хайпу :)
Вот не знал про эту killing feature гугла. А у меня аккаунт там как раз с точкой. Только что с другой почты отправил к себе на гугл, только в адресе на написал точку — и пришло! Удоды.

P.S. Хорошо что это у меня далеко не основной аккаунт, я им вообще почти не пользуюсь. Основной на другом сервисе, на который пока жалоб у меня не было (ну почти).
Вообще к «классическому» рынку это уже никак не относится. У Адама Смита он какой-то идеальный: да, есть конкуренция, но почему-то она есть всегда. В таком упрощенном понимании нет появления монополий. Допустим, какой-то производитель изобрел способ уменьшить издержки/модернизировать производство, и уже получил преимущество перед другими. У него нет стимула оставлять их на рынке, и их шанс выжить — тоже внедрить какое-то новшество. В какой-то момент это двигало научно-технический прогресс, но с появлением монополий государства начали понимать, что они уже тормозят развитие и начали принимать антимонопольные законы. Тут уже не идет о полностью свободном рынке. Я даже не говорю о протекционизме, когда одно государство начинает вводить пошлины, чтобы «своим» производителям было проще конкурировать с зарубежными. Ну и с развитием рынка появляются (вернее, расцветают) банки — производителям нет смысла держать крупные суммы в сейфе (капитал должен быть в обороте, иначе это не капитал а мертвая сумма денег). Это всё очень упрощенно, конечно.

P.S. В общем, чем дальше тем больше некогда свободный (ну почти, условно-свободный) рынок начинают регулировать «сверху».

Information

Rating
Does not participate
Registered
Activity

Specialization

Specialist
Middle