ORM
https://ru.wikipedia.org/wiki/Список_ORM-библиотек
https://habr.com/ru/articles/237889/
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
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
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
Introduction to GitHub CoPilot | Microsoft Learn
Install in VSCode
Enter throw GitHub password
Trial period 30 days, then pay 10$
. Использование 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-сервере.
---------------------------------
Это наиболее безопасный и распространенный способ доступа к Linux-серверам из Windows.
Ubuntu поддерживает Remote Desktop Protocol (RDP), но это требует дополнительной настройки:
Вариант альтернативы RDP:
Коммерческие решения с графическим интерфейсом:
Выберите метод, который лучше всего подходит для ваших потребностей в безопасности и удобстве использования. SSH обычно является наиболее безопасным выбором для удаленного доступа к серверу.
Rust:
Go (GoLang):
Rust:
tokio
для асинхронного программирования, упрощают разработку сетевых приложений и работы с параллелизмом.Go (GoLang):
Gin
или Echo
, облегчают создание HTTP API и веб-приложений.Rust:
Go (GoLang):
Выбор между Rust и Go зависит от конкретных требований проекта и предпочтений команды разработки. Rust предлагает высокую степень безопасности и производительности, что делает его идеальным для системного программирования и приложений, где безопасность памяти критична. Go, с другой стороны, предлагает простой синтаксис и быструю разработку, что делает его отличным выбором для веб-разработки и микросервисов.
-------------------------
Давайте рассмотрим, как языки программирования Rust и Go работают в современных операционных системах, их зависимости от ОС, инструменты для разработки и тестирования.
Rust:
Go (GoLang):
gc
. Это обеспечивает хорошую производительность и скорость запуска приложений.Rust:
Go (GoLang):
Rust:
rustc
(компилятор), cargo
(система сборки и менеджер пакетов).Cargo
автоматизирует процесс сборки, тестирования и управления зависимостями, что упрощает разработку.Go (GoLang):
gccgo
(компилятор), go build
(для сборки), go run
(для запуска кода напрямую).go mod
используется для управления зависимостями и обеспечения кросс-платформенной совместимости.Rust:
gtk-rs
, iced
, druid
. Эти фреймворки предоставляют различные способы создания графического пользовательского интерфейса.cargo-generate
для генерации проектов на основе шаблонов, gtk-builder-tool
для работы с GTK+ виджетами.Go (GoLang):
Fyne
, Lazarus
(через Free Pascal). Эти фреймворки предоставляют простые и удобные способы создания графических интерфейсов.go get
для установки пакетов, go mod tidy
для управления зависимостями.Rust:
#[test]
. Тесты могут быть легко интегрированы в процесс сборки с помощью cargo test
.clippy
.Go (GoLang):
func TestXxx(*testing.T)
. Тесты могут быть запущены с помощью команды go test
.golint
, staticcheck
.Оба языка предлагают мощные инструменты для разработки, тестирования и деплоя приложений, хотя они имеют свои особенности и предпочтения в зависимости от типа проекта и требований к безопасности и производительности.
------
Перспективы развития языков программирования Rust и Go (GoLang) выглядят весьма обещающими, несмотря на то, что каждый из них сталкивается с определенными вызовами и ограничениями. Давайте рассмотрим их текущее положение и перспективы развития.
Rust:
Go (GoLang):
На сегодняшний день, оба языка занимают заметное место в рейтингах популярности языков программирования:
Rust: Несмотря на то, что Rust еще не достиг уровня популярности, сопоставимого с такими языками, как Python или JavaScript, он быстро растет и привлекает внимание разработчиков благодаря своим уникальным преимуществам. В рейтингах популярности Rust постепенно повышается, что свидетельствует о его растущем влиянии и приеме в индустрии.
Go (GoLang): Go находится в топ-10 самых популярных языков программирования, согласно различным рейтингам и опросам разработчиков. Его простота, производительность и широкий спектр применения делают его одним из наиболее востребованных языков для разработки современных веб-приложений и микросервисов.
Оба языка обладают сильными сторонами, которые делают их привлекательными для разработчиков разных уровней. Rust продолжает укреплять свое положение как язык, обеспечивающий высокую безопасность и производительность, в то время как Go остается лидером в области веб-разработки и микросервисов. Их будущее выглядит ярким и перспективным, с постоянным развитием экосистемы, инструментов и библиотек.
----------
Да, когда я
упоминаю Go в контексте веб-разработки, я имею в виду, в основном,
разработку backend'а. Go стал очень популярен в этой области благодаря
своей простоте, производительности и эффективности в создании
высоконагруженных веб-сервисов и микросервисов. Вот несколько ключевых
моментов, почему Go часто используется для разработки backend'а:
Таким образом, Go стал популярным выбором для разработки backend'а веб-приложений и микросервисов, благодаря своей производительности, простоте и мощным возможностям для параллельного программирования.
------
Go сам по
себе не предоставляет встроенного веб-сервера в том смысле, как это
делают некоторые другие языки программирования с их собственными
веб-фреймворками (например, Django для Python или Express.js для
Node.js). Вместо этого, Go предоставляет мощный стандартный пакет для
работы с HTTP (net/http
),
который позволяет разработчикам создавать веб-серверы и клиенты с нуля.
Этот подход дает разработчикам гибкость и контроль над тем, как их
веб-сервер будет работать, но требует от них больше усилий по настройке и
управлению сервером.
Тем не менее, существует множество сторонних фреймворков и библиотек для Go, которые облегчают разработку веб-приложений, включая веб-серверы. Эти фреймворки обычно предоставляют дополнительные функции, такие как маршрутизация, обработка форм, аутентификация, логирование и т.д., которые упрощают процесс разработки. Некоторые из наиболее популярных фреймворков для веб-разработки на Go включают:
Эти
фреймворки и многие другие позволяют разработчикам использовать Go для
создания веб-серверов, используя более высокоуровневый и абстрактный
подход, чем тот, который предлагает стандартный пакет net/http
.
Важно отметить, что, хотя Go не предоставляет встроенного веб-сервера в традиционном понимании, его стандартный пакет net/http
и доступные фреймворки делают его мощным инструментом для разработки веб-приложений и сервисов.
------
Работа с базами данных — это критически важный аспект многих веб-приложений и сервисов, и оба языка программирования, Rust и Go, предлагают различные подходы и инструменты для взаимодействия с базами данных. Давайте рассмотрим, как это работает на каждом из языков.
В Rust для работы с базами данных обычно используются специализированные библиотеки третьих сторон, поскольку стандартная библиотека Rust не предоставляет прямой поддержки для баз данных. Некоторые из наиболее популярных библиотек для работы с базами данных в Rust:
В Go стандартная библиотека предоставляет базовый уровень поддержки для работы с базами данных через пакет database/sql
,
который является оберткой вокруг драйверов баз данных. Это означает,
что для работы с базами данных вам потребуется выбрать соответствующий
драйвер базы данных. Некоторые из наиболее популярных драйверов и
библиотек для работы с базами данных в Go:
Оба языка предлагают мощные и гибкие инструменты для работы с базами данных, но с некоторыми различиями в подходах. 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
Просмотр фото Стандартным средством просмотра фотографий
Windows, Version, support, 2024 Server, ChartDirector
NETSDK1135
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
С++, 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. Скомпилируйте и запустите проект, чтобы убедиться в корректности установки и настройки.