gavr_sas
ясн, это была попытка войтивайти нашару написав один около проект на спринге, филологи выйдя с вуза поняли шо такой профессии не существует и зашевелились. Надеюсь следующие кандидаты будут лучше Первое тестовое кста сделано было хорошо, теперь рассматриваем…
Сейчас так, сначала скрининг интервью(тест на турка), потом интервью чуть более углубленное после которого дается простое тестовое на дом, там буквально обычные вопросы, некоторые с примерами кода, вот это тестовое кандидат сделала отлично, а сейчас на полноценном интервью не смогла даже ответить на теже самые вопросы(после этого интервью кстати дается уже более серьезное тестовое)
Сначала кажется что тогда лучше поместить техническое интервью до тестового
Но с другой стороны это прикольно, оно дает возможность сразу же проверить сам ли чел делал тестовое или вместе с GPT, так сказать поймать за руку как дешевку
Вот думаем стоит ли менять процесс
Сначала кажется что тогда лучше поместить техническое интервью до тестового
Но с другой стороны это прикольно, оно дает возможность сразу же проверить сам ли чел делал тестовое или вместе с GPT, так сказать поймать за руку как дешевку
Вот думаем стоит ли менять процесс
Визуализация по данным Нью Йоркского музея современного искусства, размер кружка — количество работ, после 65 еще живы и ложатся на ось абсцыссс
https://gnykka.io/moma-artists
https://gnykka.io/moma-artists
gavr_sas
Почему только числа? В процессоре тоже только числа, все логично, привязавшись к какой-нибудь конкретной реализации типов вроде String получится менее универсально, может для скорости мы хотим аски таблицу, а у нас токо UTF-8(в JVM), так что хотите строки…
3 окт, 25 окт
упс
Вообщем в прошлом посте разобрал шо васм из себя представляет в плане рантайма, теперь сам язык.
Ну так то это байткод, но как и у машинного кода есть ассемблер для удобного чтения человеками, так и у васм байткода есть WAT(?) — WebAssembly text format
Сейчас каждый wasm бинарь содержит в себе модуль, который импортирует и экспортирует функции.
Рассмотрим на примере функции складывающей 2 числа, которую мы будем постепенно улучшать:
Ретурна нет, все по модному, последнее значение есть возвращаемое, тут мы положили на стек через i32.const 2 числа, и вызвали add которая 2 числа со стека берет и кладет обратно результат.
Также можно заметить что все это похоже на лисп, и действительно WAT сделан на S-expressions, тк кк человекам сложно держать в голове стек, все функции можно также вызывать в виде S-expressions, конечно это просто синтаксический сахар:
упс
Вообщем в прошлом посте разобрал шо васм из себя представляет в плане рантайма, теперь сам язык.
Ну так то это байткод, но как и у машинного кода есть ассемблер для удобного чтения человеками, так и у васм байткода есть WAT(?) — WebAssembly text format
Сейчас каждый wasm бинарь содержит в себе модуль, который импортирует и экспортирует функции.
Рассмотрим на примере функции складывающей 2 числа, которую мы будем постепенно улучшать:
(module(result i32) - тип возвращаемого значения
(func (result i32)
i32.const 1
i32.const 2
i32.add
)
)
Ретурна нет, все по модному, последнее значение есть возвращаемое, тут мы положили на стек через i32.const 2 числа, и вызвали add которая 2 числа со стека берет и кладет обратно результат.
Также можно заметить что все это похоже на лисп, и действительно WAT сделан на S-expressions, тк кк человекам сложно держать в голове стек, все функции можно также вызывать в виде S-expressions, конечно это просто синтаксический сахар:
(i32.addКоличество аргументов строго фиксировано, поэтому чтобы сложить 3 числа придется сделать 2 сложения, в отличии от лиспов:
(i32.const 1)
(i32.const 2))
(i32.add#wasm
(i32.const 1)
(i32.add
(i32.const 1)
(i32.const 2)))
gavr_sas
3 окт, 25 окт упс Вообщем в прошлом посте разобрал шо васм из себя представляет в плане рантайма, теперь сам язык. Ну так то это байткод, но как и у машинного кода есть ассемблер для удобного чтения человеками, так и у васм байткода есть WAT(?) — WebAssembly…
Запуск
Пора бы как то это вызвать, для простоты вызывать будем пока что из js, для этого функции нужно дать имя, заодно обозначив как экспортируемую
В js ничего интересного фетчим Wasm как обычный файл, загоняем в
Это возможно из-за того что Wasm структурный, то есть в нем нет всяких джампов\эксепшонов(пока) изза которых код может прыгать в неизвестных направлениях, поэтому мы можем спокойно компилировать его строчка за строчкой даже если еще не получили весь файл, однопроходной интерпретацией также славилась луа.
Пора бы как то это вызвать, для простоты вызывать будем пока что из js, для этого функции нужно дать имя, заодно обозначив как экспортируемую
(func (export "select_simple") (result i32)И вот ее уже можно вызывать из js
(i32.add
(i32.const 1)
(i32.const 2))
)
await WebAssembly.instantiateStreaming(fetch(url)).then((result) => {
const { select_simple } = result.instance.exports;
let sas = result.instance.exports.select_simple()
console.log(sas);
});
И вот мы получили заветные 3 в консоле.В js ничего интересного фетчим Wasm как обычный файл, загоняем в
instanceStreaming, что означает стрим компиляцию прямо пока получаем файл, это при скорости интернета в 20 Мбит экономит 2Х времени по сравнению с тем, если бы мы сначала получили весь файл, а потом его скомпилировали. Это возможно из-за того что Wasm структурный, то есть в нем нет всяких джампов\эксепшонов(пока) изза которых код может прыгать в неизвестных направлениях, поэтому мы можем спокойно компилировать его строчка за строчкой даже если еще не получили весь файл, однопроходной интерпретацией также славилась луа.
gavr_sas
Запуск Пора бы как то это вызвать, для простоты вызывать будем пока что из js, для этого функции нужно дать имя, заодно обозначив как экспортируемую (func (export "select_simple") (result i32) (i32.add (i32.const 1) (i32.const 2)) )…
# Аргументы
Во первых это длиннющее
Во первых это длиннющее
(export "add") в объявлении функции выглядит так себе, его можно вынести в отдельное (export "add" (func $add)) оставив в самой функции только имя $add
(moduleСкладывать константы не интересно, пора добавить аргументы, делается это также как с возвращаемым значением, только вместо result будет param, и аргументам можно давать имена через $
(export "add" (func $add))
(func $add (result i32)
...
)
)
(func $add (param $a i32) (param $b i32) (result i32)Отлично, осталось заменить наши константы на получение этих параметров:
...
)
(func $add (param $a i32) (param $b i32) (result i32)В js теперь:
(i32.add
(local.get $a)
(local.get $b))
)
console.log(add(1, 2));
Получаем заветные 3
#wasmЗабавно, но компутер вижон GPT 4, которое вроде не должно быть подвержено иллюзиям которые следуют из устройства нашего мозга, все таки им подвержен
Самый простой dumb pixel peeping software не купится на Munker-White иллюзию с цветами, но GPT 4 почему то ведет себя как человек
Еще одна с глазами, оба серые
Самый простой dumb pixel peeping software не купится на Munker-White иллюзию с цветами, но GPT 4 почему то ведет себя как человек
Еще одна с глазами, оба серые
This media is not supported in your browser
VIEW IN TELEGRAM
механический заменитель пчел #machine
👍1
Forwarded from opennet.ru
iLeakage - метод эксплуатации уязвимости в CPU Apple через браузеры на базе движка WebKit https://opennet.ru/60000/
www.opennet.ru
iLeakage - метод эксплуатации уязвимости в CPU Apple через браузеры на базе движка WebKit
Исследователи из Технологический института Джорджии, Мичиганского университета и Рурского университета разработали технику атаки iLeakage, позволяющую эксплуатировать уязвимость в ARM-процессорах Apple серий "A" и "M" через открытие в браузере специально…
Yay, первый биндинг к внешней экосистеме готов.
Украл семантику из внезапно Crystal
Почти везде это взаимодействие сделано через прагмы аля
Этим мне понравилось решение Crystal, где один бинд как в бы в блоке кода
Украл семантику из внезапно Crystal
Почти везде это взаимодействие сделано через прагмы аля
proc printf(formatstr: cstring) {.header: "<stdio.h>", importc: "printf".}
Но мне хочется решение чтоб не надо было ставить прагму над каждым, в ниме это решается через push, но чтото я не видел чтобы его использовали вместе с importc. Этим мне понравилось решение Crystal, где один бинд как в бы в блоке кода
lib CОстается проблема с геттерами сеттерами, в смолтолке нет разницы по синтаксису между доступом к полу и вызовом метода
fun cos(value : Float64) : Float64
end
file.isDirectory и file.isDirectory() оба будут file isDirectory, поэтому теперь нужно изобрести способ помечать их, тут то наверное сделаю прагмы, вместе с push как в ниме.