<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Иван Игоревич Овчинников</title><subtitle>Программист из РКС, преподаватель из GB.</subtitle><author><name>Иван Игоревич Овчинников</name></author><id>https://teletype.in/atom/wayneshephard</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/wayneshephard?offset=0"></link><link rel="alternate" type="text/html" href="https://log.iovchinnikov.ru/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=wayneshephard"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/wayneshephard?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-30T12:50:01.505Z</updated><entry><id>wayneshephard:tau-ori-aur</id><link rel="alternate" type="text/html" href="https://log.iovchinnikov.ru/tau-ori-aur?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=wayneshephard"></link><title>Смотрим вверх. Опять.</title><published>2025-02-28T19:40:01.388Z</published><updated>2025-02-28T19:45:22.997Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/04/ce/04ce5c1e-3553-4f6e-a7e2-c278286ccfaa.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/99/3a/993ae860-4ae4-4243-b80a-d4fde51c00e3.jpeg&quot;&gt;В очередной раз увидел ясное небо.</summary><content type="html">
  &lt;figure id=&quot;QaGH&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/99/3a/993ae860-4ae4-4243-b80a-d4fde51c00e3.jpeg&quot; width=&quot;201.81611208406304&quot; /&gt;
    &lt;figcaption&gt;История, которая должна была собрать десяток лайков&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;sPRh&quot;&gt;В очередной раз увидел ясное небо. Начать стоит с ориентации. Не могу точно сказать, где сделан снимок, но давайте считать что по координатам 55.744908, 37.722085 в направлении азимут 180 (строго юг), 2025-02-27, примерно, в 20:20.&lt;/p&gt;
  &lt;figure id=&quot;y7bv&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/ce/e6/cee62a4d-bc6b-4bd2-86a2-0cdc61953dfa.png&quot; width=&quot;1707&quot; /&gt;
    &lt;figcaption&gt;Незначительно обрезанный оригинал&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7rmx&quot;&gt;Самый яркий объект на небе на этот момент находился в западном направлении на небосводе, и это Венера.&lt;/p&gt;
  &lt;h2 id=&quot;V7QW&quot;&gt;Планеты&lt;/h2&gt;
  &lt;p id=&quot;llev&quot;&gt;Их виднее всего, они ближе всего, про них мы знаем больше всего, их видно даже когда не видно звёзды.&lt;/p&gt;
  &lt;figure id=&quot;3go0&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/01/fb/01fb9953-7712-40b1-bb1b-c5d803377ac6.png&quot; width=&quot;373.9999999999999&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Jhkw&quot;&gt;Сегодня нашему вниманию Марс (1) и Юпитер (2). Упомянутая ранее Венера стоит особняком далеко справа, а также в наших широтах в этом сезоне (на пару часов раньше) можно наблюдать Сатурн. Во время съёмки был уже не только за городской застройкой, но и за горизонтом.&lt;/p&gt;
  &lt;h2 id=&quot;u6Cd&quot;&gt;Созвездия&lt;/h2&gt;
  &lt;p id=&quot;ngXx&quot;&gt;Их чаще всего легко узнать по характерному расположению звёзд. Я хочу начать именно с них, потому что именно наблюдая созвездия можно начать отличать одну голубую точку на небе от другой.&lt;/p&gt;
  &lt;h3 id=&quot;tAI5&quot;&gt;Зодиак&lt;/h3&gt;
  &lt;figure id=&quot;SANR&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2e/64/2e64233d-8dae-472b-b07d-ebe575b572ad.png&quot; width=&quot;265&quot; /&gt;
  &lt;/figure&gt;
  &lt;ol id=&quot;AaQr&quot;&gt;
    &lt;li id=&quot;bqD7&quot;&gt;Близнецы (лат. Gemini) — зодиакальное созвездие северного полушария неба, наиболее яркие звёзды — оранжевый Поллукс и белый Кастор.&lt;/li&gt;
    &lt;li id=&quot;DTIT&quot;&gt;Телец (лат. Taurus) — зодиакальное созвездие, лежащее между Близнецами и Овном, к северо-западу от Ориона. Наиболее яркие звёзды — Альдебаран, Нат, Альциона. В созвездии Тельца находятся рассеянные звёздные скопления: Гиады и Плеяды[1], а также Крабовидная туманность с пульсаром.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;7fJ1&quot;&gt;Не Зодиак&lt;/h3&gt;
  &lt;figure id=&quot;nPGb&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c3/7f/c37f77dd-1899-4e52-86bd-b7dafc677fe9.png&quot; width=&quot;264&quot; /&gt;
  &lt;/figure&gt;
  &lt;ol id=&quot;AY6A&quot;&gt;
    &lt;li id=&quot;5skX&quot;&gt;Возничий (лат. Auriga) — созвездие северного полушария неба. Самая яркая звезда — Капелла. Наиболее благоприятные условия видимости в декабре — январе. Видно на всей территории России. Согласно мифу, рассказанному Эратосфеном, под этим созвездием скрывается Эрихтоний, сын Вулкана и Земли, снискавший расположение Юпитера тем, что первый среди людей изобрёл лошадиную упряжь.&lt;/li&gt;
    &lt;li id=&quot;N700&quot;&gt;Орион (греч. Ὠρίων) — созвездие в области небесного экватора. Это одно из самых заметных и узнаваемых созвездий на ночном небе. Его самые яркие звезды — красная Бетельгейзе (альфа Ориона) и бело-голубой Ригель (бета Ориона). Названо в честь охотника Ориона из древнегреческой мифологии. Почти всегда можно узнать по характерным трём стоящим в ряд звёздам — поясу Ориона. В очень ясную погоду, невооружённым взглядом, под поясом Ориона можно наблюдать &amp;quot;более рассеянное, чем обычная звезда&amp;quot; свечение — это туманность Ориона.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2 id=&quot;x5fq&quot;&gt;Звёзды (в основном, из созвездий)&lt;/h2&gt;
  &lt;figure id=&quot;GrYR&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/33/cf3339ee-b29a-4781-a681-0738ae3790b4.png&quot; width=&quot;1707&quot; /&gt;
  &lt;/figure&gt;
  &lt;ol id=&quot;gl4G&quot;&gt;
    &lt;li id=&quot;VNpX&quot;&gt;Капелла (α Aur / Альфа Возничего) — самая яркая звезда в созвездии Возничего, шестая по яркости звезда на небосклоне и третья по яркости на небе Северного полушария. Капелла — жёлтый гигант. В рисунке созвездия Капелла расположена на плече Возничего. Она ближе к северному полюсу мира, чем любая другая звезда первой величины (Полярная звезда — только второй величины). &lt;/li&gt;
    &lt;li id=&quot;Iiaz&quot;&gt;Альдебаран (α Tau / Альфа Тельца) — ярчайшая звезда в созвездии Тельца и во всём Зодиаке, одна из ярчайших звёзд на ночном небе. Название произошло от арабского слова الدبران‎ (al-dabarān), означающего «последователь»: звезда на ночном небе совершает свой путь вслед за Плеядами.&lt;/li&gt;
    &lt;li id=&quot;MFfe&quot;&gt;Бетельгейзе (α Ori / Альфа Ориона) — яркая звезда в созвездии Ориона. Красный сверхгигант, полуправильная переменная звезда. Красный цвет звезды, легко заметный при наблюдениях невооружённым глазом. Минимальная светимость Бетельгейзе больше светимости Солнца в 80 тыс., а максимальная — в 105 тыс. раз. Это одна из крупнейших среди известных астрономам звёзд: если её поместить на место Солнца, то при минимальном предполагаемом размере она заполнила бы орбиту Марса, а при максимальном — достигала бы орбиты Юпитера.&lt;/li&gt;
    &lt;li id=&quot;jMa9&quot;&gt;Ригель (β Ori / Бета Ориона)— одна из ярчайших звёзд на небе, околоэкваториальная звезда. Бело-голубой сверхгигант. Название по-арабски значит «нога» (имеется в виду нога Ориона). Ригель находится на расстоянии примерно 860[1] световых лет от Солнца. Температура его поверхности 12 130 К, диаметр около 110 млн км (то есть в 79 раз больше Солнца), а абсолютная звёздная величина −7,92m; его светимость примерно в 120 000 раз выше солнечной.&lt;/li&gt;
    &lt;li id=&quot;sEVa&quot;&gt;Сириус (α Canis Majoris / Альфа Большого Пса) — звезда главной последовательности, спектрального класса A1. Ярчайшая звезда ночного неба; её светимость в 25 раз превышает светимость Солнца, при этом не является рекордной в мире звёзд — высокий видимый блеск Сириуса обусловлен его относительной близостью к Земле. Сириус виден из любого региона Земли, за исключением самых северных её областей. Находится на расстоянии 8,6 светового года от Солнечной системы и является одной из ближайших к Земле звёзд.&lt;/li&gt;
    &lt;li id=&quot;ia1B&quot;&gt;Процион (α Canis Minoris / Альфа Малого Пса) — самая яркая звезда в созвездии Малого Пса и 8-я по яркости звезда ночного неба. Одна из вершин Зимнего треугольника.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;8hIt&quot;&gt;Ну и Кастор с Поллуксом, составляющие, собственно, Близнецов.&lt;/p&gt;

</content></entry><entry><id>wayneshephard:astrology-for-kids-tau</id><link rel="alternate" type="text/html" href="https://log.iovchinnikov.ru/astrology-for-kids-tau?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=wayneshephard"></link><title>Звёздное небо</title><published>2024-02-13T20:48:14.299Z</published><updated>2024-02-13T20:48:14.299Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/db/e8/dbe8ca3f-8aa8-4115-a849-a1a77d273e65.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/ac/b7/acb74338-a3f2-42cc-8f16-12f3a984639f.png&quot;&gt;Видимые невооружённым взглядом звёзды на пригородном небосводе средней полосы, и как я их находил.</summary><content type="html">
  &lt;p id=&quot;1UaH&quot;&gt;21 января, будучи за городом, я решил заняться любимым делом — найти и сфотографировать на небе старого друга нашей семьи — планету Юпитер. Фото получилось на удивление хорошим и рядом с ним обнаружилось ещё несколько объектов ночного неба.&lt;/p&gt;
  &lt;figure id=&quot;CUTk&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ac/b7/acb74338-a3f2-42cc-8f16-12f3a984639f.png&quot; width=&quot;645&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;UI3f&quot;&gt;В тот вечер я обратил внимание на ещё один объект, но неверно понял, чем он является. Воодушевившись полученным качеством изображения я попробовал сфотографировать соседние (справа) объекты, благо там были уже знакомые мне Пояс Ориона и Бетельгейзе (Бетельге́йзе (α Ориона, α Ori) – яркая звезда в созвездии Ориона. Красный сверхгигант, полуправильная переменная звезда. Это одна из крупнейших среди известных астрономам звёзд: если её поместить на место Солнца, то при минимальном предполагаемом размере она заполнила бы орбиту Марса, а при максимальном — достигала бы орбиты Юпитера).&lt;/p&gt;
  &lt;figure id=&quot;Japs&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6a/fc/6afc6593-ee00-442d-aa87-cbab62c61725.png&quot; width=&quot;645&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bOLz&quot;&gt;Подумав немного о том, что вижу, я решил поискать Зодиак. Сориентировавшись по сторонам света понял, что над Юпитером горит Овен, и правда, если присмотреться, более-менее прямая спина к голове закручивается, как рога барана (Ове́н (лат. Aries) — зодиакальное созвездие. Три главные звезды — Хамаль («голова барана»), Шератан («след» или «знак») и Мезартим (соответственно α, β, и γ Овна) легко найти: лежат к югу от созвездия Треугольника. Звезда четвёртой величины Мезартим стала одной из первых двойных звёзд, открытых при помощи телескопа). Вероятнее всего, несколько тысячелетий назад, когда на небе было видно больше звёзд, созвездие было ещё более похожим. А раз уж это Овен, то слева — Телец, но его я визуально определил не сразу.&lt;/p&gt;
  &lt;figure id=&quot;V0gn&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fa/cc/facc9347-70d7-43f9-9fac-f99a5bddc6aa.png&quot; width=&quot;591.5&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vXDG&quot;&gt;Спустя несколько недель, выходя с работы, обнаружил над собой практически ясное небо, уже почти автоматически определил Юпитер, но моё внимание привлёк ещё один объект. Мне показалось странным, что видно только одну звезду, а значит, это должна быть очень яркая и известная звезда. Открыл онлайн справочник и обнаружил, что это ни что иное, как Альдебаран (α Tau / α Тельца / Альфа Тельца – ярчайшая звезда в созвездии Тельца и во всём Зодиаке, одна из ярчайших звёзд на ночном небе. Название произошло от арабского слова الدبران‎ (al-dabarān), означающего «последователь»: звезда на ночном небе совершает свой путь вслед за Плеядами). Знакомое название воодушевило почитать немного статей.&lt;/p&gt;
  &lt;figure id=&quot;If12&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a2/e6/a2e6b9fd-bc4c-4c43-ae88-ce44aecfb6bf.png&quot; width=&quot;644.5&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;r9Zc&quot;&gt;И, конечно же, закрепить эту информацию в сторис. Естественно, что не обошлось и без публикации некоторой справки для заинтересованных. Первый заинтересованный, конечно же, был я сам. Вообще, довольно интересно, как закрепляется в голове информация, которую не просто прочитал и повторил, но которой поделился. Но это, конечно же, тема для совсем другого поста))&lt;/p&gt;
  &lt;figure id=&quot;WiAc&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/34/17/3417bb4a-2f3f-4a5a-9749-d684b7aefd3b.png&quot; width=&quot;645&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;VYYU&quot;&gt;Стоп. Вы говорите «следует за Плеядами»? Тут то и произошёл пересмотр старых фотографий этой области неба. Оказывается, «фигня в Тельце» — это Плеяды, ближайшийшее к Земле звёздное скопление в созвездии, действительно, Тельца. Если фотографию приблизить, будет видно все семь ярчайших звёзд Плеяд и даже немного дымки от туманностей.&lt;/p&gt;
  &lt;figure id=&quot;LPkv&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c8/66/c8662b09-ae27-44a5-a04d-5cd8424febb1.png&quot; width=&quot;645&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;5YRi&quot;&gt;Таким образом, поворачивая голову западнее, становится понятно, что за Плеядами (Плея́ды (M 45, Семь Сестёр, Стожары) — рассеянное звёздное скопление и астеризм в созвездии Тельца. Это скопление — одно из ближайших к Земле и одно из наиболее ярких звёздных скоплений. Плеяды известны с древних времён и видны невооружённым глазом даже на городском небе) и правда следует Альдебаран.&lt;/p&gt;
  &lt;figure id=&quot;m68K&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/09/d1/09d19557-f712-4980-a7fc-8af39543b10c.png&quot; width=&quot;1290&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>wayneshephard:quick-dirty-hack</id><link rel="alternate" type="text/html" href="https://log.iovchinnikov.ru/quick-dirty-hack?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=wayneshephard"></link><title>Как заставить командную строку винды выполнять линукс команды?</title><published>2021-05-13T19:39:33.111Z</published><updated>2021-05-13T19:39:33.111Z</updated><summary type="html">Пролог: Спасибо моим студентам, которые не хотят изучать возможности Windows, а хотят делать &quot;как у преподавателя на вебинаре в MacOSX&quot;, невзирая на разницу архитектур, идеологий, инструментария и многого другого.</summary><content type="html">
  &lt;p&gt;Пролог: Спасибо моим студентам, которые не хотят изучать возможности Windows, а хотят делать &amp;quot;как у преподавателя на вебинаре в MacOSX&amp;quot;, невзирая на разницу архитектур, идеологий, инструментария и многого другого.&lt;/p&gt;
  &lt;p&gt;Так вышло, что по работе вынужден переключаться между разными операционными системами (ОС). Хоть на рабочем месте и установлена Windows, часто вынужден работать с серверами под управлением Debian или CentOS, да и дома из компьютерной техники только старый макбук. Поэтому часто попадаю в ситуацию, когда бессознательно начинаю набирать линукс/мак команды внутри командной строки виндоуза. К работе в терминале довольно быстро привыкаешь, и некоторые действия правда проще выполнить в терминале, чем в графическом интерфейсе. Но вот незадача, терминалы разных ОС значительно отличаются. Поэтому мы начинаем изобретать способы единообразной работы на разных рабочих местах. Особенно сильно раздражает то, что для одних и тех же действий нужно писать разные команды. Небольшой шажок в сторону поддержки единообразия сделал Window PowerShell, но он не очень удобен в ежедневном использовании, хоть и является мощным инструментом управления виндоуз-машин. У меня появилось навязчивое желание иметь в командной строке windows возможность выполнять команды из линукса. Кто-то пришёл к MSYS, кто-то пробует WSL, кому-то хочется пробовать Babun, но очень многие открыли для себя Git bash, о нём я и хотел бы поговорить.&lt;/p&gt;
  &lt;p&gt;Git широко известен в узких кругах как система контроля версий, используется в разного рода разработках, почти повсеместно. Поэтому с большой долей вероятности git установлен на компьютере подавляющего большинства разработчиков. И это хорошо, но нам сейчас важно не это, а нам важны те приложения, которые попадают на компьютер пользователя в процессе установки git для windows. Я о git bash и всём, что к нему прилагается, а прилагается немало. Внимательный пользователь git bash мог обратить внимание, что внутри git bash благополучно работают привычные линукс-пользователям команды навигации и, например, создания файлов (а также cat, ping, echo, и многие другие). Это уже почти хорошо, но цель не достигнута, мы не открываем командную строку ОС, а вынуждены запускать стороннюю утилиту, которая очень сильно похожа на терминал. Начинаем наши раскопки. Зная о том, что любая команда терминала или командной строки - это утилита (программа) мы можем сделать вывод о том, что с установкой git bash в нашу ОС каким-то образом установились и эти программы. Недолго побродив по папке, которую мы указали при установке обнаруживаем, что внутри, по пути &amp;#x60;&amp;lt;папка-установки-git&amp;gt;/usr/bin&amp;#x60; благополучно лежат исполняемые файлы с очень похожими названиями: mv, mkdir, rm, ls, cp, cat, ping, echo и расширением &amp;#x60;.exe&amp;#x60;. Не хватает только одного: сделать так, чтобы windows &amp;quot;видел&amp;quot; эти утилиты отовсюду, и в первую очередь из командной строки. А сделать это можно слегка поправив системную переменную PATH. Идём в Мой компьютер - свойства - дополнительные - переменные среды - системные, добавляем к переменной PATH уже известный нам путь &amp;#x60;&amp;lt;папка-установки-git&amp;gt;/usr/bin&amp;#x60;, перезакпускаем ОС и...&lt;/p&gt;
  &lt;p&gt;Эпилог: В конце девяностых - начале двухтысячных, когда программирование ещё не было так популярно, и компьютеры ещё не вышли на тот уровень производительности, который мы видим сейчас, для определения людей, способных &amp;quot;давать указания компьютерам&amp;quot; был принят термин хакер. С развитием информационных технологий понятие хакерства значительно расширилось и приобрело негативный подтекст, указывая на злоумышленников, мошенников. Но идеология хакерства осталась прежней - использовать существующие механизмы (иногда изъяны в существующих механизмах) себе на пользу. Искать альтернативные, необычные пути решения повседневных проблем. Описанная выше ситуация - ни что иное, как хак. Не самый сложный, и совершенно точно не приносящий никакой выгоды. С другой стороны и вреда тоже не приносящий, что в нынешней жизни уже неплохо.&lt;br /&gt;&lt;/p&gt;

</content></entry><entry><id>wayneshephard:tic-tac-toe-hint</id><link rel="alternate" type="text/html" href="https://log.iovchinnikov.ru/tic-tac-toe-hint?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=wayneshephard"></link><title>Эти сложные крестики-нолики</title><published>2020-11-29T20:45:29.406Z</published><updated>2020-11-29T21:12:22.278Z</updated><summary type="html">Аннотация</summary><content type="html">
  &lt;h1&gt;Или как проверить победу в десять строк&lt;/h1&gt;
  &lt;p&gt;&lt;strong&gt;Аннотация&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Каждый раз, преподавая первый уровень основ Java Core я сталкиваюсь с одной и той же проблемой: невозможно на третьем уроке написать логику проверки победы крестика (или нолика), используя только изученные инструменты. Это не совсем верно. И однажды у меня хватило красноречия объяснить логику происходящего одному из студентов, поэтому приведу часть нашей беседы, чтобы другим тоже стало немножко понятнее. И, да, тут используются только те инструменты, которые были изучены на первых двух уроках (переменные, массивы, циклы и условия).&lt;/p&gt;
  &lt;p&gt;Действующие лица: студент(С) и преподаватель(П).&lt;/p&gt;
  &lt;h3&gt;Пролог:&lt;/h3&gt;
  &lt;p&gt;С: Доброе утро! Чувствую, что без Вас мне крестики-нолики не сдадутся... буду рассуждать вслух…&lt;/p&gt;
  &lt;p&gt;П: Доброе.&lt;/p&gt;
  &lt;p&gt;С: Итак…. нужно сделать проверку одной линии, одна линия состоит из 3 клеточек (но может варьироваться), нужно проверить каждую из них....&lt;/p&gt;
  &lt;p&gt;П: Давайте без кода пока что. Что мы делаем в жизни, когда хотим проверить линию?&lt;/p&gt;
  &lt;p&gt;С: Смотрим что там… Сравниваем свой знак со знаками, которые находятся в соседних клеточках&lt;/p&gt;
  &lt;p&gt;П: Мы же не можем посмотреть &amp;quot;всю линию целиком сразу&amp;quot;, если она, например, длиной в сто символов, физически, глазами, на реальном бумажном поле&lt;/p&gt;
  &lt;p&gt;С: Ну нет... у нас есть условие, что 3 клеточки соседние дают выигрыш… значит смотрим только соседние 3....&lt;/p&gt;
  &lt;p&gt;П: Сразу подумаем чуть вперёд, выигрышная длина может быть не 3 клеточки, и поставить выигрышный крестик мы можем не только в самую середину последовательности. Поэтому надо немного универсализировать. Давайте думать про сто крестиков подряд для победы... для трёх алгоритм будет такой же.&lt;/p&gt;
  &lt;p&gt;С: Если у нас сто клеточек и нам надо знать сколько клеточек дадут выигрыш... Ставим крестик и проверяем вправо и влево есть ли там крестики так чтобы набралась выигрышное количество....&lt;/p&gt;
  &lt;p&gt;П: Сто и дадут. Сто крестиков подряд для победы. Поле тысяча на тысячу)&lt;/p&gt;
  &lt;p&gt;С: Тогда надо чтобы посчиталось количество крестиков в соседних клеточках...&lt;/p&gt;
  &lt;p&gt;П: А если последний, выигрышный, поставился на самый край последовательности, и с одной из сторон у него ничего нет?&lt;/p&gt;
  &lt;p&gt;С: Надо в обе стороны считать...&lt;/p&gt;
  &lt;p&gt;П: То есть стоп, погодите, Вы хотите сказать, что поставив сотый крестик, вы глазами пойдёте считать в обе стороны от него? Запомните где его поставили, посчитаете в одну сторону, потом от крестика пойдёте в другую, и сложите?&lt;/p&gt;
  &lt;p&gt;С: Нет, игра должна посчитать....&lt;/p&gt;
  &lt;p&gt;П: Мы не говорим об игре) мы говорим о крестиках-ноликах на бумаге, об алгоритме, который Вы используете у себя в голове)&lt;/p&gt;
  &lt;p&gt;С: Если там ряд крестиков, без ноликов, тогда ясно что ход правильный, но как посчитать их количество не считая в уме?&lt;/p&gt;
  &lt;p&gt;П: Почему не считая в уме-то? Как раз про подсчёт в уме мне и интересно. Мы же программируем, то есть говорим компьютеру, что делать, а самый простой способ - повторить то, что у нас в голове, поэтому я и хочу для начала выудить у Вас информацию о том, что именно находится у Вас в голове)))&lt;/p&gt;
  &lt;p&gt;С: Тогда получается, что надо посчитать каждый крестик до ближайшего нолика...&lt;/p&gt;
  &lt;p&gt;П: Итак) как мы считаем в уме сто крестиков подряд?&lt;/p&gt;
  &lt;p&gt;С: Я бы взяла карандаш и каждый посчитала тыкая в него, чтобы не сбиться...&lt;/p&gt;
  &lt;p&gt;П: Вот! И это абсолютно логичное поведение, теперь давайте скажем программе, что ей надо тоже так сделать.&lt;/p&gt;
  &lt;p&gt;С: Ей надо пройти по строке, проверить и посчитать количество символов....&lt;/p&gt;
  &lt;p&gt;П: Дадим ей (программе) в руки (в код) карандаш (цикл) и заставим посчитать подряд все клетки на какой нибудь горизонтали, на предмет наличия там трёх, к примеру, крестиков&lt;/p&gt;
  &lt;p&gt;С: Ей нужно условие... если она видит 3 клетки подяд с крестиками, тогда комбинация выигрышная....&lt;/p&gt;
  &lt;p&gt;П: Да, то есть она идёт по клеткам. если вдруг видит не крест - говорит «всё плохо», а если досчитала до сотого креста - говорит, что всё хорошо&lt;/p&gt;
  &lt;p&gt;С: Я не знаю, как записать в &lt;strong&gt;&lt;code&gt;if&lt;/code&gt;&lt;/strong&gt;, что количество должно равняться переменной &lt;strong&gt;&lt;code&gt;winLength&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;П: Бежать циклом до этого количества? Пока что - проверяем линию. одну&lt;/p&gt;
  &lt;p&gt;С: Ставим крестик и считаем - есть рядом крест +1, еще есть - еще +1, вместе с моим крестом будет три, а это выигрыш! Что если &lt;strong&gt;&lt;code&gt;do (+1) while&lt;/code&gt;&lt;/strong&gt; не достигнет 3 клеток?&lt;/p&gt;
  &lt;p&gt;П: Это и есть цикл &lt;strong&gt;&lt;code&gt;for&lt;/code&gt;&lt;/strong&gt;, Просто внутри него надо подумать получше. Если дошли до конца &lt;strong&gt;&lt;code&gt;for&lt;/code&gt;&lt;/strong&gt; - это выигрыш, то есть после &lt;strong&gt;&lt;code&gt;for&lt;/code&gt;&lt;/strong&gt; мы возвращаем &lt;strong&gt;&lt;code&gt;true&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;С: &lt;em&gt;&amp;lt;здесь некоторые творческие муки&amp;gt;&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;П: Вернулись к карандашику и бумажке. Как Вы понимаете, что не получилось сложить из крестиков линию нужного размера?&lt;/p&gt;
  &lt;p&gt;С: Когда посчитала все 100 крестиков и среди них нет нолика&lt;/p&gt;
  &lt;p&gt;П: То есть Вы всегда строго считаете до ста крестиков, и встретив где то на середине нолик перестаёте считать?&lt;/p&gt;
  &lt;p&gt;С: Перестаю&lt;/p&gt;
  &lt;p&gt;П: Давайте программе тоже скажем переставать. Должно получиться «иди по линии, если встретила не крестик - скажи что не получилось, если же дошла до конца линии - скажи что линия собралась». жду код проверки одной линии)&lt;/p&gt;
  &lt;p&gt;С: &lt;em&gt;&amp;lt;здесь некоторые творческие муки&amp;gt;&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;П: Вы уже достаточно в отчаянии, чтобы я дал правильный ответ?&lt;/p&gt;
  &lt;p&gt;С: Давайте…&lt;/p&gt;
  &lt;h3&gt;Основное действие:&lt;/h3&gt;
  &lt;p&gt;П: Возвращаемся к самому началу: что мы тут делать должны? Проверять одну линию, так? Цикл идущий до 3 нас устраивает, потому что это выигрышная длина. Внутри цикла мы перебираем каждый символ на нашем пути, и это тоже верно, значит после цикла, если мы нигде не вывалились, нам надо вернуть тру&lt;/p&gt;
  &lt;pre&gt;private boolean checkLine(winLen) {
    fori (&amp;lt; winlen) {
    }
    return true;
}&lt;/pre&gt;
  &lt;p&gt;Пока что, получилось вот так. Теперь думаем что у нас внутри цикла, по каждой клеточке? И приходим к выводу, что если мы встретили не крестик, то надо сказать - линия не удалась&lt;/p&gt;
  &lt;pre&gt;private boolean checkLine(sym, winLen) {
    for (i = 0; i &amp;lt; winlen; i++) {
        if (field[0][i] != sym) 
            return false;
    }
    return true;
}&lt;/pre&gt;
  &lt;p&gt;Получается так, да? Это мы научились проверять горизонталь, одну, которая на 0-й координате по игреку лежит. Теперь расширим нашу проверку линии чтобы она умела ещё и вертикальные, например, проверять… Получается, что нам надо вводить понятие &amp;quot;куда считать&amp;quot;. так?&lt;/p&gt;
  &lt;p&gt;С: четыре стороны...&lt;/p&gt;
  &lt;p&gt;П: верно&lt;/p&gt;
  &lt;pre&gt;private boolean checkLine(sym, winLen, shiftY, shiftX) {
    for (i = 0; i &amp;lt; winlen; i++) {
        if (field[i][i] != sym)
            return false;
        }
        return true;
    }
}&lt;/pre&gt;
  &lt;p&gt;Получается так. мы считаем &lt;strong&gt;i&lt;/strong&gt;, и надо как-то к нему применить значение - в какую сторону идти... снаружи, вызов будет туда передавать например (по &lt;strong&gt;y&lt;/strong&gt; не смещаемся, то есть &lt;strong&gt;* 0&lt;/strong&gt;, по &lt;strong&gt;х&lt;/strong&gt; смещаемся, то есть &lt;strong&gt;* 1&lt;/strong&gt;, или по &lt;strong&gt;у&lt;/strong&gt; смещаемся не вниз, а в обратную сторону, то есть &lt;strong&gt;* -1&lt;/strong&gt;). Думаем, как в получившийся цикл вложить &lt;strong&gt;&lt;code&gt;shiftX&lt;/code&gt;&lt;/strong&gt; и &lt;strong&gt;&lt;code&gt;shiftY&lt;/code&gt;&lt;/strong&gt;, и там будет &lt;strong&gt;&lt;code&gt;if (field[i * shiftY][i * shiftX] != sym) return false;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;В разные (любые, в двухмерной системе координат) стороны гулять по одной линии научились, теперь надо подумать о том, что проверка может начинаться не только в координате &lt;strong&gt;0,0&lt;/strong&gt; а в любой другой клетке, поэтому у нас добавляется понятие &amp;quot;точка старта проверки&amp;quot;, верно?&lt;/p&gt;
  &lt;p&gt;С: Да, которая будет считываться с того места в которое поставили символ...&lt;/p&gt;
  &lt;p&gt;П: Не обязательно. Если начинаем проверку от последнего поставленного символа - сразу становится сложнее, потому что считать надо в 8 сторон, да ещё и учитывать, не был ли последний &lt;strong&gt;Х&lt;/strong&gt; в середине линии, поэтому я сразу в условии задачи и сказал, что проверку надо осуществлять только в 4 стороны, но из &lt;em&gt;КАЖДОЙ&lt;/em&gt; клетки поля. Получили сигнатуру проверки линии. из каких координат, какой символ, в каком направлении смотрим&lt;/p&gt;
  &lt;pre&gt;private boolean checkLine(x, y, sym, winLen, shiftY, shiftX)&lt;/pre&gt;
  &lt;p&gt;И отсюда получается, что вот сюда эти координаты и положили&lt;/p&gt;
  &lt;pre&gt;if (field[y + i * shiftY][x + i * shiftX] != sym) return false;&lt;/pre&gt;
  &lt;p&gt;Таким образом метод проверки одной линии у нас готов. Остаётся только запустить этот метод для каждой клетки поля, во всех 4-х нужных направлениях, предварительно проверив, не выйдет ли проверка (выигрышная длина) за пределы этого самого поля (&lt;code&gt;fieldSizeX, fieldSizeY&lt;/code&gt;)&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Эпилог:&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;С: Это очень сложно для меня сейчас... у меня впечатление, что эту игру ставят в начале курса как проверку на крепость мотивации изучать программирование…&lt;/p&gt;
  &lt;p&gt;П: На самом деле это задание дано только лишь для того, чтобы проверить, насколько детально Вы можете рассуждать. Для новичка очень сложно реально осознать, что 80% программирования происходит не в IDEA или другом редакторе кода, а в анализе проблемы, составлении алгоритма, формулировании решения&lt;/p&gt;
  &lt;p&gt;С: Вот детальность рассуждения наверное самое трудное, мы многое делаем на автомате, не задумываясь почему и зачем... даже не выделяя это в своем внимании...&lt;/p&gt;
  &lt;p&gt;П: А программе такие вещи надо объяснять, она же ничего не умеет, и опыта игры в крестики-нолики у неё нет&lt;/p&gt;
  &lt;p&gt;С: Ну, да. Спасибо вам большое!&lt;/p&gt;
  &lt;p&gt;П: Не за что.&lt;/p&gt;

</content></entry><entry><id>wayneshephard:fifteen-steps-to-git</id><link rel="alternate" type="text/html" href="https://log.iovchinnikov.ru/fifteen-steps-to-git?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=wayneshephard"></link><title>От пустого места до пулл-реквеста</title><published>2020-11-29T08:53:10.996Z</published><updated>2020-11-29T08:53:10.996Z</updated><summary type="html">Эта публикация была написана для всех тех, кто никак не может справиться с &quot;этим сложным гитом&quot; и/или не понимает, зачем он нужен, почему это удобно, и как это работает. Ориентирован данный материал будет на пользователей продуктов JetBrains, в частности, IntelliJ продуктов, а именно, IDEA. И это не реклама.</summary><content type="html">
  &lt;h1&gt;Или пятнадцать простых шагов в гит&lt;/h1&gt;
  &lt;p&gt;Эта публикация была написана для всех тех, кто никак не может справиться с &amp;quot;этим сложным гитом&amp;quot; и/или не понимает, зачем он нужен, почему это удобно, и как это работает. Ориентирован данный материал будет на пользователей продуктов &lt;a href=&quot;https://www.jetbrains.com/&quot; target=&quot;_blank&quot;&gt;JetBrains&lt;/a&gt;, в частности, &lt;a href=&quot;https://www.jetbrains.com/products.html#type=ide&quot; target=&quot;_blank&quot;&gt;IntelliJ продуктов, а именно, IDEA&lt;/a&gt;. И это не реклама.&lt;/p&gt;
  &lt;p&gt;&amp;quot;Гит это обло, озорно, огромно, стозевно и лаяй&amp;quot; (С) Радищев и все студенты.&lt;/p&gt;
  &lt;p&gt;По гит существуют тысячи статей, обучающих видео и прочего. Чего только стоит &lt;a href=&quot;https://gitlab.com/ivan-igorevich/lazy-git-manual&quot; target=&quot;_blank&quot;&gt;краш-методичка по пулл реквестам&lt;/a&gt; написанная мной для устраивающихся на работу в мою группу программистов. Но ни в одной из этих статей нет чёткого алгоритма: делай раз, делай два, делай три, чтобы не вникать в сложный инструментарий, идеологию гит и прочие тонкости. Дальнейшие действия предполагают наличие установленного на устройстве Git &lt;a href=&quot;http://git-scm.com/&quot; target=&quot;_blank&quot;&gt;отсюда&lt;/a&gt;.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;Создаём пустой проект. С этого всегда всё начинается.&lt;/li&gt;
    &lt;li&gt;Ищем пункт меню &lt;strong&gt;VCS&lt;/strong&gt; - &lt;strong&gt;Import into Version Control&lt;/strong&gt; - &lt;strong&gt;Create Git repository&lt;/strong&gt;.&lt;/li&gt;
    &lt;li&gt;Создаём новый гит репозиторий в той папке, в которой только что создали новый проект. Среда разработки немножко подумает и окрасит файлы Вашего проекта (список слева) в красный цвет.&lt;/li&gt;
    &lt;li&gt;Самый сложный пункт. IDEA почему то создаёт файл &lt;code&gt;.gitignore&lt;/code&gt;не в корневом каталоге, который Вы указали, а в папке &lt;code&gt;.idea&lt;/code&gt;сакральный смысл этого действия нам не дано понять, поэтому просто поправим согласно наших нужд. Файл &lt;code&gt;.gitignore&lt;/code&gt; должен лежать в корневой папке только что созданного проекта. Это важно, без этого не продолжаем.&lt;/li&gt;
    &lt;li&gt;Внутри самого файла &lt;code&gt;.gitignore&lt;/code&gt; должны лежать следующие строки:&lt;br /&gt;&lt;code&gt;.idea/&lt;br /&gt;out/&lt;br /&gt;*.iml&lt;br /&gt;&lt;/code&gt;То есть мы говорим гиту, что нам эти файлы и папки в наших коммитах не нужны, полезной информации они не несут. В списке слева они должны будут окраситься в условно-жёлтый цвет.&lt;/li&gt;
    &lt;li&gt;Мы подготовили репозиторий к версионированию, пришло время сделать первый коммит. Коммит - это фиксация изменений, которые мы внесли. нам нужно зафиксировать наш файл &lt;code&gt;.gitignore&lt;/code&gt; в созданном проекте. Для этого идём в меню &lt;strong&gt;VCS&lt;/strong&gt; и нажимаем &lt;strong&gt;Commit&lt;/strong&gt; (обратите внимание, что напротив слова Commit есть клавиатурное сокращение для быстрого доступа к команде, им можно пользоваться)&lt;/li&gt;
    &lt;li&gt;В появившемся окне выбираем в списке &lt;strong&gt;Unversioned files&lt;/strong&gt; наш файл &lt;code&gt;.gitignore&lt;/code&gt; вводим &lt;strong&gt;Commit Message&lt;/strong&gt; (что-то вроде дополнительного комментария о фиксируемых изменениях, например &amp;quot;добавлен файл gitignore&amp;quot;), и радостно нажимаем кнопку &lt;strong&gt;Commit&lt;/strong&gt;.&lt;/li&gt;
    &lt;li&gt;Переходим в хостинг репозиториев, например, &lt;strong&gt;GitHub&lt;/strong&gt;, и создаём там репозиторий (не путать с локальным репозиторием из пунктов 2-6). Важно создать пустой репозиторий, &lt;em&gt;не выбрав&lt;/em&gt; (даже случайно) галочку &amp;quot;Initialize with readme&amp;quot; или подобную. На &lt;strong&gt;GitHub&amp;#x27;e&lt;/strong&gt; мы будем хранить наш репозиторий и демонстрировать его миру.&lt;/li&gt;
    &lt;li&gt;На странице созданного на &lt;strong&gt;GitHub&amp;#x27;e&lt;/strong&gt; репозитория мы видим много вариантов того, как подключить его к локальному. Мы будем использовать вариант &lt;strong&gt;push an existing repository&lt;/strong&gt;. Нам понадобится ссылка на наш репозиторий из этого пункта, она оканчивается на &lt;strong&gt;.git&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;В &lt;strong&gt;IDEA&lt;/strong&gt; идём в меню &lt;strong&gt;VSC&lt;/strong&gt; - &lt;strong&gt;Git&lt;/strong&gt; - &lt;strong&gt;Remotes&lt;/strong&gt; - &lt;strong&gt;Add&lt;/strong&gt; (или значок плюса) и вставляем туда только что взятую с &lt;strong&gt;GitHub&lt;/strong&gt;&amp;#x27;a ссылку.&lt;/li&gt;
    &lt;li&gt;Отправляем изменения в &lt;strong&gt;GitHub. &lt;/strong&gt;Для этого нам нужно выполнить команду &lt;strong&gt;Push. &lt;/strong&gt;Найти её можно в меню &lt;strong&gt;VCS&lt;/strong&gt; - &lt;strong&gt;Git&lt;/strong&gt; - &lt;strong&gt;Push&lt;/strong&gt;.&lt;/li&gt;
    &lt;li&gt;Мы подготовили репозиторий к дальнейшим изменениям. &lt;em&gt;Для каждого изменения (добавления функционала приложения, выполненного задания, закрытой задачи) нужно будет повторять действия, начиная с этого пункта.&lt;/em&gt; Создаём ветку от последнего коммита ветки &lt;strong&gt;master&lt;/strong&gt;. Внутри этой ветки мы будем делать всю нашу текущую работу. Название этой ветки не имеет принципиального значения, но будет хорошо, если название будет отражать суть того, что планируется разработать в этой ветке.&lt;/li&gt;
    &lt;li&gt;Пишем функционал (задание, задачу). Добавляем классы и методы, проверяем работоспособность и делаем прочие полезные вещи. По мере написания - можно, и нужно делать промежуточные коммиты, говорящие о проделанной работе. По окончании работы - обязательно делаем коммит.&lt;/li&gt;
    &lt;li&gt;Закончив работу над задачей (заданием, функцией) мы можем &amp;quot;запушить ветку в ремоут&amp;quot;. Проще говоря, отправить все изменения на &lt;strong&gt;GitHub&lt;/strong&gt;. Мы уже делали это для ветки &lt;strong&gt;master &lt;/strong&gt;в одиннадцатом пункте.&lt;/li&gt;
    &lt;li&gt;В &lt;strong&gt;GitHub&lt;/strong&gt; теперь можно создать Pull-request, то есть фактически, предложить слияние своих изменений из ветки с заданием и основного проекта. Обратите внимание, при создании запроса, на вкладку &lt;strong&gt;Files&lt;/strong&gt;. Именно на этой вкладке должны отобразиться все изменения, внесённые в проект в процессе работы над заданием. После завершения проверки необходимо завершить и предложенное слияние веток.&lt;/li&gt;
  &lt;/ol&gt;

</content></entry></feed>