<?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/6c/57/6c57fa1c-57f7-4075-b966-d582d30e4eb3.jpeg</url><title>Кирилл Морозов</title><link>https://teletype.in/@fidget</link></image><link>https://teletype.in/@fidget?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=fidget</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/fidget?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/fidget?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Tue, 14 Apr 2026 14:33:31 GMT</pubDate><lastBuildDate>Tue, 14 Apr 2026 14:33:31 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@fidget/js-proxy-use-cases</guid><link>https://teletype.in/@fidget/js-proxy-use-cases?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=fidget</link><comments>https://teletype.in/@fidget/js-proxy-use-cases?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=fidget#comments</comments><dc:creator>fidget</dc:creator><title>Proxy в Javascript: Что за зверь. Use cases (сценарии использования)</title><pubDate>Wed, 16 Oct 2024 22:26:11 GMT</pubDate><description><![CDATA[В JavaScript Proxy — это объект, который перехватывает операции с другим объектом, известным как целевой объект (target). Это мощный инструмент для добавления поведения или проверки доступа к объектам.]]></description><content:encoded><![CDATA[
  <p id="sHe9">В JavaScript <code>Proxy</code> — это объект, который перехватывает операции с другим объектом, известным как <strong>целевой объект</strong> (target). Это мощный инструмент для добавления поведения или проверки доступа к объектам.</p>
  <p id="TeED">Ниже приведены несколько примеров использования (use cases) <code>Proxy</code>:</p>
  <h2 id="7Zx9">Валидация данных</h2>
  <p id="mcOz"><code>Proxy</code> можно использовать для проверки данных перед их установкой в объект.</p>
  <pre id="VQs8" data-lang="javascript">const user = {
  name: &#x27;John&#x27;,
  age: 25
};

const proxyUser = new Proxy(user, {
  set(target, property, value) {
    if (property === &#x27;age&#x27; &amp;&amp; typeof value !== &#x27;number&#x27;) {
      throw new Error(&#x27;Age must be a number&#x27;);
    }
    target[property] = value;
    return true;
  }
});

proxyUser.age = 30;  // Всё нормально
proxyUser.age = &#x27;thirty&#x27;;  // Ошибка: Age must be a number</pre>
  <p id="xqYH"></p>
  <h2 id="Cc8q">Логирование операций</h2>
  <p id="R1RR"><code>Proxy</code> можно использовать для ведения журнала всех действий, происходящих с объектом.</p>
  <pre id="8GHF" data-lang="javascript">const product = {
  name: &#x27;Laptop&#x27;,
  price: 1000
};

const proxyProduct = new Proxy(product, {
  get(target, property) {
    console.log(&#x60;Accessed property: ${property}&#x60;);
    return target[property];
  },
  set(target, property, value) {
    console.log(&#x60;Set property ${property} to ${value}&#x60;);
    target[property] = value;
    return true;
  }
});

console.log(proxyProduct.name);  // Логирует доступ к свойству &quot;name&quot;
proxyProduct.price = 1200;  // Логирует изменение свойства &quot;price&quot;</pre>
  <p id="qAiV"></p>
  <h2 id="8e8H">Ограничение доступа</h2>
  <p id="8U2b">Можно использовать <code>Proxy</code> для ограничения доступа к определённым свойствам объекта.</p>
  <pre id="O9j5" data-lang="javascript">const secretData = {
  username: &#x27;admin&#x27;,
  password: &#x27;1234&#x27;
};

const proxySecretData = new Proxy(secretData, {
  get(target, property) {
    if (property === &#x27;password&#x27;) {
      throw new Error(&#x27;Access to password is denied&#x27;);
    }
    return target[property];
  }
});

console.log(proxySecretData.username);  // &#x27;admin&#x27;
console.log(proxySecretData.password);  // Ошибка: Access to password is denied</pre>
  <p id="Nrhr"></p>
  <h2 id="gqHK">Автоматическое создание свойств</h2>
  <p id="CyWB"><code>Proxy</code> может быть использован для автоматического создания свойств объекта при обращении к ним.</p>
  <pre id="8YVf" data-lang="javascript">const data = {};

const proxyData = new Proxy(data, {
  get(target, property) {
    if (!(property in target)) {
      target[property] = 0;  // Если свойства нет, создать его с начальным значением 0
    }
    return target[property];
  }
});

console.log(proxyData.counter);  // Выведет 0, даже если свойства &quot;counter&quot; не было
proxyData.counter += 1;
console.log(proxyData.counter);  // Выведет 1</pre>
  <p id="tU9G"></p>
  <h2 id="nNoo">Наблюдение за изменениями</h2>
  <p id="886a"><code>Proxy</code> можно использовать для отслеживания изменений в объекте.</p>
  <pre id="vInO" data-lang="javascript">const user = {
  name: &#x27;Alice&#x27;,
  age: 30
};

const handler = {
  set(target, property, value) {
    console.log(&#x60;Property ${property} was changed from ${target[property]} to ${value}&#x60;);
    target[property] = value;
    return true;
  }
};

const proxyUser = new Proxy(user, handler);

proxyUser.name = &#x27;Bob&#x27;;  // Логирует изменение имени с &#x27;Alice&#x27; на &#x27;Bob&#x27;
proxyUser.age = 35;      // Логирует изменение возраста с 30 на 35</pre>
  <p id="l9gj"></p>
  <h2 id="ahMw">Псевдомассив с отрицательными индексами</h2>
  <p id="c5So">Proxy может расширить функциональность массивов, добавив поддержку отрицательных индексов.</p>
  <pre id="6N6x" data-lang="javascript">const array = [1, 2, 3, 4, 5];

const proxyArray = new Proxy(array, {
  get(target, property) {
    const index = Number(property);
    if (index &lt; 0) {
      return target[target.length + index];
    }
    return target[property];
  }
});

console.log(proxyArray[-1]);  // 5 (последний элемент массива)
console.log(proxyArray[-2]);  // 4</pre>
  <p id="S3ES">Эти примеры показывают, как <code>Proxy</code> может быть использован для валидации, логирования, ограничения доступа, создания новых свойств и расширения функционала объектов и массивов в JavaScript.</p>
  <p id="1OPk">А как вы используете <code>Proxy</code>?</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@fidget/kak-proverit-peredannye-dannye-v-ng-content</guid><link>https://teletype.in/@fidget/kak-proverit-peredannye-dannye-v-ng-content?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=fidget</link><comments>https://teletype.in/@fidget/kak-proverit-peredannye-dannye-v-ng-content?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=fidget#comments</comments><dc:creator>fidget</dc:creator><title>ANGULAR: КАК ПРОВЕРИТЬ ПЕРЕДАННЫЕ ДАННЫЕ В NG-CONTENT</title><pubDate>Fri, 07 Jun 2024 09:17:33 GMT</pubDate><category>Angular</category><description><![CDATA[Иногда возникает задача с проверкой пришли ли данные в ng-content компонента или нет.]]></description><content:encoded><![CDATA[
  <p id="1P8C">Иногда возникает задача с проверкой пришли ли данные в ng-content компонента или нет.</p>
  <p id="iYVw">Например у нас есть такой шаблон компонента:</p>
  <pre id="imNX" data-lang="html">&lt;div class=&quot;block&quot;&gt;
    &lt;div *ngIf=&quot;title&quot; class=&quot;block__title&quot; innterHtml=&quot;title&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;block__body&quot;&gt;
        &lt;ng-content&gt;&lt;/ng-content&gt;
    &lt;/div&gt;
&lt;/div&gt;</pre>
  <p id="pJKS">Проблема в то сто если мы ничего не передали в ng-content то обёртка <code>.block__body</code> все равно отобразится, чего не хотелось бы.</p>
  <p id="nWUi">Решение есть. Не очень красивое, но все же...</p>
  <p id="c8TQ">При вызове компонента оборачиванем данные в ng-template</p>
  <pre id="5wJD" data-lang="html">&lt;ng-template #сontent&gt;
    &lt;p&gt;Body content...&lt;/p&gt;
&lt;/ng-template&gt;</pre>
  <p id="w8AE">В компоненте инициализируем переменную:</p>
  <pre id="pgRI" data-lang="typescript">@ContentChild(&#x27;content&#x27;, { static: false }) content: TemplateRef&lt;unknown&gt;;</pre>
  <p id="2qvC">У после этого в шаблоне уже можем проверить - пришли данные или нет.</p>
  <pre id="I3Wn" data-lang="html">&lt;div class=&quot;block&quot;&gt;
    &lt;div *ngIf=&quot;title&quot; class=&quot;block__title&quot; innterHtml=&quot;title&quot;&gt;&lt;/div&gt;
    &lt;div *ngIf=&quot;content&quot; class=&quot;block__body&quot;&gt;
        &lt;ng-container *ngTemplateOutlet=&quot;mainContent&quot;&gt;&lt;/ng-container&gt;
    &lt;/div&gt;
&lt;/div&gt;</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@fidget/angular-module-federation-vs-library</guid><link>https://teletype.in/@fidget/angular-module-federation-vs-library?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=fidget</link><comments>https://teletype.in/@fidget/angular-module-federation-vs-library?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=fidget#comments</comments><dc:creator>fidget</dc:creator><title>Angular: Чем module federation отличается от library? </title><pubDate>Tue, 28 Feb 2023 20:09:19 GMT</pubDate><category>Angular</category><description><![CDATA[<img src="https://img4.teletype.in/files/f8/51/f8513924-379b-4a83-8428-ae835b4c354c.png"></img>Module Federation и библиотеки в Angular - это два разных концепта.]]></description><content:encoded><![CDATA[
  <figure id="QoR0" class="m_column">
    <img src="https://img4.teletype.in/files/f8/51/f8513924-379b-4a83-8428-ae835b4c354c.png" width="1024" />
  </figure>
  <p id="rUxs">Module Federation и библиотеки в Angular - это два разных концепта.</p>
  <p id="ajGy">Библиотеки в Angular - это переиспользуемые наборы кода, которые вы можете создавать и использовать в разных проектах. Они представляют собой некоторую функциональность, которую можно импортировать и использовать в других частях вашего приложения. Это может быть что угодно, от набора компонентов и сервисов до функций и классов утилит.</p>
  <p id="Aq7f">Module Federation - это механизм, который позволяет нескольким приложениям, работающим на разных доменах, обмениваться кодом на основе модулей. Он позволяет разделить ваше приложение на небольшие, независимые части, которые можно развернуть на разных серверах и обмениваться между собой. Это особенно полезно, когда у вас есть несколько микросервисов, работающих на разных доменах, и вы хотите, чтобы они обменивались функциональностью, не копируя код между ними.</p>
  <p id="HFfq">Таким образом, библиотеки в Angular предназначены для переиспользования кода в рамках одного приложения, тогда как Module Federation предназначен для обмена кодом между несколькими приложениями на разных доменах.</p>
  <p id="Ueac">Module Federation позволяет обмениваться кодом между приложениями на основе модулей, что может помочь упростить разработку и ускорить время выхода на рынок. Он также позволяет создавать более гибкие и масштабируемые приложения, поскольку вы можете использовать только те модули, которые вам нужны, и не переносить весь код между приложениями.</p>
  <p id="XlsR">В Angular вы можете использовать Module Federation, чтобы подключить удаленный код, который предоставляется другими приложениями, в ваше приложение. Это может быть полезно, если вы хотите добавить функциональность из другого приложения, например, использовать компоненты из другого приложения в своем приложении.</p>
  <p id="gaVJ">Таким образом, хотя библиотеки и Module Federation могут использоваться вместе, они решают разные задачи и имеют различные применения в разработке приложений.</p>
  <p id="AzGT">В Angular библиотеки позволяют создавать и переиспользовать код между разными приложениями, что может значительно сократить время разработки, повысить производительность и уменьшить количество ошибок. В библиотеках вы можете хранить компоненты, сервисы, директивы и другие элементы, которые можно использовать в различных приложениях.</p>
  <p id="6vNi">Module Federation, с другой стороны, предоставляет возможность обмениваться кодом между отдельными приложениями, работающими на разных доменах. Это позволяет создавать распределенные системы, которые могут легко масштабироваться и поддерживаться.</p>
  <p id="zI7q">Кроме того, с помощью Module Federation вы можете создавать гибридные приложения, объединяя код, написанный на разных языках программирования и/или фреймворках, в одно приложение. Например, вы можете использовать React-компоненты в Angular-приложении или наоборот.</p>
  <p id="UktN">Таким образом, использование библиотек и Module Federation в Angular может помочь сделать ваше приложение более гибким, масштабируемым и удобным для разработки.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@fidget/kak-smenit-polzovatelya-git-na-mac</guid><link>https://teletype.in/@fidget/kak-smenit-polzovatelya-git-na-mac?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=fidget</link><comments>https://teletype.in/@fidget/kak-smenit-polzovatelya-git-na-mac?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=fidget#comments</comments><dc:creator>fidget</dc:creator><title>Как сменить пользователя git на mac os</title><pubDate>Thu, 24 Dec 2020 10:30:26 GMT</pubDate><category>git</category><description><![CDATA[В общем сижу себе такой «крутой» удаленный работник в Крыму на шезлонге, пью квас, заедаю кукурузой. И тут хуяк, github мне пишет, мы вас просекли, вы работаете на территори, которая находится под санкциями США - типа пишите объяснительную чё за нахуй?]]></description><content:encoded><![CDATA[
  <p>В общем сижу себе такой «крутой» удаленный работник в Крыму на шезлонге, пью квас, заедаю кукурузой. И тут хуяк, github мне пишет, мы вас просекли, вы работаете на территори, которая находится под санкциями США - типа пишите объяснительную чё за нахуй?</p>
  <p>Глянул там надо на кучу вопросов ответить + приложить скан документа с пропиской. Охуенно…</p>
  <p>Ну я же умный, зарегил новый аккаунт делаю git pull… а мне пишет что вы работаете из старого аккаунта.</p>
  <p>Решается это довольно просто. На маке заходим в связку ключей (программа такая страндартная). Находим github.com и удаляем учетную запись. Все теперь при следующей работе с github из консоли попросит ввести новый логин и пароль. Ура!</p>

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