🦥Alex Fails
или не тот сетлокаль сделали
🦥Alex Fails
Driptamine
Народ, подскажите пожалуйста! Наш проект — это web searching. И backend написан на Ruby/Rails+Postgres Мы пытаемся ускорить наш webcrawler Вопрос такой: "Разумно ли использовать C++ для оптимизации webcrawler и вообще внедрять его на таком проекте?"
Berkus
ну если краулер у них однопоточный то ых
Pavel
Не думаю, crawler же в io упирается, а не в cpu
Может и в алгоритмы парсинга
Matwey
Не думаю, crawler же в io упирается, а не в cpu
Это бабушка натрое сказала.
Vladislav
Может и в алгоритмы парсинга
Хм, ну может. Но целиком на плюсы тоже смысла нет переписывать, можно взять сишный парсер отдельно
Vladislav
Это бабушка натрое сказала.
Ну если он нормально сейчас написан, разумеется
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
И эти люди говорят что C++ сложен https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/ref-returns
Vladislav
Где у вас узкое место? Во что вы упираетесь - в сеть, диск, cpu?
пока что - упираются в неумение профайлить, судя по всему
ivan
это правильно, если считать что координаты - это вектор-строка, а при транформации ты умножаешь его на матрицу справа
странненько. всю жизнь нас учили матрицу слева, вектор справа; да и конструкция T.map(x) вариантов не оставляет. а оно вот как оказывается
Evgenii
проблема скорее в том, что надо понимать, что т надо профайлить
xzz
+1
🦥Alex Fails
Это спамеры. Которые еще и нарушают правила чата.
🦥Alex Fails
Еще вот этот чувак похож на спамера. в 24 группы добавился.
KosBeg
но пока ничего не пишет, верно?
🦥Alex Fails
Жди ночи
Vitaliy ◀️TriΔng3l▶️
На аватаре пиджак, или накачанные мускулы, или ещё какой-нибудь показатель "крутости" - 90% спамер
Square
На аватаре пиджак, или накачанные мускулы, или ещё какой-нибудь показатель "крутости" - 90% спамер
Ну может в компании дресс-код строгий и там даже девелоперы так ходят
Ioann_
Куда не сунься - везде патенты. Я не понимаю в таком случае работают ли они вообще. А что же это там умножение матриц 4 на 4 на avx intr еще не запатентовали ? А обычное умножение матриц 4 на 4. Это ведь тоже способ - кеши все дела.
Ioann_
Ладно когда зарубежные читаешь - не шарахаешься еще. Но Русские это что то.
Ioann_
Так что видимо проще вобще не кодить. Целее будешь!
🦥Alex Fails
Отл, работает
Ekin
¡No Pasarán!
Ioann_
Теперь я кажется понииаю почему free cad на qt - free. Хотя мог бы быть и не фри.
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
Beast тоже
xzz
Штойта ?
Tom
Штойта ?
https://github.com/boostorg/mp11 https://github.com/boostorg/beast
xzz
Это круче mpl ?
Tom
Это круче mpl ?
Sure is! Новее, удобнее, быстрее и т.п.
xzz
websocket' джва года ждал !
Evgenii
но это же ub
Matwey
но это же ub
так это, может глянем на ассемблер?
Matwey
вернее даже не так
Matwey
у кого-нибудь воспроизводится эффект?
Matwey
мне лень проверять
Matwey
xor esi, esi
Matwey
хе хе
Matwey
а чего это он?
Matwey
надо ввести новое понятие
Stanislav
у кого-нибудь воспроизводится эффект?
ну а теперь шлангом скомпиль
Matwey
шланг поленился всё нулями забить
Matwey
xor esi, esi но тоже есть
Matwey
вопрос возникает на мой взгляд правомерный: зачем комиляторы суют целую одну излишнюю инструкцию?
Evgenii
ну это или в код или к компиляторописцам
Evgenii
а тут они разве есть?)
Nikita
делает потому, что может и законом не запрещено
Anonymous
делает по той же причине, по которой мой GCC ВНЕЗАПНО предоставляет std::hash для enum в режиме С++11.
Anonymous
подправляет минорные косяки за разрабом.
Anonymous
но это так, ИМХО, я не разраб компиляторов)
Matwey
у меня есть только одно предположение, что необходимость чистить именно регистры перед использованием как-то связана с какими-то часто используемыми атаками и gcc считает это хорошим тоном.
Anonymous
должно так повезти, что область памяти использовалась для хранения какой-то важной инфы и затем не была (пере)инициализирована и так или иначе отдана клиенту (скажем, мы говорим о серверном ПО)