![PyPI Now Supports iOS and Android Wheels for Mobile Python Development](https://cdn.sanity.io/images/cgdhsj6q/production/96416c872705517a6a65ad9646ce3e7caef623a0-1024x1024.webp?w=400&fit=max&auto=format)
Security News
PyPI Now Supports iOS and Android Wheels for Mobile Python Development
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
github.com/vadimpiven/vpn-from-scratch/reports/007/hw2_signer
В этом задании мы пишем аналог unix pipeline, что-то вроде:
grep 127.0.0.1 | awk '{print $2}' | sort | uniq -c | sort -nr
Когда STDOUT одной программы передаётся как STDIN в другую программу. Но в нашем случае эти роли выполняют каналы, которые мы передаём из одной функции в другую. Само задание по сути состоит из двух частей:
ExecutePipeline
которая обеспечивает нам конвейерную обработку функций-воркеров, которые что-то делают.Расчет хеш-суммы реализован следующей цепочкой:
SingleHash
считает значение crc32(data)+"~"+crc32(md5(data))
( конкатенация двух строк через ~), где data - то что пришло на вход (по сути - числа из первой функции)MultiHash
считает значение crc32(th+data)
(конкатенация цифры, приведённой к строке и строки), где th=0..5 ( т.е. 6 хешей на каждое входящее значение ), потом берёт конкатенацию результатов в порядке расчета (0..5), где data - то что пришло на вход (и ушло на выход из SingleHash)CombineResults
получает все результаты, сортирует, объединяет отсортированный результат через _
(символ подчеркивания) в одну строкуcrc32
считается через функцию DataSignerCrc32
md5
считается через DataSignerMd5
DataSignerMd5
может одновременно вызываться только 1 раз, считается 10 мс. Если одновременно запустится несколько - будет перегрев на 1 секDataSignerCrc32
, считается 1 секРезультаты, которые выводятся если отправить 2 значения (закомментировано в тесте):
0 SingleHash data 0
0 SingleHash md5(data) cfcd208495d565ef66e7dff9f98764da
0 SingleHash crc32(md5(data)) 502633748
0 SingleHash crc32(data) 4108050209
0 SingleHash result 4108050209~502633748
4108050209~502633748 MultiHash: crc32(th+step1)) 0 2956866606
4108050209~502633748 MultiHash: crc32(th+step1)) 1 803518384
4108050209~502633748 MultiHash: crc32(th+step1)) 2 1425683795
4108050209~502633748 MultiHash: crc32(th+step1)) 3 3407918797
4108050209~502633748 MultiHash: crc32(th+step1)) 4 2730963093
4108050209~502633748 MultiHash: crc32(th+step1)) 5 1025356555
4108050209~502633748 MultiHash result: 29568666068035183841425683795340791879727309630931025356555
и
1 SingleHash data 1
1 SingleHash md5(data) c4ca4238a0b923820dcc509a6f75849b
1 SingleHash crc32(md5(data)) 709660146
1 SingleHash crc32(data) 2212294583
1 SingleHash result 2212294583~709660146
2212294583~709660146 MultiHash: crc32(th+step1)) 0 495804419
2212294583~709660146 MultiHash: crc32(th+step1)) 1 2186797981
2212294583~709660146 MultiHash: crc32(th+step1)) 2 4182335870
2212294583~709660146 MultiHash: crc32(th+step1)) 3 1720967904
2212294583~709660146 MultiHash: crc32(th+step1)) 4 259286200
2212294583~709660146 MultiHash: crc32(th+step1)) 5 2427381542
2212294583~709660146 MultiHash result: 4958044192186797981418233587017209679042592862002427381542
CombineResults 29568666068035183841425683795340791879727309630931025356555_4958044192186797981418233587017209679042592862002427381542
Код писать в signer.go
. В этот файл не надо добавлять ничего из common.go
, он уже будет на сервере. Запускать как go test -v -race
.
-race
) - исследуйте его вывод - когда читаем, когда пишем, из каких строк кода. Там как правило содержится достаточно информации для нахождения источника проблемы.FAQs
Unknown package
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.