🦥Alex Fails
🦥Alex Fails
или не тот сетлокаль сделали
🦥Alex Fails
Driptamine
Народ, подскажите пожалуйста!
Наш проект — это web searching.
И backend написан на Ruby/Rails+Postgres
Мы пытаемся ускорить наш webcrawler
Вопрос такой:
"Разумно ли использовать C++ для оптимизации webcrawler и вообще внедрять его на таком проекте?"
Berkus
Vladislav
Berkus
ну если краулер у них однопоточный то ых
Pavel
Matwey
ivan
надеюсь, тут кто-то шарит в Qt, и сможет ответить на мое недоумение
ivan
использовал биндинги PyQt5
from math import sin, cos, pi
teta = pi / 6
x = QPointF(1., 0.)
T = QTransform(cos(teta), -sin(teta),
sin(teta), cos(teta),
0, 0)
# Tx = b
b = T.map(x)
print("QTransform", b.x(), b.y())
b = QPointF(x.x()*cos(teta) - x.y()*sin(teta), x.x()*sin(teta) + x.y()*cos(teta))
print("math", b.x(), b.y())
выводит
QTransform 0.8660254037844387 -0.49999999999999994
math 0.8660254037844387 0.49999999999999994
т.е. вторая координата с точностью до наоборот.
полез в исходники, и на строчке 1183 нашел такую формулу.
http://code.qt.io/cgit/qt/qtbase.git/tree/src/gui/painting/qtransform.cpp#n1183
x = affine._m11 * fx + affine._m21 * fy + affine._dx;
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
может я чего не понимаю, но какого черта тут складываются множители из (1,1) с (2,1), вместо (1,2)? матрицу трансформации нужно понимать как транспонированную?
Vladislav
использовал биндинги PyQt5
from math import sin, cos, pi
teta = pi / 6
x = QPointF(1., 0.)
T = QTransform(cos(teta), -sin(teta),
sin(teta), cos(teta),
0, 0)
# Tx = b
b = T.map(x)
print("QTransform", b.x(), b.y())
b = QPointF(x.x()*cos(teta) - x.y()*sin(teta), x.x()*sin(teta) + x.y()*cos(teta))
print("math", b.x(), b.y())
выводит
QTransform 0.8660254037844387 -0.49999999999999994
math 0.8660254037844387 0.49999999999999994
т.е. вторая координата с точностью до наоборот.
полез в исходники, и на строчке 1183 нашел такую формулу.
http://code.qt.io/cgit/qt/qtbase.git/tree/src/gui/painting/qtransform.cpp#n1183
x = affine._m11 * fx + affine._m21 * fy + affine._dx;
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
может я чего не понимаю, но какого черта тут складываются множители из (1,1) с (2,1), вместо (1,2)? матрицу трансформации нужно понимать как транспонированную?
это правильно, если считать что координаты - это вектор-строка, а при транформации ты умножаешь его на матрицу справа
Ilya
Vladislav
Vladislav
И эти люди говорят что C++ сложен https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/ref-returns
🐙 Antony
Vladislav
Evgenii
Evgenii
проблема скорее в том, что надо понимать, что т надо профайлить
xzz
+1
🦥Alex Fails
Это спамеры. Которые еще и нарушают правила чата.
🦥Alex Fails
Еще вот этот чувак похож на спамера. в 24 группы добавился.
KosBeg
но пока ничего не пишет, верно?
🦥Alex Fails
Жди ночи
Vitaliy ◀️TriΔng3l▶️
На аватаре пиджак, или накачанные мускулы, или ещё какой-нибудь показатель "крутости" - 90% спамер
Square
🦥Alex Fails
🦥Alex Fails
Nikita
Ioann_
Куда не сунься - везде патенты. Я не понимаю в таком случае работают ли они вообще. А что же это там умножение матриц 4 на 4 на avx intr еще не запатентовали ? А обычное умножение матриц 4 на 4. Это ведь тоже способ - кеши все дела.
Ioann_
Ладно когда зарубежные читаешь - не шарахаешься еще. Но Русские это что то.
Ioann_
Так что видимо проще вобще не кодить. Целее будешь!
🦥Alex Fails
Отл, работает
Ekin
¡No Pasarán!
Ioann_
Теперь я кажется понииаю почему free cad на qt - free. Хотя мог бы быть и не фри.
Berkus
Vitaliy ◀️TriΔng3l▶️
странненько. всю жизнь нас учили матрицу слева, вектор справа; да и конструкция T.map(x) вариантов не оставляет. а оно вот как оказывается
Матрица слева на примере 4x4 - если сдвиг в 12, 13 и 14. Это xxxx*r0+yyyy*r1+zzzz*r2+wwww*r3. Справа - если в 3, 7 и 11, dot(v,r0),dot(v,r1),dot(v,r2),dot(v,r3).
Vitaliy ◀️TriΔng3l▶️
Ну мне просто так различия легче запомнить
ivan
охх... у меня горит от того, что в документации этого не сказано. спасибо!
Ioann_
Скиньте чатик по Qt
Matwey
@qt_chat
Ioann_
Tom
Еще б он не задерживался :D Там все поломано, елки-иголки...
xzz
А что там интересного ожилается ?
Tom
Tom
Beast тоже
xzz
Штойта ?
Tom
Штойта ?
https://github.com/boostorg/mp11
https://github.com/boostorg/beast
xzz
Это круче mpl ?
xzz
websocket' джва года ждал !
xzz
Evgenii
но это же ub
Matwey
вернее даже не так
Matwey
у кого-нибудь воспроизводится эффект?
Matwey
мне лень проверять
Matwey
xor esi, esi
Matwey
хе хе
Matwey
а чего это он?
Evgenii
Matwey
надо ввести новое понятие
Stanislav
Matwey
шланг поленился всё нулями забить
Matwey
xor esi, esi
но тоже есть
Matwey
вопрос возникает на мой взгляд правомерный: зачем комиляторы суют целую одну излишнюю инструкцию?
Evgenii
ну это или в код или к компиляторописцам
Evgenii
а тут они разве есть?)
Nikita
делает потому, что может и законом не запрещено
Matwey
Anonymous
делает по той же причине, по которой мой GCC ВНЕЗАПНО предоставляет std::hash для enum в режиме С++11.
Anonymous
подправляет минорные косяки за разрабом.
Anonymous
но это так, ИМХО, я не разраб компиляторов)
Matwey
у меня есть только одно предположение, что необходимость чистить именно регистры перед использованием как-то связана с какими-то часто используемыми атаками и gcc считает это хорошим тоном.
Anonymous
Anonymous
должно так повезти, что область памяти использовалась для хранения какой-то важной инфы и затем не была (пере)инициализирована и так или иначе отдана клиенту (скажем, мы говорим о серверном ПО)
Evgenii