<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Капс Локк</title><generator>teletype.in</generator><description><![CDATA[Капс Локк]]></description><image><url>https://teletype.in/files/e6/4b/e64be41f-19de-437c-9c3a-4ac79b4edaa7.jpeg</url><title>Капс Локк</title><link>https://teletype.in/@capslock</link></image><link>https://teletype.in/@capslock?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/capslock?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/capslock?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Fri, 10 Apr 2026 05:31:27 GMT</pubDate><lastBuildDate>Fri, 10 Apr 2026 05:31:27 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@capslock/5yal5J8j2</guid><link>https://teletype.in/@capslock/5yal5J8j2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><comments>https://teletype.in/@capslock/5yal5J8j2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock#comments</comments><dc:creator>capslock</dc:creator><title>Как установить Visual Studio для разработки в Windows Forms</title><pubDate>Tue, 31 Mar 2020 05:18:15 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/a4/cc/a4ccf087-38c3-49ff-88b8-26350c535f99.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/8b/ad/8badc67c-c3f5-4b57-892b-f9e7babdaedd.png"></img>*Если вы уже установили Visual Studio и обнаружили, что не можете создать проект Windows Forms перейдите в конец статьи, там я описал что нужно делать в такой ситуации]]></description><content:encoded><![CDATA[
  <p><em><strong>*Если вы уже установили Visual Studio и обнаружили, что не можете создать проект Windows Forms перейдите в конец статьи, там я описал что нужно делать в такой ситуации</strong></em></p>
  <h3>Шаг первый</h3>
  <p>Зайдите на официальный сайт Visual Studio -&gt; <a href="https://visualstudio.microsoft.com/ru/" target="_blank">https://visualstudio.microsoft.com/ru/</a></p>
  <p>Скачайте именно Visual Studio Community, остальные версии платные и требуют лицензию.</p>
  <figure class="m_retina">
    <img src="https://teletype.in/files/8b/ad/8badc67c-c3f5-4b57-892b-f9e7babdaedd.png" width="245" />
  </figure>
  <p>Вам на компьютер должен будет сохранится установочный файл, который нужно открыть.</p>
  <h3>Шаг второй</h3>
  <p>При открытии установочного файла откроется Visual Studio Installer (далее VSI). Это отдельная программа специально созданная для управления версиями Visual Studio (на подобии Unity Hub). В VSI вы должны увидеть следующую картину:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/aa/5c/aa5cfb7a-40c4-4865-a51c-0b7e695f6c2a.png" width="1615" />
  </figure>
  <p><em>Если же у вас эта панель не появилась автоматически перейдите во вкладку &quot;Доступно&quot; и нажмите кнопку &quot;Установить&quot; напротив &quot;Visual Studio Community&quot;</em></p>
  <figure class="m_column">
    <img src="https://teletype.in/files/89/66/89664e76-3f82-4f0a-9171-7bdd21286565.png" width="1615" />
  </figure>
  <p>Тут вы должны выбрать &quot;Разработка классических приложений .NET&quot;. Также вы можете выбрать &quot;Разработка классических приложений на С++&quot;, если вы хотите также иметь доступ к языку программирования С++.</p>
  <h3>Дополнительно</h3>
  <p>Также хочу показать как можно уменьшить размер скачиваемого контента, если у вас мало свободного места на диске или же плохое интернет соединение.</p>
  <p>Когда вы нажмете на &quot;Разработка классических приложений .NET&quot; справа появится более тонкий выбор компонентов. При выборе какого-либо набора компонентов также автоматически с ними скачиваются дополнительные, необязательные компоненты необходимые лишь для упрощения процесса, однако он будет полезен только более профессиональным разработчикам.</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/0b/0e/0b0ef47b-51f5-4ec9-ae37-8cd45b85c132.png" width="1617" />
  </figure>
  <p>Можете смело <strong>убирать </strong>варианты, указанные на скриншоте выше.</p>
  <h3>Шаг третий</h3>
  <figure class="m_column">
    <img src="https://teletype.in/files/6c/e7/6ce79cf5-d818-4f7c-9afb-dfef87485ba9.png" width="1617" />
  </figure>
  <p>Теперь нажмите кнопку &quot;Установить&quot; (или &quot;Изменить&quot;) снизу и ждите скачивание всех файлов а также установку. В течении установки компьютер может довольно сильно зависать и нагреваться, так что я советую не использовать его пока установка не окончится.</p>
  <p>После установки просто откройте установленный Visual Studio через ярлык на рабочем столе или через меню &quot;Пуск&quot;. </p>
  <h3>Как изменить уже установленную версию Visual Studio</h3>
  <p>Если вы уже установили Visual Studio и обнаружили, что не можете создать проект Windows Forms, то не следует переустановлять Visual Studio. Вы можете использовать Visual Studio Installer для изменения уже установленных версий Visual Studio.</p>
  <p>Чтобы открыть VSI откройте меню &quot;Пуск&quot; и в поиске вбейте название &quot;Visual Studio Installer&quot;.</p>
  <figure class="m_retina">
    <img src="https://teletype.in/files/aa/60/aa60fcec-7d1b-4829-87e2-b7dfd6fac3c9.png" width="245" />
    <figcaption>Внешний вид поиска у вас может отличаться</figcaption>
  </figure>
  <p>Откройте его. Вы увидите список всех установленных версий Visual Studio. Найдите нужную версию и нажмите &quot;Дополнительно&quot; а далее &quot;Изменить&quot;.</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/53/d5/53d5d36c-ecc6-4a57-b346-220e5bc0ad98.png" width="1619" />
  </figure>
  <p>Далее подождите недолгую загрузку. Дальше можете делать все, как указано выше в шагах, начиная со второго шага.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@capslock/ByEOrQUmN</guid><link>https://teletype.in/@capslock/ByEOrQUmN?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><comments>https://teletype.in/@capslock/ByEOrQUmN?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock#comments</comments><dc:creator>capslock</dc:creator><title>Бэкэнд на C# или как влиться в веб</title><pubDate>Thu, 24 Jan 2019 17:20:24 GMT</pubDate><description><![CDATA[<img src="https://teletype.in/files/91/91c2b3a6-8e38-446f-90ed-f5a20d07c2c7.png"></img>Многие считают, что на таких языках как C, C++, C#, TurboPascal и т.д. нельзя заниматься серверным программированием как таковым. Однако это в корне не так, особенно на счет C#, который по своей сути является веб-версией C++.]]></description><content:encoded><![CDATA[
  <p>Многие считают, что на таких языках как C, C++, C#, TurboPascal и т.д. нельзя заниматься серверным программированием как таковым. Однако это в корне не так, особенно на счет C#, который по своей сути является веб-версией C++.</p>
  <h2>Что такое веб-сайт?</h2>
  <p>Перед тем как вливаться в ряды веб-программистов сначала определимся с тем, во что всё-таки мы так старательно хотим влиться.</p>
  <p><strong>Веб-страничка </strong>- это HTML-документ, на каком-то сервере, передающийся на ваш браузер. Эти странички создаются фронтэнд языками - HTML, CSS (или LESS, если CSS почему-то не ваше) и JS.</p>
  <p><strong>Верстка веб-сайта </strong>- (не путать с верстки в печати страниц для журналов, именно из этого термина в печати и появился термин в вебе, так что не надо использовать InDesign для верстки сайтов!) это разработка веб-странички. Во время верстки верстальщик использует языки разметки и фронтенд языки программирования (О них подробнее далее) либо визуальные редакторы, но они всегда сильно урезаны по функционалу.</p>
  <p><strong>Верстальщик </strong>- профессия сейчас модная и востребованная, однако когда верстальщики говорят, что они программисты, то как-то жалко становится ;( (не считать JavaScript! Там немного по другому) Они не работают с методами, классами и прочими &quot;сложными штучками&quot; обычных программистов. Если и работают, (в JavaScript) то немного в другом формате.</p>
  <p><strong>HTML </strong>- это язык разметки (ML в конце это от англ. &quot;Marking Language&quot;, который есть и в XAML) и они по сути не являются языками программирования. Так что сказать &quot;Я программирую на HTML&quot; нельзя, иначе вас посчитают за сбрендившего.</p>
  <p><strong>CSS </strong>- это таблица стилей (SS в конце это Style Sheet, как и у LESS) который задаёт страничке внешний вид. Он тоже не является ЯП-ом, но имеет более простой синтаксис, который, кстати, чем-то напоминает обычные ЯП-ы.</p>
  <p><strong>JavaScript </strong>- это уже ЯП. Он скриптовой и интерпретируемый. Он нужен для оживления страницы и добавления в нее элементов с взаимодействием с пользователем без необходимости постоянной и обязательной перезагрузки страницы. Однако после каждого обновления CSS становится всё более не нуждающейся в JavaScript, перенимая у него некоторые функции, что, конечно, улучшает удобство верстки сайта и освобождает разработчика от лишних хлопот с JS.</p>
  <h2>Какие есть виды веб-страничек?</h2>
  <p>Есть два вида веб-страниц - <strong>статические </strong>и <strong>динамические</strong>.</p>
  <p><strong>Статические веб-страницы </strong>- это страницы, которые вы заранее записываете и они такие, какими вы их написали, не более. Максимум CSS-файл изменится, и всё.</p>
  <p><strong>Динамические веб-страницы </strong>- наоборот, создаются сервером при обработке HTTP запроса, т.е. постоянно меняются и пересоздаются. Это хоть и намного сложнее, чем просто кинуть юзеру готовый сайт, но функциональнее, ведь без этого такие простые вещи как комментарии не сделаешь (ну, можно сделать, но придется каждый коммент прописывать в страничку в ручную, что не очень удобно, особенно при 100+ уников в день)</p>
  <h2>Что такое фронтэнд и бекэнд?</h2>
  <figure class="m_custom">
    <img src="https://teletype.in/files/91/91c2b3a6-8e38-446f-90ed-f5a20d07c2c7.png" width="409.5" />
  </figure>
  <p>Так, с видами страничек разобрались, но что такое фронтэнд и бекэнд, о которых так много шума?</p>
  <p><strong>Фронтэнд </strong>- это всё, что связано с пользовательским интерфейсом (UI) и тем, что в итоге попадёт пользователю на экран.</p>
  <p><strong>Бекэнд </strong>или <strong>серверное программирование </strong>- это логика сайта. Особенно нужен для динамических сайтов. Это программа, стоящая на сервере и принимающая HTTP запросы у пользователей, обрабатывающая его, собирая все данные и отправляющая конечный ответ обратно пользователю.</p>
  <p>Языки бекэнда:</p>
  <ul>
    <li><strong>PHP </strong>- самый популярный и легкий. Он &quot;из коробки&quot; умеет всё, что нужно сайту. Он самый простой и один из самых востребованных. Однако работая с ним вы собираете множество плохих привычек, которые считаются плохим тоном у других &quot;нормальных&quot; языков.</li>
    <li><strong>Python </strong>- второй по популярности, если не первый. Идеален, если вы его уже знаете. Надо всего-то научится работать с фреймворком. Отлично работает и быстро пишется. Шикарно подходит для научных вычислений, нейросетей и ИИ, однако для бекэнда очень часто используется.</li>
    <li><strong>JavaScript </strong>- да, он фронтэнд язык, но с помощью <strong>Node.js </strong>можно использовать его и для бекэнда. Синтаксис у него для всего кроме фронтэнда, конечно, ужасен, но кому нравится - сойдет. Плюс - не придется учить новый язык, если вы - верстальщик.</li>
    <li><strong>Java </strong>- благодаря фреймворкам и старости языка он стал одним из наиболее популярных для этой цели языков, но потом быстро упал. Сейчас далеко не актуален. Но если лень учить новый язык, а Java уже знаете - сойдет, пока, но лучше сразу учите новый, пока не поздно.</li>
    <li><strong>Ruby </strong>- фреймворк <strong>Ruby on Rails </strong>распахнул Ruby огромные просторы для бекэнда. Довольно популярен, научится можно, но на большое коммьюнити не надейтесь (хотя кто об этом говорит? Разраб на ASP.NET MVC!?!)</li>
    <li><strong>Go!</strong> (или <strong>Golang</strong>)- язык, разработанный Гуглом специально для серверного программирования. Все ожидали ему огромный рост популярности и становление самым главным языком для этого, но что-то не сраслось. По синтаксису он невероятно простой, это как С# без лишних деталей и ужасных исключений.</li>
    <li><strong>C#</strong> - Microsoft выделила много усилий ради этого фреймворка. В отличии от многих других фреймворков, ASP.NET сделан самими Microsoft, которые и создали язык, (или по крайней мере его поддерживают) что, конечно, добавляет ему очки надежности и хорошой совместимостью с самим языком.</li>
  </ul>
  <h2>Что такое C# ASP.NET MVC?</h2>
  <p>Мой канал о C#, так что ASP.NET.</p>
  <p><strong>ASP.NET </strong>в общем - это фреймворк, основанный на .NET Framework, специально созданный для создания веб-приложений.</p>
  <p><strong>ASP.NET MVC </strong>- это один из двух ветвей ASP.NET, на ровне с Веб-формами. (их не трогайте, фигня) MVC - это Model-View-Controller - популярная система работы веб-приложений.</p>
  <figure class="m_column">
    <img src="https://i.ytimg.com/vi/VaDZ4aoEy1s/maxresdefault.jpg" width="1280" />
  </figure>
  <h2>Как учить C# ASP.NET MVC 5?</h2>
  <p>Из курсов могу посоветовать хороший видеокурс от <a href="https://www.youtube.com/watch?v=tTTXvIjkQiw&list=PLvItDmb0sZw-nwRDePWTBATvBCrC6Cslr" target="_blank"><strong>ITVDN ASP.NET MVC 5. Уровень 1</strong></a> и более менее курс от Byte++ <a href="https://www.youtube.com/watch?v=o4W4Qa-R0pk&list=PLH3y3SWteZd1O84-ovNIG4kkBI2F0WCjn" target="_blank"><strong>ASP.NET MVC 5</strong></a> и еще один без голоса, но я его потерял. Также есть новый курс от LoftBlog <a href="https://www.youtube.com/watch?v=DXW_0iJCwhI" target="_blank"><strong>Веб-приложение на asp.net mvc core</strong></a>, первый урок которого вышел буквально 4 дня назад, буду следить.</p>
  <p>Также есть отличное видео, которое расскажет вам насколько глубока тема веба и вообще слегка протолкнет тебя и подготовит к трудностям советую ВСЕМ. <a href="http://Что нужно знать, чтобы стать ASP.NET MVC разработчиком?" target="_blank"><strong>Что нужно знать, чтобы стать ASP.NET MVC разработчиком?</strong></a></p>
  <hr />
  <p>Делать ли мне продолжение о том, как работает бекэнд в целом и ASP.NET MVC с частности, а также о CMS?</p>
  <blockquote>Также подписывайтесь на мой Телеграмм канал, если не подписаны! <a href="http://t.me/cs_way" target="_blank">Путь C# / Для новичков</a></blockquote>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@capslock/Hyd9GtQXE</guid><link>https://teletype.in/@capslock/Hyd9GtQXE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><comments>https://teletype.in/@capslock/Hyd9GtQXE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock#comments</comments><dc:creator>capslock</dc:creator><title>Почему C# - лучший первый язык!</title><pubDate>Mon, 21 Jan 2019 18:05:58 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/76/764b44b9-4c26-4fa5-9f68-5773dee9eae6.png"></media:content><description><![CDATA[<img src="https://code.visualstudio.com/assets/docs/languages/csharp/c_sharp_hero.png"></img>Конечно, многие поспорят с этим утверждением, но я попробую переубедить вас в обратном.]]></description><content:encoded><![CDATA[
  <p>Конечно, многие поспорят с этим утверждением, но я попробую переубедить вас в обратном.</p>
  <h2>1) Типизация</h2>
  <p>Типизация - один из важнейших факторов как для первого языка, так и для второго, а иногда и для третьего. (но это уже редкость) Конечно как новичок вы можете недооценивать это или недоумевать, что же в этом такого.</p>
  <p>В C# - строгая типизация. Некоторые считают, что лучше начинать с динамической, а некоторые вообще с языков без нее. Это совершенно неправильно, как считаю я и множество профессиональных программистов, (я не один из их числа, но осведомлен) ведь когда у тебя динамическая ты не до конца понимаешь как устроены типы данных, если не углубляться. Однако это один из фундаментальных понятий в каждом языке, о котором важно знать. Однако не бойтесь - это довольно просто, если разобраться в вопросе, а не просто сидеть на &quot;динамике&quot;.</p>
  <p>Также большой плюс для новичков, которые выбрали C# как первый язык окажется то, что в Шарпе есть множество типов данный - от String до Sbyte. Некоторые новички наоборот отталкиваются от мысли, что &quot;придется учить ворох всяких типов, а потом путаться&quot;, а если этому еще и кто-нибудь &quot;взрослый&quot; посоветует - бегите! Лучше сразу понимать множество типов и использовать их в разных языках, а при переходе на новый не разбираться в новых типах, а сразу их использовать по назначению и по опыту. Вам так будет только проще. А то будете недоумевать &quot;А зачем так много типов? Можно же одним Integer обойтись!&quot;.</p>
  <p><em>(Сразу поясню - такое количество типов нужно, чтобы грамотно оптимизировать код, ведь лучше тратить меньше ОЗУ на переменную с парой цифрами и использовать Byte, чем на эту мелочь тратить в 4 раза больше с Integer. Да, это всё в байтах высчитывается, но представьте, что у вас их - массив из сотен элементов! Ну как?)</em></p>
  <h2>2) Производительность и легкость</h2>
  <figure class="m_column">
    <img src="https://code.visualstudio.com/assets/docs/languages/csharp/c_sharp_hero.png" width="750" />
  </figure>
  <p>C# вобрал в себя всё наилучшее из C++, Java и других языков, но при этом не взял багов, недоработок, костылей и т.д. У него легкий синтаксис, в отличии от C++, но при этом почти, если не также производителен. Да, в нем нельзя работать на разных уровнях абстракции и в нем нет гибкой работы с памятью, но зато его синтаксис не вызывает ужас, в нем легко разобраться и вообще: &quot;зачем новичкам работа с памятью, вы чё здурели!?!&quot; Если что можно относительно легко перейти на тот же C++.</p>
  <h2>3) Благоприятная среда</h2>
  <figure class="m_column">
    <img src="https://hsto.org/files/202/354/22d/20235422d55643e7b3bfe3193fe0e332.jpg" width="1440" />
  </figure>
  <p>C# - сильно развивающийся язык. Он быстро улучшается, (относительно) и имеет очень дружелюбное коммьюнити, (опять же - относительно) а также имеет просто нереально удобный IDE в лице Visual Studio. Всё это - результат работы Microsoft для формирования &quot;идеального языка для дружбы и радуги&quot;.</p>
  <h2>4) Множество применений</h2>
  <p>У C# есть множество применений, в которых он преуспевает.</p>
  <ul>
    <li>Бэкэнд - C# очень даже популярен для бэкэнда, но, очевидно, не достаточно, чтобы стоять на ровне с PHP, Python и Node.js. Однако он, насколько мне известно, используется чаще чем тот же Go. (Golang)</li>
    <li>Веб-приложения - если в бэкэнде он не сильно преуспевает, то для веб-приложений он довольно таки хорош. ASP.NET сильно в этом преуспел.</li>
    <li>Разработка ПО - Microsoft = Windows, Windows = самая популярная настольная ОС. А кто у нас самый популярный язык для разработки нативных приложений? Верно, C#! WPF - самый мощный, продвинутый и удобный инструмент для этого, а сияние WinForms еще не до конца угасло. Есть и C++, но он всё же уступает в пользу кроссплатфоменности.</li>
    <li>Разработка мобильных приложений - Xamarin в пролёте. Он не то что не популярен - его не любят. Хотяте в моб. приложения - идите к Kotlin (Android) и Swift (IOS). Даже если смотреть на кроссплатформенную разработку Xamarin ели-ели двигается, ведь приходится писать разметку под каждую ОС.</li>
    <li>Разработка инди и мобильных игр - Unity - это ваш единственный выбор. Почему? А потому что он самый популярный, легкий и технологичный игровой движок, и при этом всём бесплатный. Пока Godot не покарил рынок у вас два варианта - идти навстречу Godot или веселиться с Unity.</li>
    <li>Разработка ААА игр - Ну, тут уже C# проигрывает C++, из-за производительности и движка. Почти все крупнобюджетные движки (Unreal Engine, CryEngine и пр.) пишутся на C++, не считая FrostBite, в котором пишут на C#, но он только у злого и ужасного EA, так что тут шансы падают, если вы не идете работать к студии с Unity или к дочерней студии/самой EA.</li>
  </ul>
  <p>Как видите Шарп очень многогранный язык, особенно в сфере игр и разработки ПО.</p>
  <h2>Минусы</h2>
  <p>А вот пошли минусы C# для новичков.</p>
  <h2>1) &quot;Любовь&quot; Visual Studio к тебе</h2>
  <p>Как бы это странно не звучало, но удобство Visual Studio и его постоянная помощь - минус для новичков. Но как это? Новичкам для набивки опыта важно делать всё самому, иначе ничего не закрепится достаточно сильно и придется долго и упорно допиливать навыки.</p>
  <p>Я сам на этом попал, когда переходил на другой язык, в котором есть только ты, текстовый редактор и отладчик. Тогда я реально почувствовал боль, когда после долгого глаженья по головке тебе приходится всё делать самому. Да, это легко пересилить, но след останется и всегда будет в уголку сознания повторяться слова типа &quot;Эй! У этой IDE нет *какая-то удобная штука из Visual Studio*! Он фигня!!!&quot;, хотя и у всех остальных нормальных этой мелочи нет.</p>
  <h2>2) Кроссплаформенность</h2>
  <p>Хотя этот минус C# уже заделывают добавляя C# во всё большее кол-во ОС, но всё же это не нативная поддержка как у C++. Да, C# не был кроссплатформенным изначально, а задумывался как пленник Windows, но потом Microsoft поняли свою ошибку (или не они, я уже не помню) и начали её исправлять.</p>
  <p>Также замечу, что всякие движки и фреймворки уже нативно имеют кроссплатформенность и в общем этот минус засчитывается только при работе с чистым Visual C#.</p>
  <hr />
  <h2>Итог</h2>
  <p>Как итог могу сказать, что C# практически идеален как первый язык, по крайней мере как просто входная дверь. Да, если вы изучаете веб, то он вам окажется абсолютно бесполезен, но он мягко и плавно вбросит в самую пучину технологий и всего крутого в мире программирования. Если вы мечтатель о будущей игре - бегите изучать C# немедленно! (Если не хотите в Unreal) Хотите просто иногда создавать ПО для &quot;Винды&quot;? C# - идеал для вас! Сами знаете C#, но надо сделать сайтик по быстрому? Возможностей ASP.NET вполне хватит, если, конечно, хотите влезать в эту пучину бесконечных терминов, технологий и протоколов. (Легче в конструкторы или WordPress, если честно)</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@capslock/Sy_wcXf7V</guid><link>https://teletype.in/@capslock/Sy_wcXf7V?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><comments>https://teletype.in/@capslock/Sy_wcXf7V?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock#comments</comments><dc:creator>capslock</dc:creator><title>Начало с Git и история геймдевера. Часть 2. Удаленные репозитории, работа в команде, Clone, Push и Pull Request.</title><pubDate>Mon, 21 Jan 2019 16:36:47 GMT</pubDate><description><![CDATA[<img src="https://www.kom-dir.ru/images/articles/1115/rabota-v-komande.jpg"></img>Напомню, что в предыдущей статье мы начали &quot;историю гейм девелопера&quot; как пример для постепенного объяснения и изучения Git. Что же дальше? А дальше мы перенесем наш репозиторий проекта на удаленный и добавим в нашу команду разработчиков нового участника. Интересно? Отлично, ведь мы начинаем!]]></description><content:encoded><![CDATA[
  <p>Напомню, что в предыдущей статье мы начали &quot;историю гейм девелопера&quot; как пример для постепенного объяснения и изучения Git. Что же дальше? А дальше мы перенесем наш репозиторий проекта на удаленный и добавим в нашу команду разработчиков нового участника. Интересно? Отлично, ведь мы начинаем!</p>
  <figure class="m_column">
    <img src="https://www.kom-dir.ru/images/articles/1115/rabota-v-komande.jpg" width="500" />
  </figure>
  <p><em>5) Представим, что в вашу игру уже играют достаточное количество людей и у вас находят всё чаще и больше багов. Один, по всей видимости вы не справитесь. Что же делать? Использовать <strong>удаленный*</strong>, а не <strong>локальный** репозиторий</strong>, конечно!</em></p>
  <p><strong>Локальный репозиторий - это репозиторий, находящийся на вашем компьютере, которым вы пользуйтесь именно сейчас. Если это сервер, то этот же репозиторий может являться и удаленным* для других устройств.</strong></p>
  <p><strong>Удаленный репозиторий - это репозиторий, находящийся на другом компьютере (или сервере). В основном такие репозитории хранятся на всяких сервисах типа GitHub, GitLab, BitBucket и т.д.</strong></p>
  <p>Вы решили, что для вашей работы вам вполне сойдёт GitHub. Вы зарегистрировались в нем и загрузили локальный репозиторий, а точнее <strong>клонировали* </strong>его.</p>
  <p>Скачать репозиторий можно, но зачем? Намного удобнее использовать клонирование. <strong>Клонирование - это перенос репозитория из удаленного в локальный и наоборот. (Не путать с Push)</strong></p>
  <figure class="m_column">
    <img src="https://teletype.in/files/da/daee94a1-9c23-4a69-8b84-8835682ace80.png" width="982" />
  </figure>
  <p><em>6) Так, вы клонировали репозиторий на GitHub и теперь дали к нему доступ Олегу - вашему другу. Он делает, к примеру, функцию сохранения в Google Drive. Он создает новую ветку <code>Feature/cloud_saving</code>. Однако эта ветка создалась только у него на компьютере. Почему так произошло?</em></p>
  <p>Это произошло, потому что клонирование работает так, что вы просто создаете у себя на компьютере локальный репозиторий, который следует за удаленным. Олег создал ветку только у себя на локальном репозитории, а чтобы она создалась на удаленном ему надо выполнить <strong>Push</strong>*.</p>
  <p><strong>Push - это отправка всех новых изменений с локального на удаленный репозиторий. Каждая ветка отправляет коммиты на удаленную ветку, которой она следует. Например, на удаленном репо. есть ветка <code>origin/dev</code>, а у вас на &quot;локалке&quot; есть ветка <code>dev</code>. Логично, что ветка <code>dev</code> будет отправлять свои коммиты на <code>origin/dev</code>. Это и есть следование локальной ветки удаленной. (Не забывайте, что это идет именно Локальный -&gt; Удаленный, а не наоборот)</strong></p>
  <figure class="m_column">
    <img src="https://teletype.in/files/e8/e82729a1-cda4-4cbe-846d-bd51abd2641f.png" width="871" />
  </figure>
  <p><em>7) Так, Олег, по всей видимости, уже закончил фичу и решил, что она уже готова. Однако просто взять и залить всё в основную ветку - не вариант. Надо чтобы главный разработчик - в данном случае вы - проверил всё. Иначе в проектах с открытым исходным кодом творился бы полный хаос. Но Олегу сообщить вам, что фича готова? В реале встретиться - не удобно. Как же быть? Для этого есть <strong>Pull Request*</strong>. </em></p>
  <p><strong>Pull Request - незаменимая функция Git для Open Source проектов, особенно когда за проектом следят команда из разрабов, а претендентов на добавление новых фич - море. К каждому обращаться не совсем правильно, так что для этого у Git есть свой метод. Вы просто кидаете свои изменения из вашей ветки в основную ветку и к одному из главных разработчиков (владельцев проекта или ветки) приходит уведомление, что такой-то человек хочет добавить в такую-то ветку такие-то изменения. В таком случае этот владелец проекта смотрит изменения, делает Code Review, и делает вывод - добавлять эту фичу, отправить на доработку или полностью отклонить. (Надеюсь было понятно)</strong></p>
  <figure class="m_column">
    <img src="https://teletype.in/files/ef/ef6c0b8d-4d24-4f61-ab3d-8711a4434ebc.png" width="977" />
  </figure>
  <hr />
  <p>На этом вторая часть окончена, а в следующей мы поговорим о таких вещах как <strong>rebase </strong>как альтернатива <strong>merge</strong> (да, да, в следующей, а не в этой), merge конфликты и их решения. Спасибо за внимание!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@capslock/r1XjsfzG4</guid><link>https://teletype.in/@capslock/r1XjsfzG4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><comments>https://teletype.in/@capslock/r1XjsfzG4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock#comments</comments><dc:creator>capslock</dc:creator><title>Начало с Git и история геймдевера. Часть 1. Что такое Git и как работает?</title><pubDate>Sun, 13 Jan 2019 09:49:14 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/e4/e4a9d300-eccd-4d22-bf2c-91569d184504.png"></media:content><description><![CDATA[<img src="https://git-scm.com/images/branching-illustration@2x.png"></img>Здравствуйте! Как и обещал, вот серия статей о Git. В этой части мы поговорим о том, что такое система управления версиями и о Git в частности и почему он необходим любому разработчику (и не только ему, но об этом попозже) так что варите себе чайку, мы идём в мир систем контроля версий...]]></description><content:encoded><![CDATA[
  <p>Здравствуйте! Как и обещал, вот серия статей о Git. В этой части мы поговорим о том, что такое система управления версиями и о Git в частности и почему он необходим любому разработчику (и не только ему, но об этом попозже) так что варите себе чайку, мы идём в мир систем контроля версий...</p>
  <figure class="m_column">
    <img src="https://git-scm.com/images/branching-illustration@2x.png" width="778" />
  </figure>
  <hr />
  <h2>Что такое система управления версиями?</h2>
  <p>Перед тем, как мы начнем изучение Git, мы сначала должны узнать что это такое. Git, конечно, не единственная система управления версиями, есть и другие. Но что это в общем?</p>
  <p>Система управления версиями (или СУВ) - это система, которая позволяет вам сохранять все изменения в проекте, откатываться до одного маленького изменения, который вы сделали ещё месяц назад, не трогая изменения, которые были совершены после него. Также СУВ позволяет очень удобно работать в команде, даже без необходимости сидеть в одном офисе.</p>
  <h2>Как работает Git?</h2>
  <p>Обычно, Git сравнивают с деревом. Ну, это логично, учитывая что в Git есть ветки, которые исходят от других веток. Но ветки деревьев не могут сливаться и вообще яблоки не особо похожи на коммиты.</p>
  <p>1) Давайте представим, что у вас есть какой-то проект - например, игра. Вы её разрабатываете, дорабатываете и исправляете баги. Вы создали <strong>репозиторий* </strong>с проектом и начали записывать изменения в нем.</p>
  <p><strong>*Репозиторий - это сама папка с проектом, в котором хранится все файлы, конфигурация Git, все коммиты и т.д. и т.п.</strong></p>
  <p>2) Теперь вы начали изменять проект и, например, добавили возможность сохранения игры в XML файл. Как это зафиксировать? Создать <strong>коммит* </strong>(commit) конечно!</p>
  <p><strong>*Коммит - это как сохранение в играх. Он фиксирует изменения в ветке.</strong></p>
  <p>Представим это изменение как кружок на нашей диаграмме:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/8f/8f778b00-0f2a-486c-b9b9-3bfbae7954cd.png" width="699" />
  </figure>
  <p>Стрелками мы обозначаем движение (ну или рост) нашей ветки.</p>
  <p>3) Так, вы выпустили стабильную версию своей игры. Теперь вы ловите и лечите баги для следующего релиза и вам приходит гениальная мысль добавления возможности кастомизации персонажа. Но вы не хотите портить стабильную версию, да ещё и с уже вылеченными багами. Что же делать? Создать новую <strong>ветку*</strong></p>
  <p><strong>Ветки - это различные вариации одного и того же проекта, но со своими коммитами и историей, не касающиеся основной или любой другой ветки.</strong></p>
  <p>Принято называть и использовать ветки вот так:</p>
  <ol>
    <li><strong>master </strong>- основная ветка, в которой как раз и выкатываются все стабильные релизы и доработанные фичи.</li>
    <li><strong>dev </strong>или <strong>development </strong>- ветка, в которой ведется основная работа и изменения - баг фиксы, добавление новых фич, исправление недочетов - которые в последствие перейдут в ветку <strong>master </strong>и выйдут в свет... или не выйдут. (для маленьких проектов можно делать баг фиксы и в <strong>master </strong>ветке, но тогда следует ставить теги* в местах релизов)</li>
    <li><strong>feature/***</strong> или <strong>dev/***</strong> - эти ветки исходят** из ветки <strong>dev</strong>. В них ведется работа над добавлением новый фич или больших баг фиксов, которые следует выделить в отдельную ветку.</li>
  </ol>
  <p>Для работы над новой фичей создадим новую ветку - <strong>dev</strong>. В диаграмме для удобства покрасим эту ветку в красный цвет. Вот так это будет выглядеть:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/41/418291b5-6d1f-4669-b5d5-2979060fcf3a.png" width="983" />
  </figure>
  <p>4) Теперь представим, что вы нашли критический баг в вашей программе, который надо срочно передать всем остальным веткам. Для этого используется так называемое действие <strong>merge*</strong></p>
  <p><strong>Merge или Слияние - это слияние коммитов веток. </strong></p>
  <p>Слияние идёт только в одну сторону. Это удобно, если нам надо перенести баг фиксы из <strong>master </strong>в <strong>dev </strong>не перенося фичу из <strong>dev </strong>в <strong>master</strong>.</p>
  <p>Вот так это будет выглядеть:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/34/343b419b-3ff6-4ecf-abda-99bc9f18d858.png" width="746" />
  </figure>
  <p>Теперь в ветке <strong>dev </strong>есть не только хот баг фикс, но и другие коммиты, предшествующие этому.</p>
  <hr />
  <p>На этом первая часть окончена, а в следующей мы поговорим о таких вещах как <strong>rebase </strong>как альтернатива <strong>merge</strong>, удаленные и локальные репозитории, а также работе в команде. Спасибо за внимание!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@capslock/BJ8h91TxE</guid><link>https://teletype.in/@capslock/BJ8h91TxE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><comments>https://teletype.in/@capslock/BJ8h91TxE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock#comments</comments><dc:creator>capslock</dc:creator><title>Работа с JSON. Часть 3.2. Введение в SimpleJSON.cs.</title><pubDate>Mon, 07 Jan 2019 15:52:06 GMT</pubDate><description><![CDATA[<img src="http://ezy-life.ru/wp-content/uploads/palec1.jpg"></img>В прошлом уроке никто ДЗ не сделал, хоть я и не удивлен (Это интернет! Кто здесь делает домашки?) так чо проверки не будет (Вот вам!) и я сразу перейду к проблемам Newtonsoft.json.]]></description><content:encoded><![CDATA[
  <p>В прошлом уроке никто ДЗ не сделал, хоть я и не удивлен (Это интернет! Кто здесь делает домашки?) так чо проверки не будет (Вот вам!) и я сразу перейду к проблемам Newtonsoft.json.</p>
  <figure class="m_column">
    <img src="http://ezy-life.ru/wp-content/uploads/palec1.jpg" width="580" />
  </figure>
  <h2>Проблемы и недостатки Newtonsoft.json</h2>
  <p>Данный пакет, конечно очень удобен, например для создания сохранений для игр, (Monogame!) ведь так вы сами создаёте нужные классы. Однако, если вы работаете с большим количеством данных, а нужных классов у вас нет и нет возможности (деньги, лень, количество разработчиков, чаще лень) сделать их, то зачем их делать? Да, через работу в экземпляром намного легче, но всё же. Для решения этой проблемы к нам приходит SimpleJSON.cs (он же есть и на Java и Python) который вместо создания экземпляра по шаблону просто создает словарь (<code>Dictionary</code>) с типом <code>JSONNode</code>. Для работы с ним (в особенности в нашем случае) очень удобен цикл <code>foreach</code>, который проходит по всем элементам массива или словаря. Делается это по следующей схеме:</p>
  <pre>string someJSON = &quot;{ \&quot;Name\&quot;:\&quot;Andrei\&quot;, \&quot;Gender\&quot;:\&quot;Male\&quot;, \&quot;Age\&quot;:23, \&quot;Hobbies\&quot;:[{ \&quot;Sports\&quot;: { \&quot;Tennis\&quot;:true, \&quot;Football\&quot;:false, \&quot;Basketball\&quot;:false }, \&quot;Design\&quot;:true, \&quot;Coding\&quot;: { \&quot;Freelance\&quot;:false, \&quot;Outsourcing\&quot;:true, \&quot;Opensourcing\&quot;:true }}]}&quot;;
var parsedData = JSON.parse(someJSON);
</pre>
  <p>Теперь мы имеем переменную <code>parsedData</code>, которая вышла парсингом JSON данных <code>someJSON</code>. Как вы заметили, в SimpleJSON JSON парсится методом <code>parse</code> класса <code>JSON</code>. Попробуем узнать, занимается ли наш мужчина фринансингом и выведем это в консоль. Это делается с помощью квадратных скобок, т.е. в скобках мы пишем &quot;путь&quot; к нашим данным. В нашем случае <strong>Hobbies -&gt; Coding -&gt; Freelance</strong>:</p>
  <pre>Console.WriteLine(parsedData[Hobbies][Coding][Freelance])
//В консоль будет выведено false
</pre>
  <p>Теперь будем использовать <code>foreach</code>. Попробуем вывести на экран какими видами спорта занимается наш мужчина, а какими нет:</p>
  <pre>var Name = parsedData[Name]
int i = 1;
foreach(JSONNode r in parsedData[Hobbies][Sports])
{
    switch i
    {
        case 1 { Sport = &quot;Tennis&quot;; break; }
        case 2 { Sport = &quot;Football&quot;; break; }
        case 3 { Sport = &quot;Basketball&quot;; break; }
    }
    string Tennis = $&quot;That&#x27;s {Name} is plays {Sport} is {r}&quot;;
    i++;
}

//В консоли будет следующее:
//That&#x27;s Andrei is plays Tennis is true
//That&#x27;s Andrei is plays Football is false
//That&#x27;s Andrei is plays Basketball is false
</pre>
  <p>Вы можете использовать это для создания бота Телеграмм, например. (намёк)</p>
  <hr />
  <p>И на этом всё! Спасибо за внимание и удачного дня. Кстати, если вы хотите ещё, то обязательно заходите на мой Телеграмм канал! <a href="http://t.me/cs_way" target="_blank">Тык!</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@capslock/ryn9t0ieN</guid><link>https://teletype.in/@capslock/ryn9t0ieN?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><comments>https://teletype.in/@capslock/ryn9t0ieN?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock#comments</comments><dc:creator>capslock</dc:creator><title>Работа с JSON. Часть 3.1. Парсинг в объект или в JSONNode.</title><pubDate>Sat, 22 Dec 2018 16:19:09 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/da/da0fc898-2912-465f-8ec2-197b33a2b9b6.png"></media:content><description><![CDATA[<img src="http://mgrab.ru/bitrix/templates/main/img/icons/1-parse.svg"></img>Здравствуйте! В этой части серии статей о работе с JSON на C# я поговорю о такой интересной теме как парсинг. Как раз из-за нее я и начал делать данную серию, чтобы не писать о JSON в курсе по созданию бота Телеграмм. Это, наверное, последняя часть трилогии статей о работе с JSON, так что давайте начнем.]]></description><content:encoded><![CDATA[
  <p>Здравствуйте! В этой части серии статей о работе с JSON на C# я поговорю о такой интересной теме как парсинг. Как раз из-за нее я и начал делать данную серию, чтобы не писать о JSON в курсе по созданию бота Телеграмм. Это, наверное, последняя часть трилогии статей о работе с JSON, так что давайте начнем.</p>
  <figure class="m_custom">
    <img src="http://mgrab.ru/bitrix/templates/main/img/icons/1-parse.svg" width="240" />
  </figure>
  <hr />
  <p><em>Примечание: Эта часть будет поделена на три части, чтобы иметь возможность обратной связи, так что каждая часть будет довольно короткой, но вместе они длиннее чем обычная длина одной статьи.</em></p>
  <h2>Введение</h2>
  <p>Парсинг. Интересное слово, не так ли? Но что оно означает? Парсинг - это принятое в информатике определение синтаксического анализа. Для этого создается математическая модель сравнения лексем с формальной грамматикой, описанная одним из языков программирования. (в нашем случае C#)</p>
  <p>Когда человек читает, то, с точки зрения науки филологии, он совершает синтаксический анализ, сравнивая увиденные на бумаге слова (лексемы) с теми, что есть в его словарном запасе (формальной грамматикой).</p>
  <p>Принято разделять процесс парсинга на эти этапы:</p>
  <ol>
    <li>выход в интернет, получение доступа к коду веб-ресурса и его скачивание;</li>
    <li>чтение, извлечение и обработка данных;</li>
    <li>представление извлеченных данных в удобоваримом виде (формате)</li>
  </ol>
  <figure class="m_custom">
    <img src="https://semantica.in/wp-content/uploads/2017/12/1-1.png" width="642" />
  </figure>
  <h2>Парсинг в объект класса</h2>
  <p>Ладно, ладно, давайте на минуточку отойдем от этих веберских словечек и вернемся к самому важному - к коду. Как я уже говорил, мы будем парсить двумя способами. Первый из них - парсинг в объект определенного класса. Тут самое сложное - составить правильный класс. Только не думайте &quot;Ой, всего лишь составить класс! Да это проще простого!&quot;. Нет. Это совсем не просто, особенно если у вас очень много данных. Но давайте по порядку...</p>
  <p>Ну, мы уже установили Newtonsoft.json в прошлой статье, так что останавливаться на этом не буду. Вот наш JSON в string переменной JsonData: (я его взял с первой части серии статей)</p>
  <pre>string JsonData = &quot;{ \&quot;Name\&quot;:\&quot;Andrei\&quot;, \&quot;Gender\&quot;:\&quot;Male\&quot;, \&quot;Age\&quot;:23, \&quot;Hobbies\&quot;:[{ \&quot;Sports\&quot;: { \&quot;Tennis\&quot;:true, \&quot;Football\&quot;:false, \&quot;Basketball\&quot;:false }, \&quot;Design\&quot;:true, \&quot;Coding\&quot;: { \&quot;Freelance\&quot;:false, \&quot;Outsourcing\&quot;:true, \&quot;Opensourcing\&quot;:true }}]}&quot;; //важно не забыть поставить слеши перед двойными кавычками, чтобы программа не посчитала их за окончание строки, но не сделайте частью строки реальные начало и конец строки
</pre>
  <p>Теперь чтобы спарсерить эту строку нам нужен подходящий класс. Помните предыдущую статью, где мы смотрели как показывать данные JSON в полях класса? Это нам сейчас понадобится как никогда. Но перед этим расскажу как сделать так, чтобы программа поняла, какие поля соответствуют тем же данным в JSON. Это делается конструкцией <code>[JsonProperty(*Имя переменной в строчном типе*)]</code> прямо предыдущей строчкой перед полем. (Отметьте, что нельзя расположить два или более таких конструкции &quot;штабелями&quot;, иначе <em>&quot;ошибка!&quot;</em>) Это выглядит примерно так:</p>
  <pre>[JsonProperty(&quot;name&quot;)]
public string Name { get; set; }
</pre>
  <p>Однако не подумайте, что иначе нельзя. Нет! Можно просто назвать поле также, как и в JSON-е, но это может быть неуместно, ведь в JSON можно называть переменные как хочешь, и если ты даже не получишь ошибку из-за пробела в названии поля, то точно получишь сообщение из-за несоответствия неймингу полей, так что если что, я вас не учил всегда так и делать, всегда есть другой путь, как есть тернарный оператор вместо if-else.</p>
  <p>Так, об этом я вам рассказал, теперь давайте дам вам меленькое задание: попробуйте сами составить правильный класс. Если чего-то непомните или вам нужен JSON в красивой печати, то идите в <a href="https://teletype.in/@capslock/rkGVjVHlE" target="_blank">первую</a> и <a href="https://teletype.in/@capslock/S1befOIlN" target="_blank">вторую</a> часть. Жду ваши ответы в комментариях и до новых встреч! Продолжение должно выйти уже совсем скоро.</p>
  <h2>Продолжение следует...</h2>
  <p>JSON will return in &quot;Work with JSON: part 3.2&quot;</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@capslock/rJFupc5gE</guid><link>https://teletype.in/@capslock/rJFupc5gE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><comments>https://teletype.in/@capslock/rJFupc5gE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock#comments</comments><dc:creator>capslock</dc:creator><title>Обзор игрового движка Godot Engine</title><pubDate>Fri, 21 Dec 2018 17:05:57 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/e5/e5c69d84-db87-405b-a21c-ff406ce82290.png"></media:content><category>Полезное</category><description><![CDATA[<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Godot_logo.svg/1200px-Godot_logo.svg.png"></img>Godot (произносится &quot;Годо&quot;, а не &quot;Гадот&quot; или &quot;Гоудот&quot;) - это, пожалуй, самый дружелюбный игровой движок, не считая конструкторы, типа Construct (classic, 2, 3) и BuildBox. Но чем же он настолько хорош? Давайте разбираться!]]></description><content:encoded><![CDATA[
  <p>Godot (произносится &quot;Годо&quot;, а не &quot;Гадот&quot; или &quot;Гоудот&quot;) - это, пожалуй, самый дружелюбный игровой движок, не считая конструкторы, типа Construct (classic, 2, 3) и BuildBox. Но чем же он настолько хорош? Давайте разбираться!</p>
  <figure class="m_column">
    <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Godot_logo.svg/1200px-Godot_logo.svg.png" width="1200" />
  </figure>
  <h2>История движка</h2>
  <p>История движка началась еще в далеком 2007 году, когда программисты Хуан Линетски и Ариель Манзур начали разработку движка. С самого начала движок был закрытым и использовался некоторыми компаниями. Однако в 2014 году разработчики приняли решение сделать их ПО открытым и выложили исходники на GitHub под именем GODOT ENGINE. После этого разработка движка перешла сообществу (Godot Engine Community) и продолжается до сих пор.</p>
  <figure class="m_column">
    <img src="https://fr.flossmanuals.net/godot-game-engine/about-this-book/static/booksprint-godot.png" width="1000" />
  </figure>
  <p>Также примечательно, что название «Godot» является прямой отсылкой к пьесе Сэмюеля Беккета «В ожидании Годо». Она характеризует непрекращающееся желание добавлять новые возможности в движок, что будет постоянно приближать его состояние к идеальному инструменту всё ближе и ближе, но этот процесс не остановится.</p>
  <h2>В чем особенность GODOT от конкурентов?</h2>
  <p>На самом деле этих отличий огромная масса, ведь сам движок создавался с нуля. Но я всё-таки отмечу самые главные отличия, от которых и отходят остальные:</p>
  <p><strong>АРХИТЕКТУРА ДВИЖКА.</strong> Архитектура движка основана на дереве наследуемых &quot;сцен&quot;. Каждый элемент сцены, в любой момент сам может стать полноценной сценой. Поэтому при разработке можно легко изменять полностью всю архитектуру проекта, расширять её элементы в любую сторону и работать с комплексными сценами на уровне простых абстракций.</p>
  <p><strong>РАБОТА С РЕСУРСАМИ ПРОЕКТА.</strong> Все игровые ресурсы, от скриптов до графических ассетов и игровых сцен, хранятся в папке проекта как обычные файлы, и не являются частью сложной базы данных проекта. Ресурсы, которые не представляют собой комплексных данных, хранятся в простых текстовых форматах (например, скрипты и сцены, в отличие от моделей и текстур). Эти решения позволяют значительно упростить разным командам разработчиков работу с системами управления версиями.</p>
  <p><strong>ВИЗУАЛИЗАЦИИ.</strong> Для многих важна графика. У Godot с этим всё в порядке. Графическая система для всех платформ построена на OpenGL ES 3.0. Рендеринг включает в себя технологии order-independent transparency, normal mapping, specularity. Также там используются такие полноэкранные постэффекты как FXAA, bloom, DOF, HDR, гамма-коррекции, distance fog, динамические тени на основе shadow maps и другие. Хочется сказать, что мне невероятно нравится освещение в Godot, я считаю оно тут божественно.</p>
  <p>Также стоит отметить, что для 2D в Godot используется отдельная графическая подсистема, которая независима от 3D, когда во всех популярных 3D движках всё 2D основано на 3D, что довольно сильно портит оптимизацию и само по себе большие костыли. (Вспомните историю Unity - с самого начала он был только 3D, но когда &quot;завезли&quot; 2D оно стало просто 3D текстурами с неперспективной камерой)</p>
  <figure class="m_column">
    <img src="https://i.ytimg.com/vi/UTAeDoRIHaA/maxresdefault.jpg" width="1280" />
  </figure>
  <h2>Язык программирования</h2>
  <p>Стоит отдельно остановиться на ЯП-ах. Для некоторых разработчиков это важная тема, ведь они не хотят уходить из своего любимого языка. Так какие языки есть в Godot? Сам движок был написан на C++ и на нем и писались игры, но через время в движок пришли еще несколько языков. Вот их список:</p>
  <ul>
    <li>C++ - движок был написан на нем, как и многие другие, как Unreal Engine, и отлично его поддерживает</li>
    <li>GDScript - этот язык это отдельный язык самого движка. Он схож с Python, но имеет несколько весомых отличий. Например, многим C# разработчикам сложно перейти на Python, ведь он имеет динамическую типизацию. Однако GDScript имеет строгую типизацию, как и C#, так что всё хорошо. Также там есть еще несколько изменений, которые тронули оптимизацию архитектуры и подстраивание языка под движок. (Но всё же не забывайте, что это питонообразный язык, которому свойственны некоторые качества, которые могут показаться неприятным глазу шарповца)</li>
    <li>C# - да, в Godot есть C# (тогда бы его у меня не было, а я делал бы уроки по Unity) но он работает только в версии с Mono, которую вы можете скачать на офф. сайте (сам Mono надо скачивать отдельно) Однако есть еще одна проблема, но о ней позднее.</li>
    <li>Visual Scripting - также Godot поддерживает визуальное программирование.</li>
  </ul>
  <h2>Обучающие материалы</h2>
  <p>К сожалению, по Godot очень мало обучающего контента. Однако из сносных на русском я могу выделить два: официальную документацию на русском и видеокурсы от SkanerSoft.</p>
  <p>Видеокурс от SkanerSoft довольно хорош, но и то там на GDScript, однако это единственный законченный курс</p>
  <p>Документация же ПОЧТИ закончена, но именно в разделе про C# очень много не переведенного материала. Что за расизм! (Зуб даю, это заговор JS-ников) Она переводится очень медленно, ведь всё лежит на сообществе на GitHub, это и объяснение, почему именно C# не переведен - он не так уж и популярен среди Godot Community.</p>
  <p>Также я нашел прикольный стартап, который делает профессиональные курсы по созданию игры на Godot, но не думаю, что платные курсы это то, чего вы ищите, тем более за эти деньги, но на всякий пожарный оставлю <a href="https://www.kickstarter.com/projects/gdquest/make-professional-2d-games-godot-engine-online-cou" target="_blank">ссылку</a> (кстати я оттуда и взял нижнюю картинку с кроликом и свиньей)</p>
  <p><em>(Ссылки на оба материала в самом конце обзора)</em></p>
  <figure class="m_column">
    <img src="https://i.ytimg.com/vi/S8exNI0rpLs/maxresdefault.jpg" width="1280" />
  </figure>
  <h2>Интерфейс редактора</h2>
  <p>Сразу скажу, что сижу на версии движка 3.0.0 потому что новая альфа версия 3.0.6 далеко не стабильна и сильно косячит! (ну, потому и альфа) Не советую никому, хоть она и имеет новые функции, просто подождите до нормальной, стабильной версии.</p>
  <p>Как я уже говорил, он просто шикарен по этому. Он расчитан на то, что там есть всё, чтобы создать свою игру. Это полная IDE. (Не считая программы для создания графики, спрайтов и музыкального сопровождения, конечно) Естественно, что вы можете использовать и сторонний редактор кода, например, Visual Studio или MonoDevelop. Единственное, что меня смущает это подлагивание программы во время работы и эта консоль! Не знаю почему, но она меня дико бесит! В начале я думал, что она исчезнет после запуска программы, но она никогда не уходит.</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/c1/c11dc448-71da-4907-b537-38fd3c4a0160.png" width="1919" />
  </figure>
  <h2>Общие впечатления</h2>
  <p>Для меня Godot был темной лошадкой только недавно, но теперь я вижу, почему его так много людей любят. Да, у него есть много недостатков. Даже очень много, я сказал бы. Однако он - это &quot;движок для первой игры&quot; и им останется навсегда. Godot - это не продвинутый движок с самыми новыми фишками, это не супер функциональный инструмент, это не способ забрать деньги с покупателя, это не движок для ААА игр... Это движок для первой игры! Он простой в освоении, с простым в освоении языком, (спасибо родственность с Python) а самое главное с дружественным лицом приветствующий новых &quot;игроделов&quot;. Всё это самое важное для самых важных людей - новичков. Именно для них был создан данный движок.</p>
  <figure class="m_column">
    <img src="https://ksr-ugc.imgix.net/assets/016/665/039/c42acd8fe3a800c92902e567e6e62560_original.png?ixlib=rb-1.1.0&crop=faces&w=1552&h=873&fit=crop&v=1494762583&auto=format&frame=1&q=92&s=dcd550dbcb6fd8dd2dd2500e6ad19de9" width="1552" />
  </figure>
  <h2>Конец</h2>
  <p>Надеюсь данный обзор вам понравился! Я попытался кратко обрисовать вам сам движок, чтобы вам было легче понять, нужен ли он именно вам. Я бы сказал, что он идеален для первой игры, но у него слишком мало учебных материалов и если выберите именно его, то точно не на C#. Если нужен именно C# то идите к Unity, но, как я уже говорил, GDScript очень даже хорош, тем более с строгой типизацией. (Python мечты, прям!)</p>
  <p><em>Источники: <a href="https://ru.wikipedia.org/wiki/Godot#%D0%9E%D0%B1%D0%B7%D0%BE%D1%80" target="_blank">Википедия</a>, <a href="https://www.youtube.com/channel/UCOTSosw_E-Cr88QkAb1Mdsg/videos" target="_blank">Курс SkanerSoft</a>, <a href="https://godotengine.org/" target="_blank">офф. сайт Godot (англ.)</a>, <a href="https://docs.godotengine.org/ru/latest/" target="_blank">офф. документация Godot (рус.)</a></em></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@capslock/Bk25MLKl4</guid><link>https://teletype.in/@capslock/Bk25MLKl4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><comments>https://teletype.in/@capslock/Bk25MLKl4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock#comments</comments><dc:creator>capslock</dc:creator><title>Курс по WinForms. Урок 4. Строка меню, изменение шрифта и открытие дочерних форм.</title><pubDate>Fri, 21 Dec 2018 08:55:12 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/fb/fbba334e-a86f-459e-a886-29e7a1a19cbb.png"></media:content><category>Курс Windows Forms</category><description><![CDATA[<img src="http://dkv.59209s011.edusite.ru/images/menubar_toolbar.gif"></img>Здравствуйте! Сегодня мы добавим нашему калькулятору строку меню, будем менять шрифт и открывать дочерние формы. Погнали!]]></description><content:encoded><![CDATA[
  <p>Здравствуйте! Сегодня мы добавим нашему калькулятору строку меню, будем менять шрифт и открывать дочерние формы. Погнали!</p>
  <figure class="m_custom">
    <img src="http://dkv.59209s011.edusite.ru/images/menubar_toolbar.gif" width="428" />
  </figure>
  <hr />
  <p>Строка меню - это та строка, которая расположена под строкой состояния (та, на которой есть кнопки &quot;свернуть&quot;, &quot;на весь экран&quot; и &quot;закрыть&quot;) Она есть не во всех программах, в основном в тех, где надо работать с файлами/данными и т.д.</p>
  <p>Мы же добавим в нашу строку две меню - изменение шрифта и открытие самодельного текстового редактора.</p>
  <h2>Строка меню как элемент WinForms</h2>
  <p>Строка меню - это тоже элемент, как и кнопка, текст и др., так что можем мы его можем найти в панели элементов.</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/a9/a905493a-b673-4648-b772-06163a6de455.png" width="405" />
  </figure>
  <p>Перетаскиваем его на нашу форму и видим, что какой-то элемент перешел в самый низ, а сверху программы появился белый прямоугольник. Это и есть наша строка меню. Нажимаем на нее видим надпись &quot;Вводить здесь&quot; и поле для ввода. Как вы и без меня поняли, тут мы вводим название элементов меню.</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/6d/6defbcba-64c0-4171-b143-0f7d1f24ca6f.png" width="468" />
  </figure>
  <p>Давайте назовем наш первый элемент - &quot;Настройки&quot;, т.е. там пользователь будет менять настройки нашего калькулятора. После этого снизу от элемента появляется раскрывающийся панель - это внутренние элементы наших &quot;настроек&quot;. Нажмите на стрелочку и в открывшийся меню мы видим четыре элемента: &quot;MenuItem&quot;, &quot;ComboBox&quot;, &quot;Seperator&quot; и &quot;TextBox&quot;. Каждый из элементов есть и в панели элементов (кроме &quot;Seperator&quot;) и вы, надеюсь, с ними уже знакомы. Если нет, то вот перечисление их функций:</p>
  <ul>
    <li>MenuItem - это просто элемент, если на который вы наведете, из него выйдет еще менюшка с такими же элементами.</li>
    <li>ComboBox (нет, это не коробка с &quot;к-к-к-комбо!&quot;) - это раскрывающиеся меню с несколькими вариантами выбора, в котором можно выбрать только один.</li>
    <li>Seperator - это просто перегородка или разделитель. Служит для разделения разных элементов. Удобен для разделения на категории.</li>
    <li>TextBox - просто ввод текста. Можно, например, вписывать имя, или другие данные.</li>
    <li>Label - в списке его нет, но чтобы его добавить надо вписать нужный текст в поле для ввода &quot;Вводить здесь&quot;.</li>
  </ul>
  <p>Просто введите текст &quot;Открыть настройки&quot; в поле для ввода &quot;Вводить здесь&quot;.</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/e5/e55ed29f-0b07-411f-8950-01d7383b1a8a.png" width="299" />
  </figure>
  <p>Далее выбираем наш Label и открываем меню событий. Находим событие Click и устанавливаем ему метод <code>SettingsOpen</code> и далее жмем ПКМ по проекту и выбираем <strong>Добавить... -&gt; Форма Windows</strong>. Называем новую форму &quot;Настройки.cs&quot; (да, я знаю, что лучше называть латиницей)</p>
  <h2>Дочерняя форма &quot;Настройки.cs&quot;</h2>
  <p>Теперь у нас есть вторая форма, но она не откроется, если ее не открыть. (да ладно) Чтобы это сделать надо зайти в наш метод <code>SettingsOpen</code> и создать в нем новый объект класса <code>Настройки</code> с именем <code>settings</code> (и зачем мы назвали его кириллицей???) и пишем метод <code>Show </code>объекта <code>settings</code>.</p>
  <pre>private void SettingsOpen(object sender, EventArgs e)
{
    Настройки settings = new Настройки();
    settings.Show();
}
</pre>
  <p>Метод Show объекта класса позволяет показать какой-либо элемент. Однако не забывайте, что теперь форма Настройки - это дочерняя форма формы Form1, т.е. если вы закроете родительскую форму (Form1 если еще не поняли) то закроется и дочерняя. Чуть позднее мы обсудим вариант как открыть вторую форму не делая ее дочерней.</p>
  <h2>Изменение шрифта через FontDialog</h2>
  <p>Теперь заходим в конструктор формы <code>Настройки.cs</code> и добавляем в него FontDialog и Button с текстом &quot;Выбрать шрифт&quot;. Задаем событию <code>Click</code> кнопки метод <code>FontSelected</code>. Теперь вписываем туда следующее:</p>
  <pre>private void FontSelected(object sender, EventArgs e)
{
    fontDialog1.ShowDialog(); //как вы можете заметить, класс fontDialog статичный и нам не требуется создавать объект
}
</pre>
  <figure class="m_custom">
    <img src="https://teletype.in/files/f2/f251b119-f2d3-4e3c-973b-a1a0b5658702.png" width="572" />
  </figure>
  <p>Вы можете заметить, что его нет на форме, а он появился снизу, как <code>MenuStrip</code>. Так появляются фоновые или сторонние элементы. В нашем случае, он сторонний, ведь он открывает <strong>системное окно выбора шрифта Windows</strong>.</p>
  <p>Нам надо выбрать шрифт калькулятора. Но <strong>как изменить сразу все элементы</strong>, ведь там их много? А вот так: в WinForms (и в WPF вроде бы тоже) если вы <strong>не устанавливаете свои значения</strong> определенным свойствам элементов формы, то они получают <strong>значения &quot;по умолчанию&quot;</strong>, а это &quot;по умолчанию&quot; - это <strong>значения формы</strong>. Шрифт в том числе.</p>
  <p>Однако, чтобы это сделать мы должны не менять значение шрифта по умолчанию (если значение изменено, то оно будет жирным). Но тут есть одна проблема - размер шрифта. К сожалению, если мы изменим хоть что-то, будь то размер шрифта или формат, весь шрифт будет показан как не по умолчанию и это вызывает некоторые проблемы, ведь мы сделали шрифт кнопок и первого операнда 15pt. У нас два варианта - либо сделать так, чтобы пользователь выбирал шрифт каждого элемента по отдельности, что будет долго и муторно как для разработчика, так и для пользователя, либо сделать кнопки и все другие элементы маленькими, что будет не особо красиво, если не сделать соответствующие правки. Я, пожалуй, сделаю кнопки маленькими.</p>
  <p>Так, теперь всё, что нам надо сделать - задать нужные значения форме. А делать мы это будем обращаясь к свойству формы Font:</p>
  <pre>private void FontSelected(object sender, EventArgs e)
{
    Form1 calculator = new Form1();
    fontDialog1.ShowDialog();
    calculator.Font = fontDialog1.Font;
}
</pre>
  <p>Заметьте, что у FontDialog нет шрифта, ведь сам элемент даже не видем и не имеет визуальных черт, а он лишь открывает сторонний диалог. Однако у него есть свойство Font, что у других элементов является шрифтом текста. Дело в том, что при вызове диалога шрифтов и выборе шрифта в нем FontDialog вставляет шрифт, который мы выбрали в свое свойство Font. У него также есть свойство <code>DialogResult</code>, но это только результат действия диалога, например, его отмена. (<code>DialogResult.Cancel</code>)</p>
  <h2>Конец</h2>
  <p>Фух, этот урок я делал долго и нашел довольно много информации для вас. Надеюсь, вам понравилось. Также, если вы еще не подписаны на мой телеграмм канал, подписывайтесь (<a href="http://t.me/cs_way" target="_blank">тык!</a>) До скорого и удачи!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@capslock/S1befOIlN</guid><link>https://teletype.in/@capslock/S1befOIlN?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock</link><comments>https://teletype.in/@capslock/S1befOIlN?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=capslock#comments</comments><dc:creator>capslock</dc:creator><title>Работа с JSON на C#. Часть 2. Хранение данных.</title><pubDate>Thu, 20 Dec 2018 11:54:34 GMT</pubDate><category>Шпаргалки</category><description><![CDATA[<img src="https://teletype.in/files/69/69f793ae-544a-40c8-9a00-a53c64dec141.png"></img>На прошлом уроке мы узнали что такое JSON, в чем его отличие от XML и разобрали его структуру. На этом уроке мы уже будем с ним работать. Пока что мы будем работать только с хранением данных в файле с форматом *.json. Будем хранить в нем данные человека. Погнали!]]></description><content:encoded><![CDATA[
  <p>На прошлом уроке мы узнали что такое JSON, в чем его отличие от XML и разобрали его структуру. На этом уроке мы уже будем с ним работать. Пока что мы будем работать только с хранением данных в файле с форматом <code>*.json</code>. Будем хранить в нем данные человека. Погнали!</p>
  <hr />
  <h2>Подготовка</h2>
  <p>Думаю создавать консольное приложение вы умеете, так что начну с установки библиотеки <strong>Newtonsoft.json</strong>. Нам нужен именно он, ведь для данной задачи он лучше всего подойдет, а делать свой велосипед никто не спешит.</p>
  <p>Заходим в проект и жмем <strong>ПКМ по проекту </strong>в <strong>обозревателе решений </strong>и выбираем &quot;<strong>Управление пакетами NuGet...</strong>&quot;. Там заходим во вкладку &quot;<strong>Обзор</strong>&quot; и находим пакет &quot;<strong>Newtonsoft.Json</strong>&quot; и потом устонавливаем его. Думаю с этим у вас проблемы не возникнут. (надеюсь)</p>
  <p>Далее нам понадобится одна библиотека. Она нужна для <strong>использования файлов</strong>, т.е. их <strong>чтения</strong>, <strong>записи </strong>и <strong>создания</strong>. Чтобы это сделать вы должны в самом начале файла <code>Program.cs</code> (там где много <code>using</code>) вписать следующее:</p>
  <pre>using System.IO;
</pre>
  <p>Так, проект мы подготовили, теперь приступаем.</p>
  <h2>Создание самих данных</h2>
  <p>Чтобы использовать JSON как хранитель данных сначала вам нужны эти самые данные. Но в каком виде их вписывать? В виде классов, конечно! Т.е. мы будем создавать класс, а его поля - это данные. Сейчас расскажу поподробнее.</p>
  <p>Как я уже говорил, в JSON есть три типа данных: переменные, массивы и объекты. Однако при вписывании этих данных у нас немного другие &quot;правила&quot;. (Но не беспокойтесь, наша библиотека Newtonsoft с этим справится) У наших классов есть эти типы: поля классов, массивы и объекты других классов. Они выглядят так:</p>
  <pre>    public class Person
    {
        //вот поля (в данном случае свойства, ведь мы любим сахарок!)
        public string Name { get; set; }
        public int Age { get; set; }
        //вот массивы переменных (в нашем случае массив класса String)
        public string[] Hobbies { get; set; }
        //а вот объекты др. классов
        public Baggage baggages { get; set; }
        public Pet pets { get; set; }
    }
</pre>
  <p>Как вы уже поняли, нам нужен классы <code>Baggage</code> и <code>Pet</code>:</p>
  <pre>    public class Baggage
    {
        public int Weight { get; set; }
        public string Type { get; set; }
    }

    public class Pet
    {
        public string WhatsAnimal { get; set; }
        public string Name { get; set; }
        public int Weight { get; set; }
    }
</pre>
  <p>Для преобразования объекта <code>Person</code> в JSON формат мы используем метод <code>SerializeObject</code> класса <code>JsonConvert</code>. Вот:</p>
  <pre>        static void Main(string[] args)
        {
            var myNeighbour = new Person
            {
                //просто вписываем значения полей как обычно
                Name = &quot;Sergey&quot;,
                Age = 38,
                //создаем новый массив string с множеством стоковых данных и вложим его в переменную Hobbies
                Hobbies = new string[] {&quot;Смотреть футбол&quot;, &quot;Идти на работу&quot;, &quot;Ссориться с женой&quot;},
                //создаем новый объектс класса Baggage/Pet со своими данными и вложим его в переменную baggages/pets
                baggages = new Baggage
                {
                    Weight = 17,
                    Type = &quot;Чемодан&quot;
                },
                pets = new Pet
                {
                    WhatsAnimal = &quot;Кошка&quot;,
                    Name = &quot;Киса&quot;,
                    Weight = 9
                }
            };
            string OurData = JsonConvert.SerializeObject(myNeighbour); //делаем из объекта myNeighbour строковые данные в формате JSON
            Console.WriteLine(OurData);
            Console.ReadKey();
        }
</pre>
  <p>Заметьте, что если вывести на экран <code>OurData</code>, который является JSON в строчном формате, мы увидим (барабанная дробь) все данные в одной строке. Это нормально! Однако некоторые парсеры (уже не помню какие) делают немного иначе - они вставляют <code>\n</code> и <code>\t</code> в нужных местах так, чтобы при выводе они были в &quot;красивой печати&quot; (канонизированном виде).</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/69/69f793ae-544a-40c8-9a00-a53c64dec141.png" width="1105" />
  </figure>
  <p><em>Вот что мы увидим, если запустим программу</em></p>
  <h2>Конец!</h2>
  <p>На этом всё! В следующей статье я покажу вам как преобразовать данные с JSON в класс с данными и JSONNode! (от SimpleJSON.cs) До скорого!</p>

]]></content:encoded></item></channel></rss>