[{"content":"","date":null,"permalink":"/tags/advanced/","section":"Теги","summary":"","title":"advanced"},{"content":"","date":null,"permalink":"/tags/computer-graphics/","section":"Теги","summary":"","title":"computer graphics"},{"content":"","date":null,"permalink":"/tags/game-development/","section":"Теги","summary":"","title":"game development"},{"content":"","date":null,"permalink":"/tags/innopolis/","section":"Теги","summary":"","title":"innopolis"},{"content":" Lecture 16. Rasterization pipeline Lecture 17. Raytracing pipeline Lecture 18. Hybrid pipeline Lab 06. Course project ","date":"17.04.2026","permalink":"/talk/acg-2026-spring-06/","section":"Выступления и лекции","summary":"Lecture 16.","title":"Rasterization and Ray Tracing"},{"content":"","date":null,"permalink":"/talk/","section":"Выступления и лекции","summary":"","title":"Выступления и лекции"},{"content":"Образование # 🎓 2018 - Преподаватель-исследователь по направлению \u0026ldquo;Информатика и вычислительная техника\u0026rdquo;, Обнинский институт атомной энергетики НИЯУ МИФИ\n🎓 2014 - Магистр техники и технологии по направлению \u0026ldquo;Информатика и вычислительная техника\u0026rdquo;, Обнинский институт атомной энергетики НИЯУ МИФИ\n🎓 2012 - Бакалавр техники и технологии по направлению \u0026ldquo;Информатика и вычислительная техника\u0026rdquo;, Обнинский институт атомной энергетики НИЯУ МИФИ\n","date":null,"permalink":"/","section":"Обо мне","summary":"Образование # 🎓 2018 - Преподаватель-исследователь по направлению \u0026ldquo;Информатика и вычислительная техника\u0026rdquo;, Обнинский институт атомной энергетики НИЯУ МИФИ","title":"Обо мне"},{"content":"","date":null,"permalink":"/tags/","section":"Теги","summary":"","title":"Теги"},{"content":" Lecture 13. Frame debugging Lecture 14. View-guided profiling Lecture 15. Optimization strategy Lab 05. Project optimization ","date":"27.03.2026","permalink":"/talk/acg-2026-spring-05/","section":"Выступления и лекции","summary":"Lecture 13.","title":"Debugging"},{"content":" Lecture 10. Scene Graph Lecture 11. Meshes Lecture 12. Animation Lab 04. glTF Scene Loading ","date":"13.03.2026","permalink":"/talk/acg-2026-spring-04/","section":"Выступления и лекции","summary":"Lecture 10.","title":"glTF Scene"},{"content":" Lecture 07. Render graph Lecture 08. Lighting Lecture 10. Post-processing and anti-aliasing Lab 03. Plugins ","date":"27.02.2026","permalink":"/talk/acg-2026-spring-03/","section":"Выступления и лекции","summary":"Lecture 07.","title":"Plugins"},{"content":" Lecture 04. Graphics API and Rendering Hardware Interfaces Lecture 05. Profiling Lecture 06. Tool-guided profiling Lab 02. Base Performance Analysis ","date":"07.02.2026","permalink":"/talk/acg-2026-spring-02/","section":"Выступления и лекции","summary":"Lecture 04.","title":"Base performance analysis"},{"content":" Lecture 01. Output devices Lecture 02. Game loop Lecture 03. GPU workloads Lab 01. Project setup ","date":"23.01.2026","permalink":"/talk/acg-2026-spring-01/","section":"Выступления и лекции","summary":"Lecture 01.","title":"Game loop"},{"content":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","date":"22.11.2025","permalink":"/talk/cg-2025-fall-04/","section":"Выступления и лекции","summary":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","title":"Advanced technics and algorithms"},{"content":"","date":null,"permalink":"/tags/elective/","section":"Теги","summary":"","title":"elective"},{"content":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"07.11.2025","permalink":"/talk/cg-2025-fall-03/","section":"Выступления и лекции","summary":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX 12"},{"content":" Lecture 06: Ray tracing. Camera rays Lecture 07: Ray intersection Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"24.10.2025","permalink":"/talk/cg-2025-fall-02/","section":"Выступления и лекции","summary":"Lecture 06: Ray tracing.","title":"Basics of raytracing"},{"content":" Lecture 01: Image. Clearing of the image Lecture 02: 3D model consuming Lecture 03: Vertex transformations Lecture 04: Triangle rasterization Lecture 05: Depth buffer ","date":"03.10.2025","permalink":"/talk/cg-2025-fall-01/","section":"Выступления и лекции","summary":"Lecture 01: Image.","title":"Basics of rasterization"},{"content":" Lecture 16. Level of details Lab 04. Performance analysis ","date":"12.04.2025","permalink":"/talk/acg-2025-spring-08/","section":"Выступления и лекции","summary":"Lecture 16.","title":"Performance analysis"},{"content":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","date":"11.04.2025","permalink":"/talk/cg-2025-spring-04/","section":"Выступления и лекции","summary":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","title":"Advanced technics and algorithms"},{"content":" Lecture 13. Tool Lecture 14. Tool-guided profiling Lecture 15. View-guided profiling ","date":"10.04.2025","permalink":"/talk/acg-2025-spring-07/","section":"Выступления и лекции","summary":"Lecture 13.","title":"Performance analysis and optimization"},{"content":" Lecture 12. Anti-aliasing Lab 03. Plugins and fine-tuning ","date":"21.03.2025","permalink":"/talk/acg-2025-spring-06/","section":"Выступления и лекции","summary":"Lecture 12.","title":"Plugins and fine-tuning"},{"content":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"21.03.2025","permalink":"/talk/cg-2025-spring-03/","section":"Выступления и лекции","summary":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX12"},{"content":" Lecture 09. Render graph Lecture 10. Lighting Lecture 11. Post processing ","date":"20.03.2025","permalink":"/talk/acg-2025-spring-05/","section":"Выступления и лекции","summary":"Lecture 09.","title":"Render graph"},{"content":" Lecture 08. Animation Lab 02. Prototyping ","date":"01.03.2025","permalink":"/talk/acg-2025-spring-04/","section":"Выступления и лекции","summary":"Lecture 08.","title":"Prototyping"},{"content":" Lecture 06: Ray tracing. Camera rays Lecture 07: Ray intersection Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"28.02.2025","permalink":"/talk/cg-2025-spring-02/","section":"Выступления и лекции","summary":"Lecture 06: Ray tracing.","title":"Basics of ray tracing"},{"content":" Lecture 05. Data-oriented design Lecture 06. Scene graph Lecture 07. Meshes ","date":"27.02.2025","permalink":"/talk/acg-2025-spring-03/","section":"Выступления и лекции","summary":"Lecture 05.","title":"In-game world representation"},{"content":" Lecture 04. Graphics API and Rendering Hardware Interfaces Lab 01. Environment setup ","date":"08.02.2025","permalink":"/talk/acg-2025-spring-02/","section":"Выступления и лекции","summary":"Lecture 04.","title":"Setup development environment"},{"content":" Lecture 01: Image. Clearing of the image Lecture 02: 3D model consuming Lecture 03: Vertex transformations Lecture 04: Triangle rasterization Lecture 05: Depth buffer ","date":"07.02.2025","permalink":"/talk/cg-2025-spring-01/","section":"Выступления и лекции","summary":"Lecture 01: Image.","title":"Basics of rasterization"},{"content":" Lecture 01. Output devices Lecture 02. Game loop Lecture 03. GPU workloads ","date":"06.02.2025","permalink":"/talk/acg-2025-spring-01/","section":"Выступления и лекции","summary":"Lecture 01.","title":"Game loop"},{"content":"","date":null,"permalink":"/tags/golang/","section":"Теги","summary":"","title":"golang"},{"content":"","date":null,"permalink":"/tags/tools/","section":"Теги","summary":"","title":"tools"},{"content":"","date":null,"permalink":"/tags/vendoring/","section":"Теги","summary":"","title":"vendoring"},{"content":"","date":null,"permalink":"/post/","section":"Блог","summary":"","title":"Блог"},{"content":"В Golang используются два подхода работы c зависимостями проекта: использовать зависимости из общего кеша модулей или из папки vendor проекта. В первом варианте полагаемся на то, что зависимости будут доступны по сети. Во втором варианте нужные для сборки проекта зависимости помещены внутрь проекта.\nВ случае библиотек сначала обновляется список используемых зависимостей в go.mod, а затем из этих зависимостей формируется папка vendor. Для этого выполните:\ngo mod tidy go mod vendor После выполнения этих двух команд в папке vendor будут скопированы все используемые библиотеки, а команды go ... будут искать зависимости в этой папке. Причем вендорится только используемая часть кода.\nЕсли в проекте используется vendor, естественными образом возникает желание подобным образом хранить еще и инструменты. Например, goimports для форматирования импортов. Этот процесс каверзный. Для этого создаем файл tools.go. Можно в корне проекта, можно отдельным пакетом.\n//go:build tools // +build tools package tools import ( _ golang.org/x/tools/cmd/goimports ) Начало файла - это build constraint для сборки tools, по умолчанию этот файл не попадет в сборку. go mod tidy будет работать с любым именем кроме ignore.\nИмя пакета либо main, либо по имени директории.\nДалее в секции import указываем пути к нужным инструментам. Важно указать путь к main пакету инструмента, иначе в vendor будет не весь код. При этом IDE буден сообщать об ошибке импорта пакета main - это ожидаемое.\nДалее процесс аналогичен вендорингу библиотек:\ngo mod tidy go mod vendor В конце приятная новость. В Golang 1.24 в go.mod появится специальная директива tools для указания инструментов и этот трюк уйдет в прошлое.\n","date":"24.01.2025","permalink":"/post/how-to-vendor-tools/","section":"Блог","summary":"В Golang используются два подхода работы c зависимостями проекта: использовать зависимости из общего кеша модулей или из папки vendor проекта.","title":"Как завендорить инструменты в Golang"},{"content":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","date":"22.11.2024","permalink":"/talk/cg-2024-fall-04/","section":"Выступления и лекции","summary":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","title":"Advanced technics and algorithms"},{"content":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"01.11.2024","permalink":"/talk/cg-2024-fall-03/","section":"Выступления и лекции","summary":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX 12"},{"content":" Lecture 06: Ray tracing. Camera rays Lecture 07: Ray intersection Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"11.10.2024","permalink":"/talk/cg-2024-fall-02/","section":"Выступления и лекции","summary":"Lecture 06: Ray tracing.","title":"Basics of raytracing"},{"content":" Lecture 01: Image. Clearing of the image Lecture 02: 3D model consuming Lecture 03: Vertex transformations Lecture 04: Triangle rasterization Lecture 05: Depth buffer ","date":"20.09.2024","permalink":"/talk/cg-2024-fall-01/","section":"Выступления и лекции","summary":"Lecture 01: Image.","title":"Basics of rasterization"},{"content":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","date":"01.12.2023","permalink":"/talk/cg-2023-fall-04/","section":"Выступления и лекции","summary":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","title":"Advanced technics and algorithms"},{"content":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"10.11.2023","permalink":"/talk/cg-2023-fall-03/","section":"Выступления и лекции","summary":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX 12"},{"content":" Lecture 06: Ray tracing. Camera rays Lecture 07: Ray intersection Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"20.10.2023","permalink":"/talk/cg-2023-fall-02/","section":"Выступления и лекции","summary":"Lecture 06: Ray tracing.","title":"Basics of raytracing"},{"content":" Lecture 01: Image. Clearing of the image Lecture 02: 3D model consuming Lecture 03: Vertex transformations Lecture 04: Triangle rasterization Lecture 05: Depth buffer ","date":"29.09.2023","permalink":"/talk/cg-2023-fall-01/","section":"Выступления и лекции","summary":"Lecture 01: Image.","title":"Basics of rasterization"},{"content":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","date":"21.07.2023","permalink":"/talk/cg-2023-summer-04/","section":"Выступления и лекции","summary":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","title":"Advanced technics and algorithms"},{"content":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"07.07.2023","permalink":"/talk/cg-2023-summer-03/","section":"Выступления и лекции","summary":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX 12"},{"content":" Lecture 06: Ray tracing. Camera rays Lecture 07: Ray intersection Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"23.06.2023","permalink":"/talk/cg-2023-summer-02/","section":"Выступления и лекции","summary":"Lecture 06: Ray tracing.","title":"Basics of raytracing"},{"content":" Lecture 01: Image. Clearing of the image Lecture 02: 3D model consuming Lecture 03: Vertex transformations Lecture 04: Triangle rasterization Lecture 05: Depth buffer ","date":"16.06.2023","permalink":"/talk/cg-2023-summer-01/","section":"Выступления и лекции","summary":"Lecture 01: Image.","title":"Basics of rasterization"},{"content":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","date":"21.04.2023","permalink":"/talk/cg-2023-spring-04/","section":"Выступления и лекции","summary":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","title":"Advanced technics and algorithms"},{"content":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"31.03.2023","permalink":"/talk/cg-2023-spring-03/","section":"Выступления и лекции","summary":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX 12"},{"content":" Lecture 06: Ray tracing. Camera rays Lecture 07: Ray intersection Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"10.03.2023","permalink":"/talk/cg-2023-spring-02/","section":"Выступления и лекции","summary":"Lecture 06: Ray tracing.","title":"Basics of raytracing"},{"content":" Lecture 01: Image. Clearing of the image Lecture 02: 3D model consuming Lecture 03: Vertex transformations Lecture 04: Triangle rasterization Lecture 05: Depth buffer ","date":"17.02.2023","permalink":"/talk/cg-2023-spring-01/","section":"Выступления и лекции","summary":"Lecture 01: Image.","title":"Basics of rasterization"},{"content":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","date":"02.12.2022","permalink":"/talk/cg-2022-fall-04/","section":"Выступления и лекции","summary":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","title":"Advanced technics and algorithms"},{"content":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"21.10.2022","permalink":"/talk/cg-2022-fall-03/","section":"Выступления и лекции","summary":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX 12"},{"content":" Lecture 06: Ray tracing. Camera rays Lecture 07: Ray intersection Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"30.09.2022","permalink":"/talk/cg-2022-fall-02/","section":"Выступления и лекции","summary":"Lecture 06: Ray tracing.","title":"Basics of raytracing"},{"content":" Lecture 01: Image. Clearing of the image Lecture 02: 3D model consuming Lecture 03: Vertex transformations Lecture 04: Triangle rasterization Lecture 05: Depth buffer ","date":"09.09.2022","permalink":"/talk/cg-2022-fall-01/","section":"Выступления и лекции","summary":"Lecture 01: Image.","title":"Basics of rasterization"},{"content":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","date":"07.07.2022","permalink":"/talk/cg-2022-summer-04/","section":"Выступления и лекции","summary":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","title":"Advanced technics and algorithms"},{"content":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"23.06.2022","permalink":"/talk/cg-2022-summer-03/","section":"Выступления и лекции","summary":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX 12"},{"content":" Lecture 06: Ray tracing. Camera rays Lecture 07: Ray intersection Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"09.06.2022","permalink":"/talk/cg-2022-summer-02/","section":"Выступления и лекции","summary":"Lecture 06: Ray tracing.","title":"Basics of raytracing"},{"content":" Lecture 01: Image. Clearing of the image Lecture 02: 3D model consuming Lecture 03: Vertex transformations Lecture 04: Triangle rasterization Lecture 05: Depth buffer ","date":"26.05.2022","permalink":"/talk/cg-2022-summer-01/","section":"Выступления и лекции","summary":"Lecture 01: Image.","title":"Basics of rasterization"},{"content":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","date":"04.03.2022","permalink":"/talk/cg-2022-spring-04/","section":"Выступления и лекции","summary":" Lecture 16: Resource copying Lecture 17: Depth buffer in DX12 Lecture 18: Textures Lecture 19: Lighting Lecture 20: Next steps in computer graphics ","title":"Advanced technics and algorithms"},{"content":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"18.02.2022","permalink":"/talk/cg-2022-spring-03/","section":"Выступления и лекции","summary":" Lecture 11: Application’s window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX 12"},{"content":" Lecture 06: Ray tracing. Camera rays Lecture 07: Ray intersection Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"04.02.2022","permalink":"/talk/cg-2022-spring-02/","section":"Выступления и лекции","summary":"Lecture 06: Ray tracing.","title":"Basics of raytracing"},{"content":" Lecture 01: Image. Clearing of the image Lecture 02: 3D model consuming Lecture 03: Vertex transformations Lecture 04: Triangle rasterization Lecture 05: Depth buffer ","date":"21.01.2022","permalink":"/talk/cg-2022-spring-01/","section":"Выступления и лекции","summary":"Lecture 01: Image.","title":"Basics of rasterization"},{"content":" Lecture 16: Depth buffer in DX12 Lecture 17: Copy of resources Lecture 18: Index buffer Lecture 19: Textures Lecture 20: Next steps in computer graphics ","date":"05.03.2021","permalink":"/talk/cg-2021-spring-04/","section":"Выступления и лекции","summary":" Lecture 16: Depth buffer in DX12 Lecture 17: Copy of resources Lecture 18: Index buffer Lecture 19: Textures Lecture 20: Next steps in computer graphics ","title":"Advanced technics and algorithms"},{"content":" Lecture 11: App window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"19.02.2021","permalink":"/talk/cg-2021-spring-03/","section":"Выступления и лекции","summary":" Lecture 11: App window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX 12"},{"content":" Lecture 06: What is the ray tracing. Camera rays Lecture 07: Ray intersection algorithms Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"05.02.2021","permalink":"/talk/cg-2021-spring-02/","section":"Выступления и лекции","summary":"Lecture 06: What is the ray tracing.","title":"Basics of ray tracing"},{"content":" Lecture 01: Computer graphics in Game development. Output devices Lecture 02: Wavefront OBJ file Lecture 03: 3D to 2D projections Lecture 04: Triangle rasterization Lecture 05: Depth buffer ","date":"22.01.2021","permalink":"/talk/cg-2021-spring-01/","section":"Выступления и лекции","summary":"Lecture 01: Computer graphics in Game development.","title":"Basics of rasterization"},{"content":" Lecture 11: App window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","date":"20.11.2020","permalink":"/talk/cg-2020-fall-03/","section":"Выступления и лекции","summary":" Lecture 11: App window Lecture 12: DX12 initialization Lecture 13: Resources in DX12 Lecture 14: Pipeline setup in DX12 Lecture 15: Per frame updates ","title":"Basics of DirectX 12"},{"content":" Lecture 06: What is the ray tracing. Camera rays Lecture 07: Ray intersection. Closest hit Lecture 08: Lighting and shadows Lecture 09: Acceleration structures Lecture 10: Anti-aliasing ","date":"06.11.2020","permalink":"/talk/cg-2020-fall-02/","section":"Выступления и лекции","summary":"Lecture 06: What is the ray tracing.","title":"Basics of ray tracing"},{"content":" Lecture 01: Welcome to Computer graphics. What is the rasterization Lecture 02: Line rendering. Obj file Lecture 03: 3D to 2D projections Lecture 04: Triangle rasterization Lecture 05: Culling. Depth buffer ","date":"23.10.2020","permalink":"/talk/cg-2020-fall-01/","section":"Выступления и лекции","summary":"Lecture 01: Welcome to Computer graphics.","title":"Basics of rasterization"},{"content":"","date":null,"permalink":"/tags/books/","section":"Теги","summary":"","title":"books"},{"content":"","date":null,"permalink":"/tags/%D0%B4%D0%B6%D0%B5%D0%B4%D0%B0%D0%B9%D1%81%D0%BA%D0%B8%D0%B5-%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B8/","section":"Теги","summary":"","title":"Джедайские техники"},{"content":"","date":null,"permalink":"/tags/%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC-%D0%B4%D0%BE%D1%80%D0%BE%D1%84%D0%B5%D0%B5%D0%B2/","section":"Теги","summary":"","title":"Максим Дорофеев"},{"content":"","date":null,"permalink":"/tags/%D0%BC%D0%B8%D1%84/","section":"Теги","summary":"","title":"МИФ"},{"content":" С книгой Максима Дорофеева \u0026ldquo;Путь джедая\u0026rdquo; я познакомился еще до того, как она вышла в свет. Перед тем как запустить книгу Максим делал несколько экспериментов-опросов. Я в них принял участие, и, следовательно, у меня уже были некоторые спойлеры. По вопросам из анкет я что-то взял в свою систему продуктивности. Но что конкретно - не помню.\nПрошедшей осенью книга вышла в свет, я я ее незамедлительно купил. Максим рекомендует читать книгу по небольшой порции и затем внимательно обдумывать прочитанное. Так я и сделал.\nКнига чрезвычайно веселая. Максим вставил очень много шуток и анекдотов, а Наталья Свешникова нарисовала очень много смешных картинок, которые порой сильно глубже, чем текст вокруг. Также в книгу включены заметки людей, которые проходили опросы. Там есть даже пара моих заметок =). Например, со страниц книги я напомнил себе о том, что у меня раньше были 2 занятия в день с Insight Timer. И это было очень хорошо. Сейчас возвращаю эту практику в свой арсенал.\nНаиболее объемный раздел посвящен уровням джедайской зрелости. Неожиданно для меня, я оказался на 5-м уровне (на последнем) джедайской зрелости. С одной стороны, некоторые техники из предыдущих уровней уже больше не нужны. Так я убрал Impulse blocker из браузера. Переодически я лазаю в социальные сети. Если все хорошо - то в социальных сетях сильно скучнее, чем в списке задач. А есл я залип - это отличный индикатор того, что пора как следует отдохнуть.\nСамая крутая мысль из книги на сегодняшний день - перейти от стратегии впихивания дел в день к стратегии вытягивания. Сейчас у меня есть список дел на сегодня - очень малое количество дел, которые надо сделать сегодня или умереть. А есть список дел на попозже. Когда список дел на сегодня пуст и есть еще силы и желание, то можно достать одну задачку из списка позже и поработать над ней. И так пока есть желание и силы. С помощью этой стратегии мой список задач опустел в течение 3-х недель. Сейчас выложу этот пост и список задач опустеет полностью=)\nБольшое спасибо Максиму и команде за прекрасные книги и результат их применения!\n","date":"27.12.2019","permalink":"/post/jedi-path/","section":"Блог","summary":"С книгой Максима Дорофеева \u0026ldquo;Путь джедая\u0026rdquo; я познакомился еще до того, как она вышла в свет.","title":"О книге Максима Дорофеева \"Путь джедая\""},{"content":"","date":null,"permalink":"/tags/cpp/","section":"Теги","summary":"","title":"cpp"},{"content":"","date":null,"permalink":"/tags/googletest/","section":"Теги","summary":"","title":"googletest"},{"content":"Googletest (Gtest) \u0026ndash; фреймворк для юнит-тестов для C++ кода. Этот фреймворк сделан под влиянием xUnit фреймворков.\nVisual Studio 2017 имеет встроенный компонент для поддержки Gtest. Чтобы начать работу необходимо в текущем Solution надо создать проект GTest. При создании проекта нужно удостоверится, что C++ runtime прилинкован как динамическая библиотека, а GTest - как статическая библиотека. Также необходимо добавить ссылки на проекты, где содержится тестируемый код (References-\u0026gt;Add).\nПроект по умолчанию содержит один демонстрационный тест. Для запуска Gtest надо вызвать команду Test-\u0026gt;Run-\u0026gt;All tests. Либо воспользоваться клавиатурной комбинацией Ctrl+R, A. Также можно запустить тесты в режиме отладчика: Test-\u0026gt;Debug-\u0026gt;All tests или Ctrl+R, Ctrl+A.\nОдин тест \u0026ndash; это одна функция вида:\nTEST(\u0026lt;TestSuiteName, TestName\u0026gt;) { ASSERT_TRUE(False); } Существует 2 вида проверок: ASSERT_* - падение проверки прерывает выполнение теста, EXPECT_* - падение проверки не приводит к прерыванию теста. В документации рекомендуется использовать EXPECT_* как можно чаще, чтобы за один прогон тестов было собрано как можно больше информации об ошибках.\nНаиболее часто используются следующие проверки:\nASSERT_TRUE(value) - проверяет, что value==True; ASSERT_FALSE(value) - проверяет, что value==False; ASSERT_EQ(a, b) - проверяет, что a==b; ASSERT_NE(a, b) - проверяет, что a!=b; ASSERT_LT(a, b) - проверяет, что a\u0026lt;b; ASSERT_LE(a, b) - проверяет, что a\u0026lt;=b; ASSERT_GT(a, b) - проверяет, что a\u0026gt;b; ASSERT_GE(a, b) - проверяет, что a\u0026gt;=b; ASSERT_STREQ(a, b) - проверяет, что C-style строки равны (не работает для std::string). Для того, чтобы тесты не падали с ошибкой компановщика в include секции теста надо подключать и .h, и .cpp файлы с тестируемым кодом.\nСсылки # Googletest How to use Google Test for C++ in Visual Studio ","date":"19.03.2019","permalink":"/post/googletests/","section":"Блог","summary":"Googletest (Gtest) \u0026ndash; фреймворк для юнит-тестов для C++ кода.","title":"Googletest - unit testing framework"},{"content":"","date":null,"permalink":"/tags/unit-testing/","section":"Теги","summary":"","title":"unit-testing"},{"content":"","date":"18.12.2018","permalink":"/talk/project-tools-03-2018/","section":"Выступления и лекции","summary":"","title":"Инструменты проектного управления. Лекция №3"},{"content":"","date":"04.12.2018","permalink":"/talk/project-tools-02-2018/","section":"Выступления и лекции","summary":"","title":"Инструменты проектного управления. Лекция №2"},{"content":"","date":"23.10.2018","permalink":"/talk/project-tools-01-2018/","section":"Выступления и лекции","summary":"","title":"Инструменты проектного управления. Лекция №1"},{"content":"Авторы: И.П. Белявцев, С.О. Старков\nЗапас реактивности реактора ВВР-ц [1] можно рассчитать с помощью прецизионной модели реактора. Прецизионная модель, основанная на методе Монте-Карло [2], мало пригодна для оперативных расчетов. Представлена работа по созданию программного комплекса предварительной оценки запаса реактивности реактора ВВР-ц. Обоснована возможность применения искусственной нейронной сети для построения аппроксимации запаса реактивности реактора по состоянию активной зоны. Проведены вычислительные эксперименты по обучению искусственной нейронной сети на данных прецизионной модели и на измеренных данных реального реактора. По итогам вычислительных экспериментов максимальная относительная ошибка аппроксимации Δk/k от глубины выгорания составила 3,13 и 3,56% соответственно. Среднее время расчета – 100 мс. В ходе вычислительных экспериментов была построена архитектура искусственной нейронной сети. Данная архитектура стала основой для построения программного комплекса оценки запаса реактивности реактора ВВР-ц – REST API веб-приложения, имеющего удобный пользовательский интерфейс для ввода конфигурации активной зоны. Есть возможность дополнить обучающую выборку новыми измерениями и доучить искусственную нейронную сеть. Программный комплекс для оценки запаса реактивности готов для тестирования персоналом реактора ВВР-ц и использования его в виде компонента системы автоматического планирования перезагрузки реактора. С незначительными изменениями комплекс можно применять для реакторных установок других типов.\nDOI # https://doi.org/10.26583/npe.2018.2.06\nСсылки # Кочнов О.Ю., Лукин Н.Д, Аверин Л.В. Реактор ВВР-ц: опыт эксплуатации и перспективы развития. // Ядерная и радиационная безопасность. – 2008. – №1. – С. 18-25. Колесов В.В., Кочнов О.Ю., Волков Ю.В., Украинцев В.Ф., Фомин Р.И. Создание прецизионной модели реактора ВВР-ц для последующей оптимизации его конструкции и наработки 99Mo и других радионуклидов. // Известия высших учебных заведений. Ядерная энергетика. – 2011. – №4. – С. 129-133. Кочнов О.Ю., Колесов В.В., Фомин Р.И., Жердев Г.М. Оценка увеличения производства 131I при использовании теллуровых мишеней усовершенствованной конструкции на реакторе ВВР-ц. // Известия высших учебных заведений. Ядерная энергетика. – 2014. – №4. – С. 102-110. Хайкин С. Нейронные сети. Полный курс. – М.: Издательский дом «Вильямс». – 2006. – 1104 с. Филатова Т.В. Применение нейронных сетей для аппроксимации данных // Вестник Томского государственного университета. – 2004. – №284. – C. 121–125. Горбань А. Н. Обобщенная аппроксимационная теорема и вычислительные возможности нейронных сетей. // Сибирский журнал вычислительной математики. – 1998. – Т. 1. – №1. – С. 12-24. Belyavtsev I., Legchikov D., Starkov S., Kolesov V., Nikulin E. Approximation of the criticality margin of WWR-c reactor using artificial neuron networks // Journal of Physics: Conference Series. – 2018. – Т. 945. – PP. 012–031. Abadi M., Barham P., Chen J., Chen Zh., Davis A., Dean J., Devin M., Ghemawat S., Irving G., Isard M., Kudlur M., Levenberg J., Monga R., Moore Sh., Murray D., Steiner B., Tucker P., Vasudevan V., Warden P., Wicke M., Yu Yu., Zheng X. TensorFlow: Large-scale machine learning on heterogeneous systems. – 2015. Электронный ресурс: https://www.tensorflow.org/about/bib (дата обращения 2.05.2018) Zaccone G. Getting Started with TensorFlow. – Packt Publishing – 2016. – 180 p. Lieder I., Resheff Y., Hope T. Learning TensorFlow. A Guide to Building Deep Learning Systems. – O’Reilly Media. – 2017. – 242 p. You E. VueJs. Электронный ресурс: https://vuejs.org/v2/guide/ (дата обращения 2.05.2018). Filipova O. Learning Vue.js 2. Learn how to build amazing and complex reactive web applications easily with Vue.js. – Packt Publishing. – 2016. – 334 p. Street M. Vue.js 2.x by Example. – Packt Publishing. – 2017. – 412 p. Ronacher A. Flask. Электронный ресурс: http://flask.pocoo.org/ (дата обращения 2.05.2018). Grinberg M. Flask Web Development, 2nd Edition. – O’Reilly Media. – 2018. – 316 p. Dwyer G. Flask by Example. – Packt Publishing. – 2016. – 276 p. Masse M. REST API Design Rulebook. – O’Reilly Media. – 2011. – 116 p. Richardson L., Ruby S. RESTful Web Services. – O’Reilly Media. – 2008. – 448 p. ","date":"31.07.2018","permalink":"/publication/appox-software/","section":"Публикации","summary":"Авторы: И.","title":"Программный комплекс оценки запаса реактивности реактора ВВР-ц"},{"content":"","date":null,"permalink":"/publication/","section":"Публикации","summary":"","title":"Публикации"},{"content":"","date":null,"permalink":"/tags/udemy/","section":"Теги","summary":"","title":"Udemy"},{"content":"","date":null,"permalink":"/tags/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C/","section":"Теги","summary":"","title":"продуктивность"},{"content":" Как приятно порой бывает в субботу заглянуть в email. @cartmendum спасибо большое! pic.twitter.com/waCsgzg26z\n\u0026mdash; Белявцев Иван (@djbelyak) 24 марта 2018 г. Максим Сергеевич Дорофеев известен в русскоязычном IT сообществе. Нарисованные от руки презентации, узнаваемый спокойный тембр голоса и эксперименты над мыслетопливом публики стали визитной карточкой его выступлений.\nМаксим работает над второй книгой и, как положено ученому, проводит социологическо-психологические исследования. За участие в таком исследовании Максим прислал ссылку на курс Джедайские техники пустого инбокса на Udemy.\nВ этом посте я хотел бы рассказать об изменениях, которые я внес в систему личной эффективности после прохождения курса.\nО содержимом курса # Курс состоит из 17 коротких видеороликов. Ролики длятся примерно по 10 минут, в сумме меньше 3-х часов видео. После каждого ролика присутствуют вопросы на осмысление (не проверка знаний, а вопросы на подумать о себе).\nВ ходе роликов Максим дает практические указания к построению своей системы продуктивности с нуля. В начале курса выдается ежедневный чек-лист, чтобы по мере прохождения курса отслеживать показатели, привычки и вехи. Курс не привязан к конкретным инструментам \u0026mdash; рекомендуется начать с простой тетради.\nЕсли бы для меня это было первым знакомством с джедайскими техниками, то я непременно проходил бы по 1 видео за день. Но перед курсом у меня уже была выстроена система продуктивности, поэтому я позволил себе пройти весь курс за 2 дня. При прохождении я записывал мысли, идеи, упражнения, которые могли бы улучшить мою систему. А после прохождения неспешно внедрял все это в жизнь.\nЧто нового я вынес для себя # Ниже приведу ряд идей, которые были записаны во время курса, и то, как они прижились в моей системе.\nРабота с Outlook # По работе с Outlook в курсе есть отдельное видео. Записал для себя две мысли:\nПомечать все сообщения прочитанными Использовать быстрые действия Первый пункт я уже слышал, но не решался попробовать. В моем outlook’е было много зависимых правил и было страшно добавлять новое правило в начало списка. Но результат превзошел все ожидания. Я реально стал спокойнее открывать почту и воспринимать любые письма в инбоксе. Как сайдэффект, выкинул почти половину устаревших правил. Эффект почувствовался примерно за неделю.\nЧто касается быстрых действий \u0026ndash; мне они не подошли. Я уже довольно давно все делаю мышкой и это уже подсознательное действие. А вспоминать шорткат для быстрого действия оказалось не под силу.\nЧек-лист по задаче # Чек-лист для формулировки задачи видел очень давно. Проведя формулировку задачи по этому чек-листу можно переформулировать задачу в непрокрастинируемую и обезьяно-понятную форму. В курсе приведена обновленная версия.\nТак как я стараюсь работать помидорами (25 минут сосредоточенной работы), у меня есть два чек-листа: до помидора и после помидора. Чек-лист до помидора также используется во время обзора для проверки формулировки задачи.\nЧек-лист до помидорки:\nСформулирована ли задача как ответ на вопрос \u0026ldquo;Что нужно сделать?\u0026rdquo; Понятен ли результат выполнения этой задачи? Есть ли все необходимые ресурсы для выполнения задачи? Совпадает ли формулировка задачи с первоочередным шагом? Можно ли выполнить задачу за 1 помидор с наполовину расслабленным мозгом? Нужно ли выполнять эту задачу прямо сейчас? Чек-лист после помидорки:\nРешена ли поставленная задача? Столкнулся ли с какой-нибудь проблемой? Есть что записать в базы знаний? Нужно ли сформулировать следующую задачу? Нужно ли отметить прогресс по проекту в трекерах? План проекта \u0026ndash; справочная информация # Несколько контринтуитивная мысль про план проекта. План проекта \u0026ndash; это справочная информация, поэтому ее стоит хранить отдельно от задач.\nОказалось на редкость полезной рекомендацией. Теперь список следующих дел по проекту содержит ровно 1 обезьяно-понятная задача, которое соотвестует чек-листу. А общий план проекта спокойно перекочевал в Excel с Reliable Scrum.\nВ моей системе личной эффективности появился чек-лист перед началом проекта:\nЗаведена ли цель в Maxdone? Создана и записана папка для проекта? Добавлен ли файл ReliableScrum.xlsx? Установлен ли DeadLine? Установлена ли критическая цепь проекта? Нужен ли внешний трекер (jira, github)? Нужна ли синхронизация с внешним хранилищем (git, dropbox, google docs)? Повторяющиеся дела, привязанные ко времени, \u0026ndash; в календарь # До курса я хранил задачи типо \u0026ldquo;Потренироваться\u0026rdquo; как повторяющуюсю задачу в списке дел. Терерь такие дела переехали в календарь. Список дел на день сократился \u0026mdash; поднялся предел \u0026ldquo;впихуемости\u0026rdquo;. При этом стал заглядывать в календарь чаще, чего раньше не хватало.\nУпражнение \u0026ldquo;чтобычтотор\u0026rdquo; # Упражнение состоит из 3 действий:\nСоставить список хотелок Пройтись задачам в списке задач с вопросом \u0026ldquo;Чтобы что?\u0026rdquo; При соотвествии задачи с одной из хотелок \u0026ndash; пометить хотелку Упражнение дало несколько инсайтов. После упражнения созрел, чтобы прекратить работу по 3 отвлекающим проектам. Плюс добавить в ежедневный список дел задачу \u0026ldquo;Позаниматься хобби\u0026rdquo;, так как без этого на хобби регулярно забивал.\nУпражнение \u0026ldquo;Вечерний гвоздодер\u0026rdquo; # Еще одно упражнение из курса:\nРасслабится Восстановить в памяти день задом наперед Записать то, что \u0026ldquo;застряло\u0026rdquo; в памяти На меня это упражнение произвело довольно странное впечатление. После одного из рабочих дней прокручивал в памяти день: дорога домой, полистал твиттер и контактик, попил чай, пообедали с коллегами, пикабушка, поговорил с коллегой, поел перед работой, приехал на работу, потренировался. Посетила мысль, что день потратил на фигню и даже осталось еще мыслетопливо. Удивление настигло на следующий день при ежедневном обзоре. А куда делись 12 задач? А когда это я 10 помидорок сделать успел? Кто за меня работал? В какой-то мере эта сила объезьянки даже испугала меня.\nПроекты Маскима # В одном из видео Максим показал свой список проектов в Maxdone. Глаз зацепился за парочку: \u0026ldquo;ПФР\u0026rdquo; и \u0026ldquo;Отрефакторить зубы\u0026rdquo;.\nПервый проект дал начало моему пенсионному проекту. А формулировка второго в очередной раз напомнила, что Максим таки наш, айтишный человек.\nМысли по поводу курса # На мой взгляд, курс получился прекрасным во всех отношениях. Особенно хочется отметить качество роликов. Максим очень сильно заморочился, и курс выглядит просто шикарно.\nСам Максим несколько негативно относится к идее онлайн курсов. По этому поводу он написал пост в блог.\nВ защиту данного курса я перечислю перимущества от знакомства с джедайскими техниками в виде MOOC:\n10 минут в день выделить проще, чем 2 часа на классические видео или 2 дня на живой тренинг. Четкий алгоритм действий на каждый день Идеально для интровертов и социофобов Не требует регулярного участия тренера Удобно монетизировать На мой взгляд на начальном этапе для прокрастинирующего человека самые короткие дозы информации и четкие руководства к действию способны вывести человека из стресса и дать мощный импульс к улучшению жизни.\nМаксим, большое спасибо за прекрасный курс!\n","date":"30.04.2018","permalink":"/post/jedi-tech/","section":"Блог","summary":"\u003cblockquote class=\"twitter-tweet\" data-lang=\"ru\" style=\"margin-left: auto; margin-right: auto \"\u003e\n\u003cp lang=\"ru\" dir=\"ltr\"\u003eКак приятно порой бывает в субботу заглянуть в email. \u003ca href=\"https://twitter.com/cartmendum?ref_src=twsrc%5Etfw\"\u003e@cartmendum\u003c/a\u003e спасибо большое! \u003ca href=\"https://t.co/waCsgzg26z\"\u003epic.twitter.com/waCsgzg26z\u003c/a\u003e\u003c/p\u003e\u0026mdash; Белявцев Иван (@djbelyak) \u003ca href=\"https://twitter.com/djbelyak/status/977539947640098816?ref_src=twsrc%5Etfw\"\u003e24 марта 2018 г.\u003c/a\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003ca\n  href=\"http://mnogosdelal.ru/\"\n  \n  target=\"_blank\" rel=\"noreferrer noopener\"\n\u003eМаксим Сергеевич Дорофеев\u003c/a\u003e известен в русскоязычном IT сообществе.\nНарисованные от руки презентации, узнаваемый спокойный тембр голоса и эксперименты над мыслетопливом публики стали визитной карточкой его выступлений.\u003c/p\u003e\n\u003cp\u003eМаксим работает над второй книгой и, как положено ученому, проводит социологическо-психологические исследования. За участие в таком исследовании Максим прислал ссылку на курс \u003ca\n  href=\"https://www.udemy.com/jeditech/\"\n  \n  target=\"_blank\" rel=\"noreferrer noopener\"\n\u003eДжедайские техники пустого инбокса\u003c/a\u003e на Udemy.\u003c/p\u003e\n\u003cp\u003eВ этом посте я хотел бы рассказать об изменениях, которые я внес в систему личной эффективности после прохождения курса.\u003c/p\u003e","title":"Что нового я узнал из курса Джедайские техники пустого инбокса на Udemy"},{"content":"Конечные автоматы активно применяются в различных областях науки и техники, особенно в области информатики. Одной из областей применения автоматов является моделирование [1]. Описание процессов в виде конечных автоматов удобно для человека. В случае сложных процессов допустимо описание процесса в виде композиции автоматов [2]. Композиция автоматов все также понятна для человека и может быть заменена одним большим автоматом.\nОдной из задач, которую можно решать над автоматными моделями – это поиск кратчайших последовательностей входных символов (событий) из начального состояния в одно из конечных состояний. Так как одним из возможных представлений функции переходов является диаграмма состояний или граф переходов, то задача поиска оптимальной последовательности событий сводится к поиску кратчайшего расстояния от вершины начального состояния до вершины одного из конечных состояний.\nЕсть множество эффективных алгоритмов поиска пути в графе, однако, сложность алгоритмов зависит от количества вершин и ребер графа. Также задача усложняется необходимостью проверки каждой конечной вершины. В связи с этим ставится задача построения функции $f:Q arrow X$, выбирающей следующий входной символ таким образом, чтобы за минимальное количество символов автомат достиг одного из конечных состояний.\nДля построения данной функции создадим искусственную нейронную сеть прямого распространения, которая принимает состояние автомата (представленное в One-Hot кодировке), а на выходе выдает вектор размерности $| X |$, представляющий меру близости до конечного состояния.\nРассмотрим процедуру обучения данной нейронной сети.\nИнициализация. Конечный автомат $A$ переводится в состояние $q_{0}$. Искусственная нейронная сеть $N$ инициализируется случайными малыми весами. Список $D$ пуст. Стек $S$ пуст.\nШаг 1. Искусственная нейронная сеть N по текущему состоянию $q_{i}$ вычисляет меру близости. По мере близости выбирается следующий входной символ $x_{i}$. При $(q_{i},x_{i}) \\in D$, $x_{i}$ заменяется на случайно выбранный другой элемент множества $X$. Кортеж $(q_{i},x_{i})$ добавляется в стек $S$. Автомат $A$ получает на вход символ $x_{i}$ и переходит в следующее состояние $q_{i + 1}$.\nШаг 2. Если $q_{i + 1} \\in F$ переходим к шагу 3, в противном случае – переходим к шагу 1.\nШаг 3. Из стека $S$ по очереди извлекаются кортежи $( q_{i},x_{i})$, дополнятся порядковым номером в стеке и записываются в список $\\text{D}$. Если $( q_{i},x_{i},\\ n_{i} )$ уже был записан в списке $D$, то номер обновляется минимальным значением.\nШаг 4. Нейронная сеть $N$ обучается методом обратного распространения ошибки. Для каждого $q_{i}\\ $формируется вектор размерности $| X |$. Если для $( q_{i},x_{j}, n_{j} )$, есть значения в $D$, то $j$-ый компонент вектора будет равен $$1 - \\frac{n_{j}}{\\sum_{( q_{i},x_{k} ) \\in D}n_{k}}$$ В противном случае – $j$-ый компонент вектора равен $0$.\nШаг 5. При необходимости продолжить обучение. Конечный автомат $A$ переводится в состояние $q_{0}$. Переходим к шагу 1.\nДанный алгоритм был реализован с помощью фреймворка машинного обучения TensorFlow. Результаты тестирования на различных случайно сгенерированных графах (количество вершин от 10 до 10000) подтверждают работоспособность данного подхода.\nЛитература # Поликарпова Н. И., Шалыто А. А. Автоматное программирование. СПб., Питер, 2009. — 176 с.\nГуренко В. В. Введение в теорию автоматов: Электронное учебное издание / В. В. Гуренко. — Москва: МГТУ им. Н.Э. Баумана, 2013. - 62 с.\n","date":"17.04.2018","permalink":"/talk/mephi-2018-talk/","section":"Выступления и лекции","summary":"Конечные автоматы активно применяются в различных областях науки и техники, особенно в области информатики.","title":"Поиск оптимальной последовательности событий автоматной модели с использованием искусственных нейронных сетей"},{"content":"","date":null,"permalink":"/tags/dataset/","section":"Теги","summary":"","title":"Dataset"},{"content":"","date":null,"permalink":"/tags/high-level-api/","section":"Теги","summary":"","title":"High Level API"},{"content":"","date":null,"permalink":"/tags/tensorflow/","section":"Теги","summary":"","title":"TensorFlow"},{"content":"","date":null,"permalink":"/tags/%D0%B4%D0%B0%D1%82%D0%B0%D1%81%D0%B5%D1%82/","section":"Теги","summary":"","title":"Датасет"},{"content":"Высокоуровневый процесс обучения в фреймворке TensorFlow консолидируется вокруг объекта класса Estimator и его наследников. Для обучения, оценки и вывода результата каждый такой объект содержит методы train, evaluate и predict соответственно. Эти методы в качестве аргумента принимают некую функцию input_fn, которая отвечает за загрузку данных для искусственной нейронной сети. В этом посте мы подробно рассмотрим как создается такая функция.\nСогласно описанию, input_fn вызывается на каждом шаге процесса. Ожидается, что каждый вызов input_fn вернет либо один семпл из набора данных, либо несколько семплов, объединенных в batch. При этом для методов train и evaluate ожидается кортеж тензоров: первый тензор \u0026mdash; входные параметры (в терминах TF: features), второй тензор \u0026mdash; ожидаемые выходные значения (в терминах TF: labels).\nПолучается, что input_fn должна возвращать специфический итератор. Класс этого итератора объявлен в пакeте tf.data и называется Iterator. Чтобы получить семпл или batch нужно вызвать метод get_next. Таким образом уже можно описать конец функции:\ndef input_fn(): # some operations # make Iterator object # iterator = ... return iterator.get_next() Поднимаясь далее вверх по коду, возникает вопрос каким образом создать объект итератора. Есть два способа: использовать статические методы класса Iterator или воспользоваться методами make_one_shot_iterator и make_initializable_iterator объектов класса Dataset и производных. Руководство программиста рекомендует использовать метод make_one_shot_iterator, так как он не требует дополнительной инициализации. Обновим функцию input_fn:\ndef input_fn(): # Make Dataset # dataset = ... # some operations iterator = dataset.make_one_shot_iterator() return iterator.get_next() Теперь надо создать объект класса Dataset. В модуле tf.data уже есть несколько классов для работы с конкретными форматами:\nКласс TextLineDataset позволяет сформировать датасет, читая строки из текстовых файлов; Класс FixedLengthRecordDataset позволяет сформировать датасет, читая фиксированный байтовый размер из бинарных файлов; Класс TFRecordDataset позволяет сформировать датасет, читая файлы в формате TensorFlow. Если ни один из классов не подошел, то можно воспользоваться статическими методами класса Dataset:\nrange \u0026ndash; создает набор данных из заданной последовательности; zip \u0026ndash; объединяет два датасета в кортеж датасетов; from_tensor_slice \u0026ndash; создает датасет из слайсов тензоров; from_tensors \u0026ndash; создает единый датасет из списка тензоров; list_files \u0026ndash; создает датасет из списка файлов; from_generator \u0026mdash; создает датасет по заданному генератору. Наиболее гибким является метод from_generator. Добавим в функцию input_fn генерацию простого датасета:\ndef input_fn(): # Dataset generator def dataset_generator(): for i in range(10): yield (i*1.0, i*2.0) # Make Dataset dataset = tf.data.Dataset.from_generator( dataset_generator, (tf.float32, tf.float32), (tf.TensorShape(None), tf.TensorShape(None)) ) # some operations iterator = dataset.make_one_shot_iterator() return iterator.get_next() Такая функция уже вполне жизнеспособна. Она будет возвращать по одному примеру за раз и на каждой итерации порядок семплов будет неизменным. Возвращать по одному примеру за раз не эффективно с точки зрения обработки, поэтому объект Dataset может объединить несколько семплов в batch. Чтобы это сделать нужно вызвать метод batch и в качестве параметра указать количество семплов. Метод вернет новый объект Dataset, итератор которого уже будет возвращать йелый batch. Для того, чтобы перемешать семплы объект Dataset имеет метод shuffle, в котором задается размер буфера для перемешивания.\nТаким образом конечная функция будет выглядеть следующим образом:\ndef input_fn(): # Dataset generator def dataset_generator(): for i in range(10): yield (i*1.0, i*2.0) # Make Dataset dataset = tf.data.Dataset.from_generator( dataset_generator, (tf.float32, tf.float32), (tf.TensorShape(None), tf.TensorShape(None)) ) # Shuffle and batch dataset = dataset.shuffle(10) dataset = dataset.batch(5) iterator = dataset.make_one_shot_iterator() return iterator.get_next() Ести нужно провести более сложную обработку, то можно вызвать метод map и в качестве параметра передать функцию для обработки, которая на вход получает исходный кортеж семплов и возвращает уже обработанный кортеж. Важно помнить, что семплы \u0026ndash; это тензоры, и операции должны производиться как с тензорами. Больше примеров можно найти по ссылкам ниже.\nСсылки # tf.estimator.Estimator Importing Data tf.data.Iterator tf.data.Dataset Итерируемый объект, итератор и генератор ","date":"31.03.2018","permalink":"/post/tf-load-dataset/","section":"Блог","summary":"\u003cp\u003eВысокоуровневый процесс обучения в фреймворке TensorFlow консолидируется вокруг объекта класса \u003ccode\u003eEstimator\u003c/code\u003e и его наследников.\nДля обучения, оценки и вывода результата каждый такой объект содержит методы \u003ccode\u003etrain\u003c/code\u003e, \u003ccode\u003eevaluate\u003c/code\u003e и \u003ccode\u003epredict\u003c/code\u003e соответственно.\nЭти методы в качестве аргумента принимают некую функцию \u003ccode\u003einput_fn\u003c/code\u003e, которая отвечает за загрузку данных для искусственной нейронной сети.\nВ этом посте мы подробно рассмотрим как создается такая функция.\u003c/p\u003e","title":"Как загрузить датасет в TensorFlow"},{"content":"Авторы: I. Belyavtsev, D. Legchikov, S. Starkov, V. Kolesov, E. Nikulin\nTwo artificial neural networks approximating the criticality margin of the WWR-c reactor (based on model and calculated data) were created and trained. The resulting neural networks realize the correct approximation, have high accuracy, and also high speed of operation. Using the obtained artificial neural networks can be applied to accelerate the preliminary calculations of the state of the reactor.\nDOI # https://doi.org/10.1088/1742-6596/945/1/012031\nReferences # Kochnov O, Lukin N and Averin L 2008 Nuclear and Radiation Safety 18-25 Kolesov V, O Kochnov O, Volkov Y, Ukraintsev V and Fomin F 2011 Mseecmun ey3oe. Hdepnan onepsemuKa 129-133 Gorban’ A 1998 Siberian Journal of Numerical Mathematics 1 12-24 Abadi M, Agarwal A, Barham P, Brevdo E, Chen Z, Citro C, Corrado G S, Davis A, Dean J, Devin M, Ghemawat S, Goodfellow I, Harp A, Irving G, Isard M, Jia Y, Jozefowicz R, Kaiser L, Kudlur M, Levenberg J, Manè D, Monga R, Moore S, Murray D, Olah C, Schuster M, Shlens J, Steiner B, Sutskever I, Talwar K, Tucker P, Vanhoucke V, Vasudevan V, Viégas F, Vinyals O, Warden P, Wattenberg M, Wicke M, Yu Y and Zheng X 2015 TensorFlow: Large-scale machine learning on heterogeneous systems software available from tensorflow.org URL http://tensorflow.org/ ","date":"31.01.2018","permalink":"/publication/criticality-margin-approx/","section":"Публикации","summary":"Авторы: I.","title":"Approximation of the criticality margin of WWR-c reactor using artificial neuron networks"},{"content":"","date":"28.11.2017","permalink":"/talk/deep-learning-2/","section":"Выступления и лекции","summary":"","title":"Глубокое обучение для обработки изображений (часть 2)"},{"content":"","date":"17.11.2017","permalink":"/talk/deep-learning-1/","section":"Выступления и лекции","summary":"","title":"Глубокое обучение для обработки изображений (часть 1)"},{"content":"","date":null,"permalink":"/tags/coursera/","section":"Теги","summary":"","title":"Coursera"},{"content":"","date":null,"permalink":"/tags/lh2l/","section":"Теги","summary":"","title":"LH2L"},{"content":"На прошлой завершил свой первый курс на Coursera под интересным названием Learning How to Learn от Барбары Оакли и Терри Сеновски. Надо сказать, что это мой второй подход к курсу, и успешность его прохождения во многом связана с переосмыслением после первой попытки.\nВ этом посте я хотел бы привести ряд идей и правил, которые помогают учится более эффективно.\nУчеба подобна спорту # Наш мозг может работать в двух режимах: сфокусированном и рассеянном.\nМожно провести аналогию с ростом мышц в бодибилдинге. Во время силовой тренировки мышцы спортсмена подвергаются стрессу и разрушаются, а затем в период отдыха \u0026ndash; восстанавливаются и растут. Причем рост мышц происходит с некоторым запасом.\nАналогичный процесс происходит и с нашим мозгом. При сфокусированной работе мозг активно оперирует близкими группами нейронов, а при рассеянном режиме свободные импульсы активизируют более отдаленные участки мозга.\nЧередование работы мозга в сфокусированном и рассеянном режимах позволяют тренировать работу мозга\nПри этом если все время решать только легкие посильные задачи или учить то, что учится легко \u0026ndash; то мозг тренируется плохо. Отсюда следует еще одна рекомендация\nДля развития мозга преднамеренно тренируйтесь решать сложные задачи\nУ памяти есть кэш # Можно выделить 2 типа памяти:\nкраткосрочная память (кеш) долгосрочная память Краткосрочная память может вмещать от 4 до 7 порций информации из долгосрочной. Причем каждая новая порция информации уменьшает способность обрабатывать информацию, а также вносит искажения.\nЛучше всего работать с 4 и менее порциями информации одновременно\nЧтобы что-то помесить в долгосрочную память - нужно периодически повторять. Для этого хорошо работает техника отложенных повторений (\u0026ldquo;space repetition\u0026rdquo;).\nЧтобы систематизировать отложенные повторения можно воспользоваться приложением Anki. Каждая порция информации распологается на своей карточке. Затем нужно тратить всего несколько минут в день, чтобы повторить содержимое карточек. Anki в зависимости от успешности повторения увеличивает интервал показов или сокращает их.\nДля запоминания информации надолго сделайте карточку Anki и просматривайте свои карточки каждый день\nУчись маленькими порциями # Наш мозг оперирует небольшими порциями информации (\u0026ldquo;chunk\u0026rdquo;). Для такой порции информации характерны:\nОдна основная идея Возможность логической связанности с другими порциями информации Может поместиться в краткосрочной памяти Пригодна для отложенных повторений Постепенное создание набора таких порции в голове подобно строительству прочного фундамента знаний по предмету. Поэтому для построения хороших знаний необходимо как можно большие времени уделить на формирование таких порций.\nЧтобы сформировать порцию информации надо:\nВыбрать порцию информации, которую можно охватить вниманием Сфокусироваться на ней Понять основную идею Проверить себя, попытавшись вспомнить порцию Применить информацию на практике Вписать в контекст изучаемого предмета Думать \u0026ndash; больно! # Обучение даже по очень интересному предмету всегда вызывает \u0026ldquo;болезненные\u0026rdquo; ощущения в мозгу. Поэтому мы так любим перед этим нырнуть в контактик, фейсбучку и прочие сайты для развлечения. А потом через несколько часов понять, что время потрачено в пустую и ругать себя. Это явление называется прокрастинацией и знакомо многим людям не понаслышке.\nЧтобы предотвратить прокрастинацию, достаточно воспользоваться простой техникой Pomodoro. Для этого нужно убрать подальше все, что может отвлекать, завести таймер на 25 минут и сосредоточится на задаче пока не прозвонит таймер. После звонка таймера необходимо отдохнуть минут 5 и обязательно наградить себя.\nИспользуйте регулярно технику Pomodoro\nТакже важно понять, что прокрастинация очень похожа на зависимость. Появляется какой-то триггер (например, оповещение или неприятные ощущения), которые запускают привычную процедуру (заниматься чем-то приятным). Наиболее легким и естественным образом предотвратить прокрастинацию можно убрав триггер. Ну если оповещения можно отключить (да-да, попробуйте это сделать), то с неприятными ощущениями внутри себя намного сложнее.\nВ общем случае помогает помнить следующую мудрость\nНачало любого дела вызывает дискомфорт, который пройдет почти сразу после начала. Чем раньше начать дело, тем быстрее пройдет дискомфорт\nДостаточный сон и физические упражнения # Во сне организм очищает мозг от продуктов деятельности, накопившихся в течение дня. Так же во сне информация переосмысляется и структурируется для хранения в долгосрочной памяти. Таким образом сон является по сути супер расфокусированным режимом мозга.\nСпите регулярно и достаточно\nТак же очень важно регулярно заниматься спортом. Это улучшает кровообращение и снабжение мозга необходимыми веществами, повышает общий уровень тонуса и выносливости\nРегулярно занимайтесь спортом\nЗаключение # Говорят, что это самый посещаемый онлайн-курс интернета. Мне хочется надеяться, что это именно так. Я бы рекомендовал этот курс абсолютно всем. И чем раньше вы его пройдете \u0026ndash; тем раньше откроется ваш потенциал в обучении.\nХочется особо поблагодарить Барбару и Терри за эти знания.\n","date":"02.05.2017","permalink":"/post/lh2l/","section":"Блог","summary":"\u003cp\u003eНа прошлой завершил свой первый курс на \u003ca\n  href=\"https://www.coursera.org/\"\n  \n  target=\"_blank\" rel=\"noreferrer noopener\"\n\u003eCoursera\u003c/a\u003e под интересным названием \u003ca\n  href=\"https://www.coursera.org/learn/learning-how-to-learn/home/welcome\"\n  \n  target=\"_blank\" rel=\"noreferrer noopener\"\n\u003eLearning How to Learn\u003c/a\u003e от \u003ca\n  href=\"https://twitter.com/barbaraoakley\"\n  \n  target=\"_blank\" rel=\"noreferrer noopener\"\n\u003eБарбары Оакли\u003c/a\u003e и \u003ca\n  href=\"https://twitter.com/sejnowski\"\n  \n  target=\"_blank\" rel=\"noreferrer noopener\"\n\u003eТерри Сеновски\u003c/a\u003e.\nНадо сказать, что это мой второй подход к курсу, и успешность его прохождения во многом связана с переосмыслением после первой попытки.\u003c/p\u003e\n\u003cp\u003eВ этом посте я хотел бы привести ряд идей и правил, которые помогают учится более эффективно.\u003c/p\u003e","title":"Как учиться эффективно. По мотивам курса LH2L"},{"content":"","date":null,"permalink":"/tags/%D1%83%D1%87%D0%B8%D1%82%D1%8C%D1%81%D1%8F/","section":"Теги","summary":"","title":"учиться"},{"content":"","date":null,"permalink":"/tags/%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE/","section":"Теги","summary":"","title":"эффективно"},{"content":"Аннотация доклада # С 1964 г. в городе Обнинске находится в эксплуатации исследовательский реактор ВВР-ц. С 1980 г. на базе реактора ВВР-ц запущено производство радионуклидов медицинского назначения и радиофармпрепаратов на их основе. В связи с успешностью данного направления и выгодным географическим расположением реактора принята долгосрочная программа по реконструкции реактора для увеличения эффективности наработки радионуклеидов[1].\nВ 2011 году была создана прецизионная модель реактора ВВР-ц. Данная прецизионная модель имеет достаточную точность для расчета запаса критичности реактора. Таким образом, обеспечивается расчеты по модернизации реактора для производства радионуклидов[2]. К существенным недостаткам данной модели относится низкая скорость работы. Расчет запаса критичность для одного состояния реактора занимает примерно 8 часов. С учетом длительности кампании реактора в 100 часов и необходимости расчетов по радиационной безопасности предстоящей кампании, исследователи сильно ограничены при расчетах модернизации реактора.\nТаким образом, актуальной является задача создания упрощенной модели, которая позволит исследователям проводить больше вычислительных экспериментов по модернизации реактора. Целью данной работы является создание аппроксимации запаса критичности реактора с использованием искусственной нейронной сети по данным прецизионной модели, а также по измеренным данным прошедших кампаний.\nСогласно обобщённой аппроксимационной теореме, можно получить сколь угодно точное приближение любой непрерывной функции многих переменных, используя операции сложения и умножения на число, суперпозицию функций, линейные функции, а также одну произвольную непрерывную нелинейную функцию одной переменной[3]. Таким образом, искусственная нейронная сеть с одним нелинейным слоем может аппроксимировать запас критичности реактора.\nДля построения нейросетевой аппроксимации было проведено моделирование 34 кампаний с помощью прецизионной модели, а также использованы данные 24 реальных кампаний. Исходными данными для модели является процент выгорания топлива в каждой тепловыделяющей сборке (ТВС) реактора, а также положения стержней средств управления и защиты (СУЗ) реактора. Результатом работы прецизионной модели является относительное значение запаса критичности.\nС помощью библиотеки TensorFlow была создана нейросетевая аппроксимация. После обучения искусственная нейронная сеть показала максимальную ошибку аппроксимации в 3.13%. Средняя ошибка аппроксимации – 1.11%. Время расчета запаса критичности составляет примерно 100 мс. Таким образом, неросетевая аппроксимация обладает достаточной точностью и скоростью работы для ускорения предварительных расчётов запаса критичности.\nЛитература # Кочнов О.Ю., Лукин Н.Д. ВВР-ц – этапы реконструкции ре\u0026rsquo;актора. Тезисы доклада на XI Российское совещание «Безопасность исследовательских ядерных установок» (Димитровград, 25-30 мая 2009 г.). – С. 35-36. Колесов В.В., Кочнов О.Ю., Волков Ю.В., Украинцев В.Ф., Фомин Р.В. Создание прецизионной модели реактора ВВР-ц для последующей оптимизации его конструкции и наработки 99Mo и других радионуклидов // Известия вузов. Ядерная энергетика. –2011. – №.4. – С. 129-133. Горбань А. Н. Обобщенная аппроксимационная теорема и вычислительные возможности нейронных сетей // Сибирский журнал вычислительной математики, 1998, т. 1, № 1. — С. 12—24. ","date":"21.04.2017","permalink":"/talk/mephi-2017-talk/","section":"Выступления и лекции","summary":"Аннотация доклада # С 1964 г.","title":"Аппроксимация запаса критичности реактора ВВР-ц с использованием искусственной нейронной сети"},{"content":"","date":null,"permalink":"/tags/notes/","section":"Теги","summary":"","title":"notes"},{"content":"Намедни закончил чтение книги Дж. Ардена \u0026ldquo;Укрощение амигдалы и другие инструменты тренировки мозга\u0026rdquo; от издательства МИФ. Хочу записать некоторые интересные и полезные мысли, а также дать некоторую оценку прочитанному.\nПолезные мысли # Основной подход перенастройки мозга основан на свойстве нейропластичности. Процесс перенастройки мозга разделяется на 4 этапа, которые можно описать акронимом КУРС: Концентрация \u0026ndash; новый навык надо \u0026ldquo;провернуть\u0026rdquo; в голове с максимальным уровнем концентрации; Усилие \u0026ndash; после концентрации необходимо провести усилие, чтобы несколько раз повторить обретаемы навык; Расслабленность \u0026ndash; после периода адаптации повторять навык с меньшими усилиями; Стремление \u0026ndash; регулярно повторять обретенный навык. Чувство тревоги \u0026ndash; следствие работы миндалевидного тела. При возникновении чувства тревоги не стоит все время избегать источника тревоги, а периодически надо с ним взаимодействовать. В таком случае тревожность заменится на уверенность.\nАктивное действие стимулирует позитивное мышление. Если есть какая-то проблема, которая вызывает чувства тревоги активное действие поможет изменить отношение и решить проблему, а пассивное наблюдение \u0026ndash; усилит тревожность.\nПамять ассоциативна и требует постоянных упражнений. Практики по развитию памяти (мнемоника, ассоциативные связи, концентрация внимания) требуют ежедневной практики.\nСбалансированное питание \u0026ndash; \u0026ldquo;фундамент\u0026rdquo; корректного функционирования мозга. Стоит ограничить потребление простых углеводов и транжиров, а в рацион добавить витамины, минералы и омега-3. Лучше иметь как минимум 3 приема пищи:\nЗавтрак: яйцо, цельнозерновой тост, сок (фрукты) Обед: больше белков, меньше углеводов Ужин: меньше белков, больше сложных углеводов Сон и физические упражнения должны быть в достаточном количестве ежедневной\nСоциальное взаимодействие необходимо для выработки ряда нейромедиаторов\nС возрастом придет мудрость\nДля спокойствия ума можно практиковать парасимпатическую медитацию:\nРитмичное дыхание\nСконцентрированное внимание\nСпокойная окружающая обстановка\nОтношение принятия и безоценочности суждений\nРасслабленная поза\nСамонаблюдение\nНазывание эмоций\nО книге в целом # Джон Арден \u0026mdash; практикующий психолог. Он имеет степень Ph.D. в области нейрофизиологии.\nКнига разбита на 9 глав, каждая из которых посвящена темам, перечисленным выше. При этом каждую из тематик автор раскрывает в нескольких аспектах:\nсо стороны нейрофизиологии подробно, но при этом довольно понятно описываются процессы в головном мозге; даются рекомендации по решению проблемы; приводится обобщенный пример из практики автора. Несмотря на обилие научных терминов для меня книга оказалась легка и понятна. К каждой главы автор приводит обширный список литературы, что указывает нам на то, что каждая мысль в книге подтверждена реальными научными исследованиями.\nВремя на чтение: 5 часов\nПолезные ссылки по теме # Дж. Ардена \u0026ldquo;Укрощение амигдалы и другие инструменты тренировки мозга\u0026rdquo; Курс Learn how to Learn на Coursera ","date":"22.02.2017","permalink":"/post/rewire-your-brain/","section":"Блог","summary":"Намедни закончил чтение книги Дж.","title":"Интересные мысли из книги Дж. Ардена \"Укрощение амигдалы и другие инструменты тренировки мозга\""},{"content":"","date":null,"permalink":"/tags/%D1%80%D0%B0%D0%B7%D0%B2%D0%B8%D1%82%D0%B8%D0%B5-%D0%BC%D0%BE%D0%B7%D0%B3%D0%B0/","section":"Теги","summary":"","title":"развитие мозга"},{"content":"","date":null,"permalink":"/tags/howto/","section":"Теги","summary":"","title":"howto"},{"content":"","date":null,"permalink":"/tags/programing/","section":"Теги","summary":"","title":"programing"},{"content":"Golang \u0026ndash; прекрасный язык программирования, который в последнее время все больше и больше помогает мне решать рабочие и исследовательские задачи. На нем очень удобно писать небольшие утилиты, которые довольно быстро пишутся и легко поддерживаются.\nВ данном посте хочу поделится с вами интересным способом создания каркаса приложения для Golang, который встретился мне в этой статье. При этом приложение будет структурировано, а так же уже из коробки иметь систему команд и флагов командной строки. А также возможность читать их из файла конфигурации и переменных окружения.\nДля начала надо установить пакет Cobra:\ngo get -v github.com/spf13/cobra/cobra Затем следует запустить простую команду для shell:\n$ cobra init $GOPATH/src/\u0026lt;domain\u0026gt;/\u0026lt;user_name\u0026gt;/\u0026lt;project_name\u0026gt; -a \u0026#34;\u0026lt;author_name\u0026gt;\u0026#34; или для cmd:\n$ cobra init %GOPATH%\\src\\\u0026lt;domain\u0026gt;\\\u0026lt;user_name\u0026gt;\\\u0026lt;project_name\u0026gt; -a \u0026#34;\u0026lt;author_name\u0026gt;\u0026#34; где\n\u0026lt;domain\u0026gt; \u0026ndash; хостинг для хранения пакета (например, github.com); \u0026lt;user_name\u0026gt; \u0026ndash; ваш логин для хостинге (для меня например, djbelyak); \u0026lt;project_name\u0026gt; \u0026ndash; название вашего проекта (например, hello-cobra); \u0026lt;author_name\u0026gt; \u0026ndash; ваше имя, которое будет использовано для генерированной лицензии кода (для меня, например, Ivan Belyavtsev). Удостоверьтесь, что переменная окружения PATH содержит в себе GOBIN\nВ папке проекта появится файл LICENSE, который содержит уже сгенерированный текст лицензии на код, файл main.go, который содержит в себе основной запускаемый код, а также файл cmd/root.go в котором сгенерирован начальный код для работы приложения.\nПроверим что у нас получилось:\n$ go run $GOPATH/src/\u0026lt;domain\u0026gt;/\u0026lt;user_name\u0026gt;/\u0026lt;project_name\u0026gt;/main.go A longer description that spans multiple lines and likely contains examples and usage of using your application. For example: Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files to quickly create a Cobra application. $ go run $GOPATH/src/\u0026lt;domain\u0026gt;/\u0026lt;user_name\u0026gt;/\u0026lt;project_name\u0026gt;/main.go --config Error: flag needs an argument: --config Usage: Flags: --config string config file (default is $HOME/.geneticpainting.yaml) -t, --toggle Help message for toggle flag needs an argument: --config exit status 4294967295 Как видно из лога команды у нас уже есть некоторая справка и возможность указать конфигурационный файл.. Справочные сообщения можно найти и поправить в файле cmd/root.go.\nТеперь добавим новую команду \u0026lt;command_name\u0026gt; для нашего приложения:\n$ cd $GOPATH/src/\u0026lt;domain\u0026gt;/\u0026lt;user_name\u0026gt;/\u0026lt;project_name\u0026gt; $ cobra add \u0026lt;command_name\u0026gt; В результате работы этой команды будет сгенерирован новый файл cmd/\u0026lt;command_name\u0026gt;. Запустим приложение и проверим как будет работать новая команда\n$ go run $GOPATH/src/github.com/djbelyak/geneticpainting/main.go \u0026lt;command_name\u0026gt; \u0026lt;command_name\u0026gt; called И последнее что мы рассмотрим в этом посте \u0026ndash; добавление флагов. Добавим глобальный флаг -v, \u0026ndash;version. Для этого в файле cmd/root.go объявим глобальную переменную\nvar printVersion bool В функции init() добавим персистентный булевый флаг\nRootCmd.PersistentFlags().BoolVarP(\u0026amp;printVersion, \u0026#34;version\u0026#34;, \u0026#34;v\u0026#34;, false, \u0026#34;print version of application\u0026#34;) А также в конструкторе объекта RootCmd добавим поле Run\nRun: func(cmd *cobra.Command, args []string) { if printVersion { fmt.Println(\u0026#34;Version 1.0.0\u0026#34;) } } Запустим и проверим работу флага\n$ go run $GOPATH/src/github.com/djbelyak/geneticpainting/main.go -v Version 1.0.0 Полезные ссылки по теме # Репозиторий проекта cobra Документация пакета cobra ","date":"14.02.2017","permalink":"/post/how-to-create-go-application/","section":"Блог","summary":"Golang \u0026ndash; прекрасный язык программирования, который в последнее время все больше и больше помогает мне решать рабочие и исследовательские задачи.","title":"Как удобно сделать каркас приложения для Golang"},{"content":"","date":null,"permalink":"/tags/ci/","section":"Теги","summary":"","title":"CI"},{"content":"","date":null,"permalink":"/tags/gitlab/","section":"Теги","summary":"","title":"GitLab"},{"content":"","date":null,"permalink":"/tags/latex/","section":"Теги","summary":"","title":"LaTeX"},{"content":"Настала осень - самая прекрасная пора для научно-исследовательских работ. Значит самое время обновить свой подход к написанию научных статей. В последнее время для хранения, управления, коллаборации и прочей работы с исходными кодами я стал использовать gitlab.com.\nПервый плюс использования gitlab для научной работы состоит в том, что у вас появляется единая точка для синхронизации с коллегами, а если вы пишете один - резервная копия с историей.\nВторой плюс состоит в едином списке задач в виде Issue tracker\u0026rsquo;а. Могут быть назначены исполнители, сроки, проведены обсуждения. Также прямо в интерфейсе можно разбренчиваться - удобно даже для непосвященных.\nТретий плюс, ради которого затевался данный пост, состоит в непрерывной интеграции. При каждом коммите (фиксированной версии рабочей директории), отправленном на сервер gitlab можно запустить команды для сборки проекта. Для программных продуктов собирается, тестируется и выкладывается дистрибутив продукта. Тоже самое доступно и для LaTeX проекта. Можно собрать проект и получить готовый pdf даже не имея полностью установленного LaTeX стека.\nПри создании непрерывной интеграции создатели gitlab вдохновлялись сервисом travis-ci.org. Соответственно, вся настройка репозитория производится в файле .gitlab-ci.yml. После коммита gitlab runner скачивает этот файл к себе и выполняет описанные в нем действия. Gitlab runner - это программа, которая управляет машиной, на которой происходит сборка. Gitlab имеет партнерское соглашение с Digital Ocean, что позволяет на каждый проект иметь бесплатный runner. Также в качестве runner\u0026rsquo;а можно зарегистрировать свою машину. Подробности можно узнать в документации (на английском).\nИтак, у нас есть в корне репозитория LaTeX-документ с названием report.tex. Остальные части документа импортируются внутри report.tex и также расположены в корне. Для настройки непрерывной интеграции создадим следующий файл:\nimage: blang/latex stages: - build latex_build_job: stage: build script: - pdflatex report.tex \u0026amp;\u0026amp; pdflatex report.tex tags: - docker artifacts: paths: - report.pdf При каждом новом коммите, попавшем в gitlab репозиторий будет происходить следующее:\nRunner запускает Docker-образ с latex В рабочую директорию клонирует репозиторий со статьей Запускает pdflatex два раза (второй раз нужен для корректного отображения BibTeX\u0026rsquo;a) При наличии файла report.pdf помечает билд успешным и выгружает этот файл как артефакт сборки. После этого вы можете скачать этот файл и убедится, что новые изменения как-то повлияли на статью.\nПолезные ссылки # gitlab.com travis-ci.org Документация к Gitlab CI (на английском) Пост о использовании Docker для сборки LaTeX документов (на английском) ","date":"13.09.2016","permalink":"/post/gitlab-ci-for-latex/","section":"Блог","summary":"\u003cp\u003eНастала осень - самая прекрасная пора для научно-исследовательских работ.\nЗначит самое время обновить свой подход к написанию научных статей.\nВ последнее время для хранения, управления, коллаборации и прочей работы с исходными кодами я стал использовать \u003ca\n  href=\"https://gitlab.com\"\n  \n  target=\"_blank\" rel=\"noreferrer noopener\"\n\u003egitlab.com\u003c/a\u003e.\u003c/p\u003e","title":"Непрерывная интеграция для документов LaTeX в GitLab"}]