пятница, 13 декабря 2024 г.

smart, option

https://smart-lab.ru/blog/839487.php

Тетта опциона (теоретическая скорость распада с течением времени) — это не просто «доход» для тейдера, занимающего короткую позицию.

Это компенсация риска потерь, с которым сталкивается инвестор в результате отрицательно асимметричной экспозиции к изменению базового актива.

Тетта-банда (https://www.reddit.com/r/thetagang/ ) и опционные гуру — шарлатаны хотят заставить вас поверить, что тетта — это форма альфы, или бесплатные деньги для истинно верующих.

Опционы — это выпуклые инструменты с асимметричной профилем выплат — покупатели могут заработать намного больше, чем они рискуют потерять, и наоборот для продавца.

Когда вы занимаете отрицательно асимметричную позицию, любое крупное движение приводит к убытку. Если базовый актив движется в благоприятном направлении, вы выигрываете от этого все меньше и меньше; если он движется против вас, вы теряете все больше и больше, поэтому мы можем записать стоимость опциона как:

V(x, t, v)


где x — цена базового актива, t — время, v — подразумеваемая волатильность, а V(.) — стандартный метод определения цены опциона (например, Блэк-Шоулз или биномиальное/триномиальное дерево)

Его изменение за одну единицу времени с помощью разложения в ряд Тейлора второго порядка дает:

dV(x, t, v) = dV/dt + dV/dx * dx + dV/dv * dv + 0.5 * d2V/dx^2 * dx^2 + 0.5 * d2V/dv^2 * dv^2+ dv2/dvdx * dvdx =

= theta +
+ delta * dx +
+ vega * dv +
+ 0.5 * gamma * dx^2 +
+ 0.5 * volga * dv^2 +
+ vanna * dx * dv


Если у вас короткая позиция по этому опциону, вы заработаете тетта-распад с течением времени, но вы платите с другой стороны:

— каждый раз, когда акции существенно меняются, вы теряете деньги по гамме;

— если опцион находится далеко от денег, он будет иметь значимую волгу (гамма волатильности), поэтому  каждый раз, когда подразумеваемая волатильность значительно меняется, вы тоже проигрываете из-за этого;

— он также может иметь экспозицию по ванне ( или скос). К примеру, ваша короткая позиция по путу вне денег может терять деньги в результате падения цены спота и роста подразумеваемой волатильности.

Либо вы постоянно фиксируете эти потери с помощью динамического хеджирования, либо вы просто игнорируете их и накапливаете дельта- и вега-риски при движении в неблагоприятном направлении фактически делая удвоенную ставку на то, что неблагоприятное движения развернется.

Примером вышеуказанного является простая продажа голого кола без дополнительных действий: если акции растут, вы получаете короткую дельту; если же они снова падают, вы чувствуете себя умным. Но если они продолжают расти, вы теряете деньги все быстрее и быстрее.

Рынок оценивает эти факторы непрерывно каждый момент времени: гамма более ценна, когда волатильность высока, потому что сумма положительного pnl, которую длинная позиция по опциону получает от гаммы пропорциональна dx ^ 2.

Чистый поток pnl от продажи опциона с целью сбора тетты будет зависеть от величины этих взаимоуравновешивающих факторов. Если рынок требует слишком высокую плату за гамму, ванну и волгу, то тетта по короткой позиции будет стабильно превышать реализованные убытки по этим экспозициям.

В большинстве случаев следует ожидать небольшой премии за риск, но это лишь малая доля общей тетты. Временами эта доля может быть даже меньше, чем ваши транзакционные издержки, особенно для ритейл-трейдера.

Также не забудьте учесть динамику волатильности при роллировании… короткая позиция по OTM put обычно будет иметь тетту, которая намного превышает ее реализованную скорость распада, даже при условии что нет движения в базовом активе. Потому что подразумеваемая волатильность становится все выше и выше для креш-путов с очень маленьким временем до экспирации при неизменном страйке.

И тезис  «я просто получу поставку, я все равно хотел купить там акции» не избавит вас ни от чего из этого. Наивный анализ короткой опционной позиции с удержанием до погашения может привести к небрежным и нелогичным выводам.

Источник: twitter.com/bennpeifert/status/1572019785797603328

четверг, 14 ноября 2024 г.

RL, drl-2ed, Sanghi, github

https://github.com/jupyterlab/jupyterlab/graphs/contributors

jupyterlab==4.0.7
box2d-py==2.3.8
stable-baselines3[extra]==2.3.2
moviepy==1.0.3
#huggingface_sb3 @ git+https://github.com/huggingface/huggingface_sb3@gymnasium-v2
huggingface_sb3>=3.0
gym==0.26.2
ipywidgets
rl_zoo3==2.3.0
seaborn==0.13
scipy==1.11
wandb
rliable
flappy-bird-gymnasium
matplotlib
panda-gym @ git+https://github.com/qgallouedec/panda-gym@master
gymnasium[mujoco-py]
gymnasium[mujoco]
pettingzoo[butterfly]>=1.24.0
supersuit>=3.9.0


--extra-index-url https://download.pytorch.org/whl/cpu
torch
torchvision
torchaudio
tensorflow
lightning

среда, 9 октября 2024 г.

OTUS, Playlists

https://www.youtube.com/@otus_education/playlists

C++

https://www.youtube.com/playlist?list=PLfnFOImnyWRVqM4UNl7Lh-sYqBp5IrsI3

https://www.youtube.com/playlist?list=PLfnFOImnyWRUzgb4s3HXGmbd9rJQJHL8r

https://www.youtube.com/playlist?list=PLfnFOImnyWRWmpS_2emHHAuGNz3YAi8iM

https://www.youtube.com/playlist?list=PLfnFOImnyWRW2CDiHHrJwbDhFhUDWoyRt

https://www.youtube.com/playlist?list=PLfnFOImnyWRVqM4UNl7Lh-sYqBp5IrsI3

C#

https://www.youtube.com/playlist?list=PLfnFOImnyWRVb5DAOcMBmP-UIzLbmgc3H

https://www.youtube.com/playlist?list=PLfnFOImnyWRV2dvzwEjFHXrh04JFBAWA1

https://www.youtube.com/playlist?list=PLfnFOImnyWRV-zzcYldNKXCnJdl523eyS

https://www.youtube.com/playlist?list=PLfnFOImnyWRVX-FvN1B5oPP5sR17apb0t

https://www.youtube.com/playlist?list=PLfnFOImnyWRUlDMnKYobAhsHjc4aAleBy

Py

https://www.youtube.com/playlist?list=PLfnFOImnyWRUrNJYC3gvN13Np2Eo8ZYSc

https://www.youtube.com/playlist?list=PLfnFOImnyWRU-1Nrkld0OkZJ7W6V3SbGy

https://www.youtube.com/playlist?list=PLfnFOImnyWRX_EvkfNXFB977BCVOS1MXB

https://www.youtube.com/playlist?list=PLfnFOImnyWRWfWJgM9YQs3PfUbIlsBy2b

https://www.youtube.com/playlist?list=PLfnFOImnyWRXRUtbUnxAN6DS1imglyvfk

web py

https://www.youtube.com/playlist?list=PLfnFOImnyWRUWvKT62vPMaY3v-Rf_yyZw

Py qA

https://www.youtube.com/playlist?list=PLfnFOImnyWRUYcdw9q_3ZfRB5yxBijQiQ

DP

https://www.youtube.com/playlist?list=PLfnFOImnyWRX1Oo4F9zSqxUQh14T9mRDL

Algo

https://www.youtube.com/playlist?list=PLfnFOImnyWRXeuZlhSUABMDB1qDZw6kfS

https://www.youtube.com/playlist?list=PLfnFOImnyWRVXrFznxZIqDGwsxkvih12d

RL

https://www.youtube.com/playlist?list=PLfnFOImnyWRXzhR2Pl0-nhFqp5U7lxnDW

ML

https://www.youtube.com/playlist?list=PLfnFOImnyWRVwF-p0MSHL1OJlcHvOps6G
https://www.youtube.com/watch?v=2uQcsklaxug&list=PLfnFOImnyWRVwF-p0MSHL1OJlcHvOps6G

https://www.youtube.com/playlist?list=PLfnFOImnyWRXIFdW386EcR70_eqB8UH21

https://www.youtube.com/watch?v=3ldfSlM-mY8&list=PLfnFOImnyWRXIFdW386EcR70_eqB8UH21

https://www.youtube.com/playlist?list=PLfnFOImnyWRVdYzv7o-IY9NNiioH23s2z

https://www.youtube.com/playlist?list=PLfnFOImnyWRUSMjieoLzEsjhXYaDdk2_t

https://www.youtube.com/playlist?list=PLfnFOImnyWRVGAHlG2Wv3iezLBqhvpR6A

https://www.youtube.com/playlist?list=PLfnFOImnyWRXvvMmTL3HFBd7--z1D-5qD

https://www.youtube.com/playlist?list=PLfnFOImnyWRVn5ALzqnBMsMhBYxsKxksa

https://www.youtube.com/playlist?list=PLfnFOImnyWRW_DaV6NIco2uv-H6tL9L64

https://www.youtube.com/playlist?list=PLfnFOImnyWRXqI3pacN-Qa1TrEQlrnGON

https://www.youtube.com/playlist?list=PLfnFOImnyWRWHGQpLKTSNCZ-FW9DZiNgx

https://www.youtube.com/playlist?list=PLfnFOImnyWRUudoPlUlYzelDgWdSu3oca

https://www.youtube.com/playlist?list=PLfnFOImnyWRUWvKT62vPMaY3v-Rf_yyZw

Zrenie

https://www.youtube.com/playlist?list=PLfnFOImnyWRV4frHv9BzUXoZFPjgyuUnr

https://www.youtube.com/playlist?list=PLfnFOImnyWRUWvKT62vPMaY3v-Rf_yyZw

Tix

https://www.youtube.com/playlist?list=PLfnFOImnyWRWF2pd9WT9ySvx5rLoNr4qQ

https://www.youtube.com/playlist?list=PLfnFOImnyWRVFb9r9EGkBI9FSyP7UW8wI

https://www.youtube.com/playlist?list=PLfnFOImnyWRWF2pd9WT9ySvx5rLoNr4qQ

https://www.youtube.com/playlist?list=PLfnFOImnyWRWr4s3Szqju9o9wnJcP3ib_

https://www.youtube.com/playlist?list=PLfnFOImnyWRXvvMmTL3HFBd7--z1D-5qD

Rec system

https://www.youtube.com/playlist?list=PLfnFOImnyWRXudjQpsnkQ36Npior672JZ

Math

https://www.youtube.com/playlist?list=PLfnFOImnyWRXzwaY8bOkQMNvGld5PH_Rb

https://www.youtube.com/playlist?list=PLfnFOImnyWRU8k_RyMcLOwA4GXaIoMRiP


R

https://www.youtube.com/playlist?list=PLfnFOImnyWRVIs_WeVA_C7QCjLxTqENyE

https://www.youtube.com/playlist?list=PLfnFOImnyWRVV3j_msvETDfHzoP3sZv08

Django

https://www.youtube.com/watch?v=sJx0Sy6L4Co&list=PLfnFOImnyWRX-q6LW-BxSm12YQ49yGOOC

Network

https://www.youtube.com/playlist?list=PLfnFOImnyWRWOl3TEPi91HZTXme4wGVqS

PostgreSQL

https://www.youtube.com/watch?v=qBBqMXpMrYk&list=PLfnFOImnyWRU3pgjjByyDz0bp-2IrEj-x

Micro

https://www.youtube.com/playlist?list=PLfnFOImnyWRW825IU_xG-IeFP1Nvm109a

https://www.youtube.com/playlist?list=PLfnFOImnyWRW-7ZLxfJGpeC2xrwzw_AQo

https://www.youtube.com/playlist?list=PLfnFOImnyWRW-7ZLxfJGpeC2xrwzw_AQo

https://www.youtube.com/playlist?list=PLfnFOImnyWRW-7ZLxfJGpeC2xrwzw_AQo

https://www.youtube.com/playlist?list=PLfnFOImnyWRX_EvkfNXFB977BCVOS1MXB

Projects

https://www.youtube.com/playlist?list=PLfnFOImnyWRWlW7rOBzWgZ1Rt7R3dEpz4

QA

https://www.youtube.com/playlist?list=PLfnFOImnyWRW-mhswANvZaLqJ4N_yWP4z

CI/CD

https://www.youtube.com/playlist?list=PLfnFOImnyWRXlzp37yQsipNAxFE3W3Qa3

BD

https://www.youtube.com/playlist?list=PLfnFOImnyWRUWvKT62vPMaY3v-Rf_yyZw

пятница, 6 сентября 2024 г.

putty, rdp, linux

https://putty.org.ru/download

. Использование RDP на Linux

Ubuntu поддерживает удаленный доступ через протокол RDP, что позволяет получать графический интерфейс. Для этого вам нужно установить сервер RDP, например, xrdp.

Установка xrdp:

sudo apt update

sudo apt install xrdp

После установки нужно запустить сервис:

sudo systemctl enable xrdp

sudo systemctl start xrdp

Настройка xrdp:

    Убедитесь, что вы открыли порт 3389 в вашем брандмауэре (если он используется).

    После этого вы можете подключаться к вашей виртуальной машине через RDP из Windows. Введите IP-адрес вашей виртуальной машины в RDP-клиенте Windows.

2. Использование VNC

Еще одним популярным способом является использование VNC (Virtual Network Computing).

Установка VNC-сервера:

Вы можете установить tightvncserver или tigervnc, например:

sudo apt update

sudo apt install tightvncserver

Запуск VNC-сервера:

    Настройте VNC-пароль:

   vncserver

    Запустите сервер:

   vncserver :1

    Подключитесь к VNC-движку через VNC-клиент (например, TightVNC Viewer) из Windows, указав IP-адрес и номер дисплея (например, 192.168.1.100:1).

3. Использование X11 Forwarding через SSH

Если вам нужно запускать графические приложения по отдельности, вы можете использовать X11 Forwarding. Для этого вам понадобится установить X-сервер на вашем Windows-компьютере, например, Xming или VcXsrv.

Настройка X11 Forwarding:

    Установите X-сервер на Windows и запустите его.

    Подключитесь к вашему Linux-серверу через Putty, убедившись, что в разделе SSH → X11 в настройках Putty активирован параметр "Enable X11 forwarding".

    После подключения запустите любые графические приложения (например, firefox), и окна должны отображаться на вашем Windows.

Заключение

Вы действительно можете работать с графическим интерфейсом на вашей Linux-машине, используя один из упомянутых выше методов. У каждого подхода есть свои плюсы и минусы, так что выберите тот, который больше подходит для ваших целей и среды.

--------------------------------------------------------------------------------

Шаги по настройке графического интерфейса на Linux через PuTTY

    Скачать PuTTY:

        Перейдите на официальный сайт PuTTY и скачайте установочный файл puTTY.exe.

    Запустить PuTTY:

        Откройте скачанный файл puTTY.exe.

    Настроить соединение:

        В поле Host Name (or IP address) введите IP-адрес вашей виртуальной машины.

        Убедитесь, что выбран порт 22 и тип соединения SSH.

    Залогиниться на виртуальную машину:

        Нажмите кнопку Open.

        В появившемся терминале введите ваше имя пользователя (например, user) и нажмите Enter.

        Введите пароль и нажмите Enter.

    Проверка наличия X11:

        Убедитесь, что у вас установлен X сервер на вашем Windows компьютере (например, Xming или VcXsrv).

        Запустите X-сервер.

    Настроить X11 Forwarding в PuTTY:

        В меню слева в PuTTY перейдите в раздел Connection -> SSH -> X11.

        Убедитесь, что стоит галочка на Enable X11 forwarding.

    Подключение к серверу с разрешением на X11:

        Вернитесь к главному меню и нажмите кнопку Open, чтобы подключиться к серверу.

    Установка необходимых пакетов (если требуется):

        После входа в систему убедитесь, что на сервере установлен X11 (обычно это часть дистрибутива, но для полных возможностей может потребоваться установка).

        Установите необходимые графические приложения, если они не установлены:

     sudo apt-get install xauth xorg openbox # пример для Ubuntu

    Запуск графического приложения:

        Запустите графическое приложение (например, xclock, gedit, и т.д.):

     xclock &

    Если все настроено правильно, окно приложения должно появиться на вашем локальном экране.

    Закрытие сессии:

        После окончания работы не забудьте выйти из SSH-сессии командой exit.

---------------

Шаги по настройке графического интерфейса на Linux через PuTTY с учетом RDP


    Скачать PuTTY:

        Перейдите на официальный сайт PuTTY и скачайте установочный файл puTTY.exe.

    Запустить PuTTY:

        Откройте скачанный файл puTTY.exe.

    Настроить соединение:

        В поле Host Name (or IP address) введите IP-адрес вашей виртуальной машины.

        Убедитесь, что выбран порт 22 и тип соединения SSH.

    Залогиниться на виртуальную машину:

        Нажмите кнопку Open.

        В появившемся терминале введите ваше имя пользователя (например, user) и нажмите Enter.

        Введите пароль и нажмите Enter.

    Установка поддержки графического интерфейса через RDP:

        Убедитесь, что на вашей виртуальной машине установлена поддержка графического интерфейса через RDP (Remote Desktop Protocol). Это может потребовать установки пакетов, таких как xrdp или vino, в зависимости от вашей дистрибуции Linux.

Для установки xrdp можно использовать команды:

    sudo apt update

     sudo apt install xrdp

 Запуск X-сервера на вашем Windows ПК:

        Убедитесь, что у вас установлен X сервер на Windows (например, Xming или VcXsrv).

        Запустите X-сервер.

    Настроить X11 Forwarding в PuTTY:

        В меню слева в PuTTY перейдите в раздел Connection -> SSH -> X11.

        Убедитесь, что стоит галочка на Enable X11 forwarding.

    Подключение к серверу с разрешением на X11:

        Вернитесь к главному меню и нажмите кнопку Open, чтобы подключиться к серверу.

    Запуск GUI приложений:

        После успешного соединения в терминале вы сможете запускать графические приложения, и они будут отображаться на вашем X-сервере.

---------------------------------

Варианты доступа к Ubuntu серверу с Windows Server 2022

  1. SSH через PuTTY или Windows Terminal

Это наиболее безопасный и распространенный способ доступа к Linux-серверам из Windows.

  • Установите на Windows клиент SSH (например, PuTTY или Windows Terminal)
  • Подключитесь по SSH, используя IP-адрес и учетные данные вашего сервера
  1. RDP через Xrdp

Ubuntu поддерживает Remote Desktop Protocol (RDP), но это требует дополнительной настройки:

  • Установите и настройте Xrdp на вашем Ubuntu сервере
  • Настройте порт 3389 для входящих соединений в файрволле
  • Подключитесь через Remote Desktop Connection в Windows
  1. VNC (Virtual Network Computing)

Вариант альтернативы RDP:

  • Установите VNC сервер на Ubuntu
  • Используйте клиент VNC для подключения из Windows
  1. TeamViewer или другие удаленные рабочие столы

Коммерческие решения с графическим интерфейсом:

  • Установите TeamViewer или аналогичное решение на Ubuntu
  • Используйте их клиент в Windows для подключения

Рекомендации по выбору метода

  • SSH - самый безопасный и простой способ для текстового доступа
  • RDP через Xrdp - если вам нужен графический интерфейс
  • VNC - альтернатива RDP с возможностью настройки производительности
  • Коммерческие решения - удобны, но требуют оплаты

Ключевые моменты

  • Настройте файрвол для открытого доступа к нужному порту
  • Используйте сильные пароли и двухфакторную аутентификацию
  • Регулярно обновляйте систему безопасности
  • Ограничьте доступ только по необходимости

Выберите метод, который лучше всего подходит для ваших потребностей в безопасности и удобстве использования. SSH обычно является наиболее безопасным выбором для удаленного доступа к серверу.

вторник, 13 августа 2024 г.

Rust, Go

Сферы применения и где используются

Rust:

  • Безопасность памяти: Rust предлагает строгую систему управления памятью, что делает его идеальным выбором для системного программирования, веб-серверов, игр и других приложений, где безопасность памяти критична.
  • Системное программирование: Благодаря своей эффективности и безопасности, Rust часто используется в разработке операционных систем, драйверов устройств и низкоуровневого программного обеспечения.
  • Кросс-платформенность: Rust поддерживает кросс-платформенное программирование, что позволяет разрабатывать приложения для различных операционных систем без значительных изменений кода.

Go (GoLang):

  • Веб-разработка: Go широко используется для создания высокопроизводительных веб-серверов и микросервисов благодаря своему простому синтаксису и быстродействию.
  • Микросервисная архитектура: Go подходит для микросервисной архитектуры благодаря своей модульности и легкости развертывания.
  • Обработка данных: Go часто используется в приложениях, связанных с обработкой больших объемов данных, включая реальное время и машинное обучение.

Задачи, которые хорошо решаются на каждом языке

Rust:

  • Rust идеально подходит для решения задач, требующих высокой безопасности памяти и производительности, таких как разработка операционных систем или высоконагруженных веб-серверов.
  • Библиотеки и фреймворки, такие как tokio для асинхронного программирования, упрощают разработку сетевых приложений и работы с параллелизмом.

Go (GoLang):

  • Go отлично подходит для быстрой разработки веб-приложений и микросервисов благодаря своему простому и чистому синтаксису.
  • Фреймворки, такие как Gin или Echo, облегчают создание HTTP API и веб-приложений.
  • Обработка потоковых данных и реализация алгоритмов машинного обучения могут быть выполнены более эффективно с использованием Go благодаря его мощному стандартному библиотеке и возможностям параллельного программирования.

Сложность и распространенность

Rust:

  • Сложность изучения: Rust имеет более сложный синтаксис по сравнению с Go, особенно в части управления памятью и типами.
  • Распространенность: Хотя Rust становится все более популярным, он не так широко распространен, как Go, особенно среди начинающих программистов.

Go (GoLang):

  • Сложность изучения: Go известен своим простым и чистым синтаксисом, что делает его относительно легким для изучения.
  • Распространенность: Go быстро набирает популярность за счет своих преимуществ в разработке веб-приложений и микросервисов, а также благодаря активной поддержке со стороны сообщества.

Выводы

Выбор между Rust и Go зависит от конкретных требований проекта и предпочтений команды разработки. Rust предлагает высокую степень безопасности и производительности, что делает его идеальным для системного программирования и приложений, где безопасность памяти критична. Go, с другой стороны, предлагает простой синтаксис и быструю разработку, что делает его отличным выбором для веб-разработки и микросервисов.

-------------------------

Давайте рассмотрим, как языки программирования Rust и Go работают в современных операционных системах, их зависимости от ОС, инструменты для разработки и тестирования.

Как эти языки работают в современных операционных системах

Rust:

  • Компиляция: Rust компилируется в машинный код, что позволяет ему работать непосредственно на уровне операционной системы без необходимости виртуальной машины или интерпретатора.
  • Безопасность памяти: Одним из ключевых преимуществ Rust является его способность обеспечивать безопасность памяти на уровне компилятора, что уменьшает риск ошибок, связанных с управлением памятью, и делает его привлекательным для системного программирования.

Go (GoLang):

  • Компиляция: Go также компилируется в машинный код, но использует собственный компилятор gc. Это обеспечивает хорошую производительность и скорость запуска приложений.
  • Стандартная библиотека: Go имеет богатую стандартную библиотеку, которая предоставляет множество готовых решений для работы с файловой системой, сетью, многопоточностью и другими аспектами операционной системы.

Зависимости от операционных систем

Rust:

  • Rust стремится к кросс-платформенности, но некоторые функции могут зависеть от специфичных для платформы API. Однако большинство стандартной библиотеки доступно на всех поддерживаемых платформах.

Go (GoLang):

  • Go также стремится к кросс-платформенности, но, как и Rust, может использовать платформенно-зависимые возможности через Cgo для вызова функций из библиотек C.

Инструментальные средства для кодирования, компиляции

Rust:

  • Основные инструменты: rustc (компилятор), cargo (система сборки и менеджер пакетов).
  • Cargo автоматизирует процесс сборки, тестирования и управления зависимостями, что упрощает разработку.

Go (GoLang):

  • Основные инструменты: gccgo (компилятор), go build (для сборки), go run (для запуска кода напрямую).
  • go mod используется для управления зависимостями и обеспечения кросс-платформенной совместимости.

Программирование GUI

Rust:

  • Для создания GUI в Rust можно использовать различные фреймворки, такие как gtk-rs, iced, druid. Эти фреймворки предоставляют различные способы создания графического пользовательского интерфейса.
  • Инструменты: cargo-generate для генерации проектов на основе шаблонов, gtk-builder-tool для работы с GTK+ виджетами.

Go (GoLang):

  • В Go есть несколько фреймворков для создания GUI, например, Fyne, Lazarus (через Free Pascal). Эти фреймворки предоставляют простые и удобные способы создания графических интерфейсов.
  • Инструменты: go get для установки пакетов, go mod tidy для управления зависимостями.

Модельное и глобальное тестирование приложений

Rust:

  • Rust имеет встроенную поддержку тестирования с помощью модулей #[test]. Тесты могут быть легко интегрированы в процесс сборки с помощью cargo test.
  • Также доступны инструменты для моделирования и статического анализа кода, например, clippy.

Go (GoLang):

  • Go поддерживает тестирование с помощью модулей func TestXxx(*testing.T). Тесты могут быть запущены с помощью команды go test.
  • Для моделирования и статического анализа кода в Go можно использовать инструменты, такие как golint, staticcheck.

Оба языка предлагают мощные инструменты для разработки, тестирования и деплоя приложений, хотя они имеют свои особенности и предпочтения в зависимости от типа проекта и требований к безопасности и производительности.

------

Перспективы развития языков программирования Rust и Go (GoLang) выглядят весьма обещающими, несмотря на то, что каждый из них сталкивается с определенными вызовами и ограничениями. Давайте рассмотрим их текущее положение и перспективы развития.

Перспективы развития

Rust:

  • Устойчивость и безопасность: Rust продолжает укреплять свою позицию как язык, обеспечивающий высокую степень безопасности памяти и параллельных вычислений. Это делает его привлекательным для системного программирования, веб-разработки и разработки игр.
  • Экспансия в индустрии: Rust активно развивается и принимается в различных областях, начиная от веб-разработки до разработки операционных систем. Компании, такие как Mozilla и Dropbox, уже используют Rust в своих продуктах.
  • Сообщество и экосистема: Сообщество Rust растет, и с ним растет и экосистема библиотек и инструментов. Это способствует дальнейшему развитию языка и его применению.

Go (GoLang):

  • Простота и производительность: Go сохраняет свою привлекательность благодаря простоте синтаксиса, высокой производительности и эффективности в разработке веб-приложений и микросервисов.
  • Индустрия микросервисов: С ростом тенденций к микросервисной архитектуре, Go продолжает находить применение в этой области благодаря своей модульности и легкости развертывания.
  • Инфраструктура и DevOps: Go активно используется в инфраструктурном программировании и DevOps, благодаря своим возможностям для написания скриптов и инструментов для автоматизации процессов развертывания и мониторинга.

Место в рейтинге популярности

На сегодняшний день, оба языка занимают заметное место в рейтингах популярности языков программирования:

  • Rust: Несмотря на то, что Rust еще не достиг уровня популярности, сопоставимого с такими языками, как Python или JavaScript, он быстро растет и привлекает внимание разработчиков благодаря своим уникальным преимуществам. В рейтингах популярности Rust постепенно повышается, что свидетельствует о его растущем влиянии и приеме в индустрии.

  • Go (GoLang): Go находится в топ-10 самых популярных языков программирования, согласно различным рейтингам и опросам разработчиков. Его простота, производительность и широкий спектр применения делают его одним из наиболее востребованных языков для разработки современных веб-приложений и микросервисов.

Заключение

Оба языка обладают сильными сторонами, которые делают их привлекательными для разработчиков разных уровней. Rust продолжает укреплять свое положение как язык, обеспечивающий высокую безопасность и производительность, в то время как Go остается лидером в области веб-разработки и микросервисов. Их будущее выглядит ярким и перспективным, с постоянным развитием экосистемы, инструментов и библиотек.

----------


Да, когда я упоминаю Go в контексте веб-разработки, я имею в виду, в основном, разработку backend'а. Go стал очень популярен в этой области благодаря своей простоте, производительности и эффективности в создании высоконагруженных веб-сервисов и микросервисов. Вот несколько ключевых моментов, почему Go часто используется для разработки backend'а:

  1. Производительность: Go компилируется в машинный код, что обеспечивает высокую скорость выполнения программ. Это особенно важно для серверов, которые должны обрабатывать большое количество запросов в секунду.
  1. Простота и читаемость кода: Синтаксис Go прост и понятен, что упрощает чтение и поддержку кода. Это делает его привлекательным для новых разработчиков и помогает командам быстро масштабироваться.
  1. Параллелизм: Go имеет встроенную поддержку конкурентности и горутин, что позволяет эффективно использовать многоядерные процессоры для выполнения параллельных задач. Это особенно полезно для обработки большого количества одновременных соединений.
  1. Стандартная библиотека: Go поставляется с богатой стандартной библиотекой, которая охватывает многие аспекты разработки веб-приложений, включая работу с HTTP, JSON, регулярными выражениями и многим другим. Это снижает необходимость в сторонних библиотеках и упрощает разработку.
  1. Многоплатформенность: Go поддерживает кросс-платформенную разработку, что позволяет разрабатывать приложения для различных операционных систем без значительных изменений кода.
  1. Сообщество и экосистема: Go имеет активное сообщество разработчиков и богатую экосистему сторонних библиотек и фреймворков, таких как Gin, Echo, Beego, которые облегчают разработку веб-приложений.

Таким образом, Go стал популярным выбором для разработки backend'а веб-приложений и микросервисов, благодаря своей производительности, простоте и мощным возможностям для параллельного программирования.

------

Go сам по себе не предоставляет встроенного веб-сервера в том смысле, как это делают некоторые другие языки программирования с их собственными веб-фреймворками (например, Django для Python или Express.js для Node.js). Вместо этого, Go предоставляет мощный стандартный пакет для работы с HTTP (net/http), который позволяет разработчикам создавать веб-серверы и клиенты с нуля. Этот подход дает разработчикам гибкость и контроль над тем, как их веб-сервер будет работать, но требует от них больше усилий по настройке и управлению сервером.

Тем не менее, существует множество сторонних фреймворков и библиотек для Go, которые облегчают разработку веб-приложений, включая веб-серверы. Эти фреймворки обычно предоставляют дополнительные функции, такие как маршрутизация, обработка форм, аутентификация, логирование и т.д., которые упрощают процесс разработки. Некоторые из наиболее популярных фреймворков для веб-разработки на Go включают:

  • Gin: Легкий и быстрый фреймворк, который предоставляет простой способ создания веб-приложений с минимальными затратами на производительность.
  • Echo: Поддерживает плагины и предоставляет мощные возможности для маршрутизации, валидации и обработки запросов.
  • Beego: Полноценный фреймворк с ORM, поддержкой RESTful API, автогенерацией кода и многим другим. Он предлагает более высокоуровневый подход к разработке веб-приложений на Go.

Эти фреймворки и многие другие позволяют разработчикам использовать Go для создания веб-серверов, используя более высокоуровневый и абстрактный подход, чем тот, который предлагает стандартный пакет net/http.

Важно отметить, что, хотя Go не предоставляет встроенного веб-сервера в традиционном понимании, его стандартный пакет net/http и доступные фреймворки делают его мощным инструментом для разработки веб-приложений и сервисов.

------

Работа с базами данных — это критически важный аспект многих веб-приложений и сервисов, и оба языка программирования, Rust и Go, предлагают различные подходы и инструменты для взаимодействия с базами данных. Давайте рассмотрим, как это работает на каждом из языков.

Rust

В Rust для работы с базами данных обычно используются специализированные библиотеки третьих сторон, поскольку стандартная библиотека Rust не предоставляет прямой поддержки для баз данных. Некоторые из наиболее популярных библиотек для работы с базами данных в Rust:

  • Diesel: ORM (Object-Relational Mapping) для Rust, который позволяет работать с базами данных, используя объектно-ориентированный подход. Diesel поддерживает SQL и предлагает безопасное и экспрессивное API для выполнения запросов к базе данных.
  • sqlx: Эта библиотека предоставляет поддержку для подготовленных выражений и транзакций, а также поддерживает несколько баз данных, включая PostgreSQL, MySQL и SQLite. sqlx стремится быть как возможно ближе к SQL, делая его удобным для использования в проектах, где требуется максимальная гибкость и контроль.
  • tokio-postgres: Для асинхронной работы с PostgreSQL. tokio-postgres позволяет выполнять запросы к базе данных асинхронно, что может значительно улучшить производительность приложений, работающих с большими объемами данных.

Go

В Go стандартная библиотека предоставляет базовый уровень поддержки для работы с базами данных через пакет database/sql, который является оберткой вокруг драйверов баз данных. Это означает, что для работы с базами данных вам потребуется выбрать соответствующий драйвер базы данных. Некоторые из наиболее популярных драйверов и библиотек для работы с базами данных в Go:

  • gorm: ORM для Go, который поддерживает множество баз данных, включая PostgreSQL, MySQL, SQLite и SQL Server. Gorm предлагает удобный и экспрессивный API для выполнения запросов к базе данных, включая поддержку миграций, транзакций и подготовленных выражений.
  • sqlx: Подобно версии для Rust, sqlx для Go предлагает расширенные возможности для работы с базами данных, включая поддержку подготовленных выражений, транзакций и асинхронного программирования.
  • pgx: Асинхронный драйвер для PostgreSQL, который позволяет выполнять запросы к базе данных асинхронно, улучшая производительность приложений, работающих с большими объемами данных.

Выводы

Оба языка предлагают мощные и гибкие инструменты для работы с базами данных, но с некоторыми различиями в подходах. Rust, благодаря своему строгому типу и безопасности, может предложить более надежный и безопасный способ работы с данными, в то время как Go, с его простотой и производительностью, может быть более предпочтительным для быстрой разработки и высоконагруженных приложений. Выбор между ними зависит от конкретных требований проекта и предпочтений команды разработки.

-----

Go и C# являются двумя разными языками программирования, разработанными с разными целями и философиями, и оба успешно применяются в различных сферах разработки. Сравнение между ними может быть непрямолинейным, поскольку они предназначены для решения разных задач и имеют свои уникальные преимущества. Давайте рассмотрим несколько ключевых аспектов, чтобы понять, в чем могут заключаться их преимущества и недостатки по отношению друг к другу.

Производительность и Эффективность

Go известен своей простотой, скоростью компиляции и высокой производительностью. Он оптимизирован для быстрой разработки и эффективного выполнения, что делает его идеальным для создания высоконагруженных веб-сервисов и микросервисов. Go использует компиляцию в машинный код, что обеспечивает высокую скорость выполнения.

C# (.NET) также предлагает высокую производительность, особенно с использованием .NET Core и .NET 5/6, которые оптимизированы для кросс-платформенной разработки. C# предоставляет богатые возможности для разработки сложных приложений, включая веб-разработку, мобильную разработку с Xamarin и разработку настольных приложений.

Безопасность и Типизация

Go использует статическую типизацию, но с более мягкими правилами, чем в некоторых других языках. Это делает его достаточно гибким для быстрой разработки, но все же обеспечивает определенный уровень безопасности типов.

C# предлагает строгую статическую типизацию, что увеличивает безопасность типов и помогает избежать многих ошибок во время компиляции. Это может быть особенно полезно в крупных проектах и приложениях, где безопасность типов играет ключевую роль.

Кросс-Платформенность

Go изначально был разработан как кросс-платформенный язык, и его стандартная библиотека предоставляет широкие возможности для работы с различными операционными системами.

C#, начиная с .NET Core, также стал полностью кросс-платформенным, что позволяет разработчикам создавать приложения для Windows, Linux и macOS с единым кодовым базисом.

Экосистема и Сообщество

Go имеет активное сообщество разработчиков и богатую экосистему сторонних библиотек и инструментов, что делает его мощным инструментом для разработки веб-приложений, микросервисов и других видов приложений.

C# также обладает сильным сообществом и экосистемой, особенно в области разработки .NET. С появлением .NET Core и .NET 5/6 сообщество продолжает расти, и теперь C# предлагает широкие возможности для разработки практически любого типа приложения.

Выводы

Выбор между Go и C# зависит от конкретных требований проекта, предпочтений команды разработки и целевой платформы. Go может быть предпочтительнее для быстрой разработки веб-сервисов и микросервисов благодаря своей простоте и производительности. C#, с другой стороны, может быть лучшим выбором для разработки сложных приложений, требующих глубокой интеграции с Windows или разработки на нескольких платформах с использованием .NET Core/.NET 5/6.

Оба языка предлагают мощные инструменты и возможности, и выбор между ними должен основываться на конкретных нуждах вашего проекта.

https://www.youtube.com/watch?v=LjIe4w_-vzk

https://www.youtube.com/watch?v=ZJ6dVVobjaI

https://www.youtube.com/watch?v=7u1b6FNbfJk

https://www.youtube.com/watch?v=gy_slCFMKfk

https://www.youtube.com/watch?v=dSoP7EF2YJ4


среда, 10 апреля 2024 г.

Windows, Version, support, 2024 Server, ChartDirector, NETSDK1135,

Windows, Version, support, 2024 Server, ChartDirector

NETSDK1135

https://learn.microsoft.com/en-us/dotnet/core/tools/sdk-errors/netsdk1135?f1url=%3FappId%3DDev17IDEF1%26l%3DEN-US%26k%3Dk(NETSDK1135)%26rd%3Dtrue

Severity Code Description Project File Line Suppression State Details

Error NETSDK1135 SupportedOSPlatformVersion 10.0.22621.0 cannot be higher than TargetPlatformVersion 10.0.22000.0. WpfChartDir01 C:\Program Files\dotnet\sdk\8.0.202\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets 215

net 8 with Windows
7
8
10.0.17763
10.0.18362
10.0.19041
10.0.20348
10.0.22000


C++, Uwp

С++, Uwp

// UWP (Universal Windows Platform) - это платформа для разработки приложений, которые могут работать на различных устройствах Windows 10, включая ПК, мобильные устройства, Xbox и HoloLens.

// UWP предоставляет функциональность для работы с файловой системой, сетью, устройствами ввода, и другими возможностями Windows.

// Языки программирования: C++, C#, Visual Basic, JavaScript.

// В UWP C++ используются следующие библиотеки:

// - Windows Runtime C++ Template Library (WRL)

// - C++/WinRT

// - C++/CX

// WRL (Windows Runtime C++ Template Library) - это библиотека шаблонов C++, которая предоставляет функции для работы с Windows Runtime (WinRT) в C++.

// Она позволяет использовать компоненты Windows Runtime в приложениях на C++, обеспечивая более низкоуровневый доступ к API Windows.

// WRL (Windows Runtime C++ Template Library) используется для работы с Windows Runtime (WinRT) в C++, предоставляя низкоуровневый доступ к API Windows.

// C++ WinRT занимает нишу разработки приложений для Windows, используя современные C++ и компоненты Windows Runtime (WinRT).

// Он предназначен для создания приложений с высокой производительностью и современным интерфейсом, используя C++.

// WinRT кроссплатформенный, поддерживая разработку приложений для Windows, Android, и iOS.

// WinRT не предоставляет встроенных средств для создания сервисов и конечных точек в стиле .NET Core.

// Однако, можно использовать WinRT для разработки клиентских приложений, которые взаимодействуют с сервисами и конечными точками,

// например, через HTTP-запросы к REST API.

// Да, в WinRT есть HttpClient для выполнения HTTP-запросов.

// HttpClient в WinRT поддерживает WebSockets, но не через HTTP/2.0.

// WebSockets в WinRT используют протокол WebSocket, который работает поверх TCP.

// Да, .NET Core HttpClient поддерживает WebSockets и может использовать HTTP/2.0.

// Да, .NET Core HttpClient поддерживает WebSockets и может использовать HTTP/2.0.

bool isWebSocket = client.DefaultRequestHeaders.Connection.Contains("Upgrade");

// Да, C++ проект "Desktop Windows App" представляет собой классическое приложение Windows, написанное на C++.

// Нет, "Desktop Windows App" в C++ не обязательно использует MFC (Microsoft Foundation Classes).

// Это может быть классическое приложение Windows, использующее WinAPI или другие технологии.

// UWP (Universal Windows Platform) - это платформа для разработки приложений, которые могут работать на различных устройствах Windows 10, включая ПК, мобильные устройства, Xbox и HoloLens.

// UWP предоставляет функциональность для работы с файловой системой, сетью, устройствами ввода, и другими возможностями Windows.

// Языки программирования: C++, C#, Visual Basic, JavaScript.

// В UWP C++ используются следующие библиотеки:

// - Windows Runtime C++ Template Library (WRL)

// - C++/WinRT

// - C++/CX

// WRL (Windows Runtime C++ Template Library) - это библиотека шаблонов C++, которая предоставляет функции для работы с Windows Runtime (WinRT) в C++.

// Она позволяет использовать компоненты Windows Runtime в приложениях на C++, обеспечивая более низкоуровневый доступ к API Windows.

// WRL (Windows Runtime C++ Template Library) используется для работы с Windows Runtime (WinRT) в C++, предоставляя низкоуровневый доступ к API Windows.

// Написание TCP/IP сервера на UWP C++ может быть сложным, поскольку UWP ограничивает доступ к сетевым функциям для повышения безопасности и изоляции приложений.

// Однако, с использованием StreamSocketListener и StreamSocket для асинхронного ввода-вывода данных, это возможно.

// Да, TCP/IP клиент в UWP реализован через классы StreamSocket и StreamSocketListener для асинхронного ввода-вывода данных.

// В UWP есть поддержка TCP/IP клиента, но прямой поддержки TCP/IP сервера нет.

// Для реализации сервера в UWP можно использовать StreamSocketListener для прослушивания входящих соединений.

// В UWP C++ напрямую использовать Boost.Asio для создания TCP/IP сервера невозможно из-за ограничений безопасности и изоляции приложений.

// Однако, можно использовать StreamSocketListener для асинхронного ввода-вывода данных, что позволяет реализовать аналогичную функциональность.

// Boost.Asio можно использовать в любых приложениях C++ Desktop Windows App, которые не подвержены ограничениям безопасности и изоляции UWP.

// Это включает в себя классические приложения Windows, написанные на C++, которые не требуют публикации в Microsoft Store.

// Для написания сервера TCP с использованием Boost.Asio в C++ Desktop Windows App в Visual Studio, можно использовать следующие типы проектов:

// - "Windows Desktop Wizard" для создания классического приложения Windows.

// - "Windows Console Application" для создания консольного приложения, которое также может быть использовано для серверных приложений.

// - "Windows Forms Application" для создания приложения с графическим интерфейсом пользователя, если требуется визуальное представление данных.

// - "Windows Presentation Foundation (WPF) Application" для создания более сложных графических интерфейсов пользователя.

// Важно отметить, что для использования Boost.Asio в проектах, не предназначенных для UWP, необходимо убедиться, что в проекте отключены ограничения безопасности и изоляции, которые применяются к UWP приложениям.

// "Windows Forms Application" и "Windows Presentation Foundation (WPF) Application" в Visual Studio по умолчанию создаются для C# и VB.NET.

// Для создания аналогичных проектов на C++ с использованием Windows Forms или WPF, необходимо указать C++ в качестве языка программирования при создании проекта.

// В Visual Studio, при создании нового проекта, выберите "Windows Desktop Wizard" и укажите C++ в качестве языка программирования, чтобы создать проект на C++ с поддержкой Windows Forms или WPF.

// Использование Windows Presentation Foundation (WPF) с C++ в Visual Studio возможно, но требует дополнительных шагов для настройки проекта.

// Visual Studio поддерживает создание WPF приложений на C++, но для этого необходимо включить поддержку CLR (Common Language Runtime) и использовать C++/CLI.

// C++/CLI позволяет использовать .NET Framework и его функции, включая Reflection, в C++ приложениях.

// Пример создания WPF приложения на C++:

// 1. Создайте новый проект "CLR Empty Project".

// 2. Добавьте ссылку на сборку Windows Presentation Foundation.

// 3. Используйте C++/CLI для написания кода, который использует WPF.

// Да, это возможно. Вы можете написать сервер на C++ в виде Windows Service, который будет обрабатывать сетевые соединения, и использовать C# для создания пользовательского интерфейса с помощью Windows Forms или WPF.

// Windows Service позволяет запускать приложение в фоновом режиме, не требуя взаимодействия с пользователем.

// Для связи между сервером на C++ и клиентом на C# можно использовать различные методы, включая TCP/IP соединения, файлы, или даже Windows Communication Foundation (WCF) для более сложных сценариев.

// Да, это нормальный и распространенный подход. Создание сервера на C++ с минимальным интерфейсом в виде UWP приложения (для управления запуском и остановкой сервиса) и основного интерфейса на C# позволяет максимально использовать преимущества каждой технологии.

// UWP приложение может быть использовано для управления сервисом, в то время как C# приложение обеспечивает более богатый и удобный пользовательский интерфейс.

// Этот подход позволяет разделить ответственность между сервером и клиентом, упрощая разработку и поддержку приложения.

// Для UI TCP сервера на C++ можно использовать следующие варианты:

// 1. Qt - кроссплатформенная библиотека для создания графических интерфейсов, поддерживающая C++.

// 2. wxWidgets - еще одна кроссплатформенная библиотека для создания GUI приложений на C++.

// 3. MFC (Microsoft Foundation Classes) - для создания нативных Windows приложений на C++.

// 4. WinForms или WPF с использованием C++/CLI для интеграции с .NET.

// Примеры использования:

// - Qt с C++ для создания сервера и клиента.

// - wxWidgets для создания GUI для сервера.

// Для Node.js и React:

// - Node.js может быть использован для создания сервера, а React для клиентского интерфейса.

// - Примеры: сервер на Node.js с использованием Express.js для обработки HTTP запросов, и клиент на React для отображения данных.

// Да, Visual Studio поддерживает разработку приложений на C++ с использованием Qt.

// Для работы с Qt в Visual Studio необходимо установить Qt Visual Studio Tools, которые предоставляют интеграцию Qt в среду разработки.

// Это позволяет создавать, отлаживать и развертывать приложения на Qt прямо из Visual Studio.

Тогода QT, наверное лучше, чем любое UWP c++

1. Скачайте и установите Qt Visual Studio Tools из Visual Studio Marketplace.

2. Запустите Visual Studio 2022.

3. Перейдите в "Инструменты" -> "Параметры" -> "Расширения" -> "Qt VS Tools".

4. В разделе "Qt Versions" нажмите "Добавить" и укажите путь к установленному Qt.

5. После добавления Qt версии, перейдите в "Инструменты" -> "Параметры" -> "Проекты и решения" -> "VC++ каталоги".

6. Добавьте пути к заголовочным файлам и библиотекам Qt в соответствующие поля.

7. Перейдите в "Инструменты" -> "Параметры" -> "Проекты и решения" -> "Сборка и запуск".

8. В разделе "Общие" убедитесь, что в поле "Параметры запуска" указан путь к исполняемому файлу Qt.

9. Создайте новый проект Qt в Visual Studio 2022, выбрав "Qt Application" в качестве типа проекта.

10. Настройте проект, добавив необходимые файлы и ресурсы.

11. Скомпилируйте и запустите проект, чтобы убедиться в корректности установки и настройки.