<?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>Aleksei Yudin</title><generator>teletype.in</generator><description><![CDATA[Все врут, но это ничего не меняет, потому что никто никого не слушает.]]></description><image><url>https://img3.teletype.in/files/a9/0f/a90f0cf3-3a61-455b-93f4-0e11f3fb486d.jpeg</url><title>Aleksei Yudin</title><link>https://teletype.in/@l0ne</link></image><link>https://teletype.in/@l0ne?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/l0ne?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/l0ne?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Tue, 19 May 2026 12:29:05 GMT</pubDate><lastBuildDate>Tue, 19 May 2026 12:29:05 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@l0ne/mongo_index</guid><link>https://teletype.in/@l0ne/mongo_index?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><comments>https://teletype.in/@l0ne/mongo_index?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne#comments</comments><dc:creator>l0ne</dc:creator><title>Найти индексы в коллекции MongoDB</title><pubDate>Wed, 29 Jun 2022 10:46:10 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/70/fe/70fe58e6-0455-4ebf-b2f1-62126bd3eb15.png"></media:content><category>MongoDB</category><description><![CDATA[<img src="https://img3.teletype.in/files/ae/58/ae58dc59-248e-40e6-892e-c41e0c6eee18.jpeg"></img>Найти:]]></description><content:encoded><![CDATA[
  <figure id="dXBF" class="m_column">
    <img src="https://img3.teletype.in/files/ae/58/ae58dc59-248e-40e6-892e-c41e0c6eee18.jpeg" width="4256" />
  </figure>
  <p id="h8dq">Найти:</p>
  <pre id="j48r" data-lang="sql">db.coins.getIndexes()</pre>
  <p id="Qois"><a href="https://www.mongodb.com/docs/manual/reference/method/db.collection.getIndexes/#required-access" target="_blank">https://www.mongodb.com/docs/manual/reference/method/db.collection.getIndexes/#required-access</a></p>
  <p id="V6by">Дропнуть:</p>
  <pre id="nuy5">db.coins.dropIndex(&#x27;indexName_1&#x27;)</pre>
  <p id="VRfb"><a href="https://www.mongodb.com/docs/manual/reference/method/db.collection.dropIndex/" target="_blank">https://www.mongodb.com/docs/manual/reference/method/db.collection.dropIndex/</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@l0ne/git-tags</guid><link>https://teletype.in/@l0ne/git-tags?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><comments>https://teletype.in/@l0ne/git-tags?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne#comments</comments><dc:creator>l0ne</dc:creator><title>Теги в Git</title><pubDate>Tue, 26 Oct 2021 09:18:06 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/4e/5d/4e5d1dca-b224-4a83-b6a9-14126a231728.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/9d/f2/9df205a8-e844-407a-8009-b4a4d1f2aa5a.jpeg"></img>По умолчанию, команда git push не отправляет теги на удалённые сервера. После создания теги нужно отправлять явно на удалённый сервер. Процесс аналогичен отправке веток — достаточно выполнить команду git push origin &lt;tagname&gt;.]]></description><content:encoded><![CDATA[
  <figure id="q49n" class="m_column">
    <img src="https://img2.teletype.in/files/9d/f2/9df205a8-e844-407a-8009-b4a4d1f2aa5a.jpeg" width="5184" />
  </figure>
  <h3 id="O6Ku"><br />Посмотреть теги</h3>
  <pre id="fBJ2">$ git tag

Output
v1.0
v2.0</pre>
  <h3 id="oOZ4">Сделать тег</h3>
  <pre id="rm6b" data-lang="bash">$ git tag v1.4-lw
$ git tag

v0.1
v1.3
v1.4
v1.4-lw
v1.5</pre>
  <h3 id="UBv2">Тег с описанием</h3>
  <pre id="sZnx" data-lang="bash">$ git tag -a v1.4 -m &quot;my version 1.4&quot;
$ git tag

v0.1
v1.3
v1.4</pre>
  <h3 id="r_sharing_tags">Обмен тегами</h3>
  <p id="zGNN">По умолчанию, команда <code>git push</code> не отправляет теги на удалённые сервера. После создания теги нужно отправлять явно на удалённый сервер. Процесс аналогичен отправке веток — достаточно выполнить команду <code>git push origin &lt;tagname&gt;</code>.</p>
  <pre id="W4jh" data-lang="bash">$ git push origin v1.5

Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
 * [new tag]         v1.5 -&gt; v1.5</pre>
  <p id="69qm">Если у вас много тегов, и вам хотелось бы отправить все за один раз, то можно использовать опцию <code>--tags</code> для команды <code>git push</code>. В таком случае все ваши теги отправятся на удалённый сервер (если только их уже там нет).</p>
  <h3 id="_переход_на_тег">Переход на тег</h3>
  <p id="hQuL">Если вы хотите получить версии файлов, на которые указывает тег, то вы можете сделать <code>git checkout</code> для тега. Однако, это переведёт репозиторий в состояние «detached HEAD», которое имеет ряд неприятных побочных эффектов.</p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="KQcI"><em>Если в состоянии «detached HEAD» внести изменения и сделать коммит, то тег не изменится, при этом новый коммит не будет относиться ни к какой из веток, а доступ к нему можно будет получить только по его хешу. </em></p>
  </section>
  <p id="w09k">Поэтому, если вам нужно внести изменения — исправить ошибку в одной из старых версий — скорее всего вам следует создать ветку:</p>
  <pre id="gzOl">$ git checkout -b version2 v2.0.0</pre>
  <p id="m5nB">Если сделать коммит в ветке <code>version2</code>, то она сдвинется вперед и будет отличаться от тега <code>v2.0.0</code>, так что будьте с этим осторожны.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@l0ne/scp-copy</guid><link>https://teletype.in/@l0ne/scp-copy?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><comments>https://teletype.in/@l0ne/scp-copy?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne#comments</comments><dc:creator>l0ne</dc:creator><title>Как копировать файл на удаленный сервер</title><pubDate>Fri, 08 Oct 2021 17:41:24 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/c5/26/c526f245-43c9-4d6c-94fa-78c1cbca5341.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/f0/f4/f0f4fb89-4b2d-41af-8c58-f8a5675076db.jpeg"></img>Заходим в директорию от куда необходимо скопировать файл/файлы, например file1.zip в директории /home/ , необходимо скопировать на удаленный компьютер в папку /home2/ . Находимся на первом сервере 192.168.0.1]]></description><content:encoded><![CDATA[
  <figure id="aZPx" class="m_column">
    <img src="https://img4.teletype.in/files/f0/f4/f0f4fb89-4b2d-41af-8c58-f8a5675076db.jpeg" width="2500" />
  </figure>
  <p id="J0bl">Заходим в директорию от куда необходимо скопировать файл/файлы, например <code>file1.zip</code> в директории <code>/home/</code> , необходимо скопировать на удаленный компьютер в папку <code>/home2/</code> . Находимся на первом сервере <code>192.168.0.1</code></p>
  <pre id="MKcD">root@192.168.0.1 [/home/]# scp file1.zip root@192.168.0.2:/home2/</pre>
  <p id="BYud">или с любого места</p>
  <pre id="Gb9N">root@192.168.0.1 [/]# scp /home/file1.zip root@192.168.0.2:/home2/</pre>
  <p id="KOIO">после ввода у вас запросит пароль к удаленному серверу.</p>
  <pre id="74NE">root@192.168.0.2&#x27;s password:</pre>
  <p id="klSq">т.е. <code>scp файл пользователь@адрес_сервера (IP или домен):каталог</code> на удаленном сервере куда необходимо это скопировать<br />если необходимо скопировать несколько файлов то их можно указать через пробел, т.е.: file1.zip file2.zip ...</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@l0ne/react-native-styled-components</guid><link>https://teletype.in/@l0ne/react-native-styled-components?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><comments>https://teletype.in/@l0ne/react-native-styled-components?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne#comments</comments><dc:creator>l0ne</dc:creator><title>Styled Components + React Native</title><pubDate>Fri, 24 Sep 2021 14:07:30 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/62/4c/624c2932-27db-4a91-82f4-b5c2893c9b13.jpeg"></media:content><category>React Native</category><tt:hashtag>react_native</tt:hashtag><tt:hashtag>styled_components</tt:hashtag><tt:hashtag>development</tt:hashtag><tt:hashtag>javascript</tt:hashtag><description><![CDATA[<img src="https://img2.teletype.in/files/12/8e/128e5420-53b2-484e-b075-aba1aa21e5e2.jpeg"></img>И так мы уже установили RN. Сделали навигацию по приложению. На чем писать стили?]]></description><content:encoded><![CDATA[
  <figure id="zO6h" class="m_column">
    <img src="https://img2.teletype.in/files/12/8e/128e5420-53b2-484e-b075-aba1aa21e5e2.jpeg" width="6000" />
  </figure>
  <p id="S5Db">И так мы уже <a href="https://teletype.in/@l0ne/react-native-init" target="_blank">установили RN</a>. Сделали <a href="https://teletype.in/@l0ne/react-native-navigation" target="_blank">навигацию</a> по приложению. На чем писать стили?</p>
  <p id="HSow">А почему бы не попробовать <a href="https://styled-components.com/" target="_blank">styled-components</a>?</p>
  <h3 id="eogh">Ну и как всегда максимально короткая заметка как это все получить у себя на борту.</h3>
  <p id="eU62">Устанавливаем:</p>
  <pre id="Fj9F" data-lang="bash">yarn add styled-components@5.2.0</pre>
  <p id="iBXX">Теперь импортим и начинаем использовать</p>
  <pre id="3Mxx" data-lang="javascript">import styled from &#x27;styled-components/native&#x27;;</pre>
  <p id="rZI8">Например мы хотим сделать View, который будет контейнером для нашего текста, а также сделать стилизованный текст:</p>
  <pre id="I1SK" data-lang="javascript">const Container = styled.View&#x60;
  flex: 1;
  background-color: white;
  align-items: center;
  justify-content: center;
&#x60;;
const Text = styled.Text&#x60;
  font-size: 18px;
  color: blue;
  font-weight: 500;
&#x60;;</pre>
  <p id="rwK9">Все вместе выглядит вот так:</p>
  <pre id="zVsv" data-lang="javascript">import React from &#x27;react&#x27;;
import styled from &#x27;styled-components/native&#x27;;

const Container = styled.View&#x60;
  flex: 1;
  background-color: white;
  align-items: center;
  justify-content: center;
&#x60;;
const Text = styled.Text&#x60;
  font-size: 18px;
  color: blue;
  font-weight: 500;
&#x60;;

const StyledComponentExamplePage = () =&gt; {
  return (
    &lt;Container&gt;
      &lt;Text&gt;Open up App.js to start working on your app!&lt;/Text&gt;
    &lt;/Container&gt;
  );
};

export default StyledComponentExamplePage;</pre>
  <p id="21Vq">По сути мы оборачиваем стандартные элементы и стилим перед использованием.</p>
  <figure id="pP8u" class="m_original">
    <img src="https://img4.teletype.in/files/fa/c2/fac2852b-f403-46ed-8c6a-3ddf146c9868.png" width="458" />
  </figure>
  <p id="aeDn">Более развернутое объяснение можно посмотреть пожалуй <a href="https://blog.logrocket.com/how-to-use-styled-components-with-react-native/" target="_blank">тут</a> или в <a href="https://styled-components.com/" target="_blank">документации</a>.</p>
  <tt-tags id="vHf0">
    <tt-tag name="react_native">#react_native</tt-tag>
    <tt-tag name="styled_components">#styled_components</tt-tag>
    <tt-tag name="development">#development</tt-tag>
    <tt-tag name="javascript">#javascript</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@l0ne/react-native-navigation</guid><link>https://teletype.in/@l0ne/react-native-navigation?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><comments>https://teletype.in/@l0ne/react-native-navigation?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne#comments</comments><dc:creator>l0ne</dc:creator><title>Делаем навигацию в React Native</title><pubDate>Wed, 22 Sep 2021 07:05:12 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/d0/f6/d0f68283-4bd5-4672-b556-280c069e4d3a.jpeg"></media:content><category>React Native</category><tt:hashtag>react_native</tt:hashtag><tt:hashtag>react_navigation</tt:hashtag><tt:hashtag>javascript</tt:hashtag><description><![CDATA[<img src="https://img1.teletype.in/files/cf/02/cf02dd3b-c3cb-407e-9137-587076398b99.jpeg"></img>Устанавливаем как написано в документации https://reactnative.dev/docs/navigation:]]></description><content:encoded><![CDATA[
  <figure id="ihby" class="m_column">
    <img src="https://img1.teletype.in/files/cf/02/cf02dd3b-c3cb-407e-9137-587076398b99.jpeg" width="3600" />
  </figure>
  <p id="ZoTs">Устанавливаем как написано в документации <a href="https://reactnative.dev/docs/navigation" target="_blank">https://reactnative.dev/docs/navigation</a>:</p>
  <pre id="NqWJ" data-lang="bash">yarn add @react-navigation/native @react-navigation/native-stack 
yarn add react-native-screens react-native-safe-area-context</pre>
  <p id="I9kN">Для IOS дополнительный шаг:</p>
  <pre id="D8Im" data-lang="bash">npx pod-install</pre>
  <p id="D6ol">Теперь нужно обернуть все наше приложение в контейнер навигации <strong>NavigationContainer</strong>. Обычно это делается в <strong>App.js</strong> или <strong>index.js</strong></p>
  <pre id="2Mar" data-lang="javascript">import * as React from &#x27;react&#x27;;
import { NavigationContainer } from &#x27;@react-navigation/native&#x27;;

const App = () =&gt; {
  return (
    &lt;NavigationContainer&gt;
      {/* Rest of your app code */}
    &lt;/NavigationContainer&gt;
  );
};

export default App;</pre>
  <p id="nytA">Ну и пример использования:</p>
  <pre id="UwOs" data-lang="javascript">import React from &#x27;react&#x27;;
import {Text, Button} from &#x27;react-native&#x27;;
import {NavigationContainer} from &#x27;@react-navigation/native&#x27;;
import {createNativeStackNavigator} from &#x27;@react-navigation/native-stack&#x27;;

const Stack = createNativeStackNavigator();

const HomeScreen = ({navigation}) =&gt; {
  return (
    &lt;Button
      title=&quot;Go to Jane&#x27;s profile&quot;
      onPress={() =&gt; navigation.navigate(&#x27;Profile&#x27;, {name: &#x27;Jane&#x27;})}
    /&gt;
  );
};

const ProfileScreen = ({navigation, route}) =&gt; {
  return &lt;Text&gt;This is {route.params.name}&#x27;s profile&lt;/Text&gt;;
};

const App = () =&gt; {
  return (
    &lt;NavigationContainer&gt;
      &lt;Stack.Navigator&gt;
        &lt;Stack.Screen
          name=&quot;Home&quot;
          component={HomeScreen}
          options={{title: &#x27;Welcome&#x27;}}
        /&gt;
        &lt;Stack.Screen name=&quot;Profile&quot; component={ProfileScreen} /&gt;
      &lt;/Stack.Navigator&gt;
    &lt;/NavigationContainer&gt;
  );
};

export default App;</pre>
  <p id="jYSF"><strong>react-navigation</strong> использует нативные API: <strong>UINavigationController</strong> на iOS и <strong>Fragment</strong> на Android, поэтому навигация, созданная с помощью <strong>createNativeStackNavigator</strong>, будет вести себя так же и иметь те же характеристики производительности, что и приложения, созданные на базе этих API.</p>
  <p id="CviX">PS Если надо спрятать хидер и использовать весь экран:</p>
  <pre id="bey0" data-lang="javascript">&lt;Stack.Screen options={{headerShown: false}} name=&quot;Home&quot; component={HomeScreen}/&gt;</pre>
  <p id="aKar"></p>
  <tt-tags id="PgnD">
    <tt-tag name="react_native">#react_native</tt-tag>
    <tt-tag name="react_navigation">#react_navigation</tt-tag>
    <tt-tag name="javascript">#javascript</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@l0ne/react-native-init</guid><link>https://teletype.in/@l0ne/react-native-init?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><comments>https://teletype.in/@l0ne/react-native-init?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne#comments</comments><dc:creator>l0ne</dc:creator><title>Стартуем React Native приложение</title><pubDate>Tue, 21 Sep 2021 12:04:41 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/86/2e/862e45a1-5e9a-4543-b7c6-4783185863b7.jpeg"></media:content><category>React Native</category><description><![CDATA[<img src="https://img2.teletype.in/files/1d/7e/1d7e9bb6-c3df-4a1c-8ba1-50bf7adad80b.jpeg"></img>Android запустить:]]></description><content:encoded><![CDATA[
  <figure id="3J7k" class="m_column">
    <img src="https://img2.teletype.in/files/1d/7e/1d7e9bb6-c3df-4a1c-8ba1-50bf7adad80b.jpeg" width="6000" />
  </figure>
  <h3 id="ho4Y">Вы хотите написать мобильное приложение на React Native?</h3>
  <pre id="5xjQ" data-lang="bash">npx react-native init MyMobileApp</pre>
  <h3 id="cWh1">Вы хотите написать мобильное приложение на React Native с Typescript на борту?</h3>
  <pre id="RGsR" data-lang="bash">npx react-native init MyMobileAppTS --template react-native-template-typescript</pre>
  <p id="6u0U">Android запустить:</p>
  <pre id="FSYU" data-lang="bash">npx react-native run-android</pre>
  <p id="gvc6">IOS (только на Mac OS):</p>
  <pre id="LUPP">npx react-native run-ios</pre>
  <p id="jFwi">Приятного полета!</p>
  <p id="wTiK">Тут положу <a href="https://reactnative.dev/docs/next/environment-setup" target="_blank">https://reactnative.dev/docs/next/environment-setup</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@l0ne/install-docker-ubuntu</guid><link>https://teletype.in/@l0ne/install-docker-ubuntu?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><comments>https://teletype.in/@l0ne/install-docker-ubuntu?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne#comments</comments><dc:creator>l0ne</dc:creator><title>Отправляйтесь в доки</title><pubDate>Mon, 20 Sep 2021 14:31:59 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/33/aa/33aadf7f-1aa2-4e9d-805e-a9bbcb588915.jpeg"></media:content><category>Docker</category><tt:hashtag>ubuntu</tt:hashtag><tt:hashtag>docker</tt:hashtag><tt:hashtag>docker_compose</tt:hashtag><description><![CDATA[<img src="https://img3.teletype.in/files/6b/85/6b85fc73-5363-4e3c-895d-c102721f2493.jpeg"></img>Обновляем пакеты в системе:]]></description><content:encoded><![CDATA[
  <figure id="hocc" class="m_column">
    <img src="https://img3.teletype.in/files/6b/85/6b85fc73-5363-4e3c-895d-c102721f2493.jpeg" width="3600" />
  </figure>
  <h3 id="G62H">Как быстро навернуть докер в ubuntu?</h3>
  <p id="f4sO">Обновляем пакеты в системе:</p>
  <pre id="J1jd" data-lang="bash">sudo apt update</pre>
  <p id="Vo1J">Ставим вспомогательные пакеты:</p>
  <pre id="zVhD" data-lang="bash">sudo apt install apt-transport-https ca-certificates curl software-properties-common</pre>
  <p id="921u">Добавим ключ GPG и репозиторий Docker в список источников пакетов APT:</p>
  <pre id="j6TD" data-lang="bash">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable&quot;</pre>
  <p id="yEIS">Еще раз обновим пакеты и ставим сам докер:</p>
  <pre id="898z" data-lang="bash">sudo apt update
sudo apt install docker-ce</pre>
  <p id="2iIo">Теперь Docker установлен, демон запущен, и процесс будет запускаться при загрузке системы. Убедимся, что процесс запущен:</p>
  <pre id="2c25" data-lang="bash">sudo systemctl status docker

Output:
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-09-20 13:59:08 UTC; 44s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 79867 (dockerd)
      Tasks: 7
     Memory: 30.3M
     CGroup: /system.slice/docker.service
             └─79867 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock</pre>
  <h3 id="2h6f">Использование команды Docker без sudo (опционально)</h3>
  <p id="T4K6">По умолчанию, запуск команды docker требует привилегий пользователя root или пользователя группы docker, которая автоматически создается при установке Docker. Если вам это не надо, добавьте имя своего пользователя в группу docker:</p>
  <pre id="FtUz" data-lang="bash">sudo usermod -aG docker ${USER}</pre>
  <p id="SqPr">После чего перелогинится.</p>
  <p id="PHE4">Чтобы проверить, можете ли вы осуществлять доступ и загружать образы из Docker Hub, введите следующую команду:</p>
  <pre id="fvCT" data-lang="bash">docker run hello-world</pre>
  <p id="Qf8L">Мои поздравления!</p>
  <h3 id="At61">Установка Docker Compose если нужно</h3>
  <pre id="lsUs" data-lang="bash">sudo curl -L &quot;https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose</pre>
  <p id="3hHL">Права на выполнение:</p>
  <pre id="SW8g" data-lang="bash">sudo chmod +x /usr/local/bin/docker-compose</pre>
  <p id="ykSb">Проверим версию:</p>
  <pre id="xWrU" data-lang="bash">docker-compose -v

Output: 
docker-compose version 1.29.2, build 5becea4c</pre>
  <p id="p3F2">Ну все готово.</p>
  <p id="XChB">В следующий раз когда мне надо будет быстро поставить докер в убунту, я смогу воспользоваться этой инструкцией. Надеюсь не устареет :)</p>
  <tt-tags id="ZAaQ">
    <tt-tag name="ubuntu">#ubuntu</tt-tag>
    <tt-tag name="docker">#docker</tt-tag>
    <tt-tag name="docker_compose">#docker_compose</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@l0ne/install-nvm-nodejs</guid><link>https://teletype.in/@l0ne/install-nvm-nodejs?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><comments>https://teletype.in/@l0ne/install-nvm-nodejs?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne#comments</comments><dc:creator>l0ne</dc:creator><title>Установка Node JS</title><pubDate>Fri, 17 Sep 2021 11:34:47 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/70/38/70389541-a102-430e-b25c-3d2930c4881e.jpeg"></media:content><category>Bash</category><description><![CDATA[<img src="https://img4.teletype.in/files/3f/a1/3fa1e244-f20f-4391-ae14-4de5c6c62341.jpeg"></img>Я ставлю обычно NVM (Node Version Manager). Он позволяет выбирать нужную версию легко и непринужденно. Поехали... Идем в репозиторий https://github.com/nvm-sh/nvm]]></description><content:encoded><![CDATA[
  <figure id="Pt4S" class="m_column">
    <img src="https://img4.teletype.in/files/3f/a1/3fa1e244-f20f-4391-ae14-4de5c6c62341.jpeg" width="3600" />
  </figure>
  <p id="h4Qs">Я ставлю обычно NVM (Node Version Manager). Он позволяет выбирать нужную версию легко и непринужденно. Поехали... Идем в репозиторий <a href="https://github.com/nvm-sh/nvm" target="_blank">https://github.com/nvm-sh/nvm</a></p>
  <p id="o2nY">Устанавливаем:</p>
  <pre id="2iwd" data-lang="bash">curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash</pre>
  <p id="Phuc">Она устанавливает скрипт nvm для вашей учетной записи. Для его использования необходимо сначала получить ваш файл .bashrc:</p>
  <pre id="kpcQ" data-lang="bash">source ~/.bashrc</pre>
  <p id="7d4A">Проверяем что NVM установлен:</p>
  <pre id="3fw6" data-lang="bash">nvm --version

Output: 
0.38.0 </pre>
  <p id="pxX0">В моем случае выводит версию: 0.38.0</p>
  <p id="x3ue">Ну а теперь ставим саму ноду, например 14</p>
  <pre id="0kcL" data-lang="bash">nvm install 14</pre>
  <pre id="YADs" data-lang="bash">node -v

Output: 
v14.17.6</pre>
  <p id="8Fea">Магия!</p>
  <p id="3czm">Можем поставить другую версию и переключится на нее:</p>
  <pre id="IIzI" data-lang="bash">
nvm install 12 
nvm use 12 
node -v 

Output:
v12.22.6</pre>
  <p id="n7g2">Посмотреть что мы наустанавливали:</p>
  <pre id="5kAN" data-lang="bash">nvm ls</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@l0ne/ssh-keygen</guid><link>https://teletype.in/@l0ne/ssh-keygen?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><comments>https://teletype.in/@l0ne/ssh-keygen?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne#comments</comments><dc:creator>l0ne</dc:creator><title>Ключ SSH</title><pubDate>Fri, 17 Sep 2021 10:49:04 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/25/e3/25e39a59-851a-4eda-a813-bc898af7b1af.jpeg"></media:content><category>Bash</category><description><![CDATA[<img src="https://img4.teletype.in/files/33/24/3324cb5a-19b9-4e49-a562-65289b5681c2.jpeg"></img>Как сгенерить ключ ssh на сервере Linux?]]></description><content:encoded><![CDATA[
  <figure id="2SIz" class="m_column">
    <img src="https://img4.teletype.in/files/33/24/3324cb5a-19b9-4e49-a562-65289b5681c2.jpeg" width="3600" />
  </figure>
  <p id="yqvy">Как сгенерить ключ ssh на сервере Linux?</p>
  <pre id="E0ig" data-lang="bash">ssh-keygen</pre>
  <p id="5tks">Отвечаем на вопросы. Выводим на экран:</p>
  <pre id="StXy" data-lang="bash">cat ~/.ssh/id_rsa.pub</pre>
  <p id="SLe1">Надеюсь помог...</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@l0ne/postgres-positive-check</guid><link>https://teletype.in/@l0ne/postgres-positive-check?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne</link><comments>https://teletype.in/@l0ne/postgres-positive-check?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=l0ne#comments</comments><dc:creator>l0ne</dc:creator><title>Только позитив с Postgres</title><pubDate>Thu, 16 Sep 2021 07:19:59 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/f0/05/f005b441-28ff-43c7-8861-344a2917503d.jpeg"></media:content><category>postgresql</category><description><![CDATA[<img src="https://img4.teletype.in/files/76/5d/765d2a83-26c7-43f5-ae43-07a0e5883ea4.jpeg"></img>ALTER TABLE &quot;products&quot; ADD CONSTRAINT &quot;total_check&quot; CHECK (total &gt;= 0);]]></description><content:encoded><![CDATA[
  <figure id="W1BW" class="m_column">
    <img src="https://img4.teletype.in/files/76/5d/765d2a83-26c7-43f5-ae43-07a0e5883ea4.jpeg" width="6000" />
  </figure>
  <p id="HVRE">ALTER TABLE &quot;products&quot; ADD CONSTRAINT &quot;total_check&quot; CHECK (total &gt;= 0);</p>
  <p id="PkJA">Нам нужно сохранить значение в базе, которое не может принимать отрицательное значение, например зарплата. Мы создали Integer и вскоре получаем баг, что оно отрицательное и твой код не сработал 🤤</p>
  <p id="rIOH">Добавить проверку на уровне базы postgres можно таким SQL запросом:</p>
  <pre id="Waph" data-lang="sql">ALTER TABLE &quot;employees&quot; ADD CONSTRAINT &quot;positive_salary_check&quot; CHECK (salary &gt; 0);</pre>
  <p id="emfF">Или в виде knex миграции, если вы понимаете о чем я ;)</p>
  <pre id="Tjwh" data-lang="javascript">import * as Knex from &#x27;knex&#x27;;

export async function up(knex: Knex): Promise&lt;void&gt; {
  return knex.schema.raw(&#x60;
    ALTER TABLE &quot;employees&quot; ADD CONSTRAINT &quot;positive_salary_check&quot; CHECK (salary &gt; 0);
  &#x60;);
}

export async function down(knex: Knex): Promise&lt;void&gt; {
  return knex.schema.raw(&#x60;
    ALTER TABLE &quot;employees&quot; DROP CONSTRAINT &quot;positive_salary_check&quot;;
  &#x60;);
}</pre>
  <p id="MaQd">А лучше такие поля сразу создавать с проверкой и не ждать бага 😂</p>
  <pre id="Bv2s" data-lang="sql">DROP TABLE IF EXISTS employees;
CREATE TABLE employees (
	id SERIAL PRIMARY KEY,
	first_name VARCHAR (50),
	last_name VARCHAR (50),
	birth_date DATE CHECK (birth_date &gt; &#x27;1900-01-01&#x27;),
	joined_date DATE CHECK (joined_date &gt; birth_date),
	salary numeric CHECK(salary &gt; 0)
);</pre>
  <p id="6lUC">Тут сразу несколько примеров как можно это заюзать. Положу тут чтобы не потерять.</p>

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