<?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>Aleksei Yudin</title><subtitle>Все врут, но это ничего не меняет, потому что никто никого не слушает.</subtitle><author><name>Aleksei Yudin</name></author><id>https://teletype.in/atom/l0ne</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/l0ne?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/l0ne?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-19T12:28:58.425Z</updated><entry><id>l0ne:mongo_index</id><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne/mongo_index?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><title>Найти индексы в коллекции MongoDB</title><published>2022-06-29T10:46:10.042Z</published><updated>2022-06-29T10:56:11.444Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/70/fe/70fe58e6-0455-4ebf-b2f1-62126bd3eb15.png"></media:thumbnail><category term="mongo-db" label="MongoDB"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/ae/58/ae58dc59-248e-40e6-892e-c41e0c6eee18.jpeg&quot;&gt;Найти:</summary><content type="html">
  &lt;figure id=&quot;dXBF&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ae/58/ae58dc59-248e-40e6-892e-c41e0c6eee18.jpeg&quot; width=&quot;4256&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;h8dq&quot;&gt;Найти:&lt;/p&gt;
  &lt;pre id=&quot;j48r&quot; data-lang=&quot;sql&quot;&gt;db.coins.getIndexes()&lt;/pre&gt;
  &lt;p id=&quot;Qois&quot;&gt;&lt;a href=&quot;https://www.mongodb.com/docs/manual/reference/method/db.collection.getIndexes/#required-access&quot; target=&quot;_blank&quot;&gt;https://www.mongodb.com/docs/manual/reference/method/db.collection.getIndexes/#required-access&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;V6by&quot;&gt;Дропнуть:&lt;/p&gt;
  &lt;pre id=&quot;nuy5&quot;&gt;db.coins.dropIndex(&amp;#x27;indexName_1&amp;#x27;)&lt;/pre&gt;
  &lt;p id=&quot;VRfb&quot;&gt;&lt;a href=&quot;https://www.mongodb.com/docs/manual/reference/method/db.collection.dropIndex/&quot; target=&quot;_blank&quot;&gt;https://www.mongodb.com/docs/manual/reference/method/db.collection.dropIndex/&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>l0ne:git-tags</id><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne/git-tags?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><title>Теги в Git</title><published>2021-10-26T09:18:06.344Z</published><updated>2022-06-29T10:50:30.003Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/4e/5d/4e5d1dca-b224-4a83-b6a9-14126a231728.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/9d/f2/9df205a8-e844-407a-8009-b4a4d1f2aa5a.jpeg&quot;&gt;По умолчанию, команда git push не отправляет теги на удалённые сервера. После создания теги нужно отправлять явно на удалённый сервер. Процесс аналогичен отправке веток — достаточно выполнить команду git push origin &lt;tagname&gt;.</summary><content type="html">
  &lt;figure id=&quot;q49n&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9d/f2/9df205a8-e844-407a-8009-b4a4d1f2aa5a.jpeg&quot; width=&quot;5184&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;O6Ku&quot;&gt;&lt;br /&gt;Посмотреть теги&lt;/h3&gt;
  &lt;pre id=&quot;fBJ2&quot;&gt;$ git tag

Output
v1.0
v2.0&lt;/pre&gt;
  &lt;h3 id=&quot;oOZ4&quot;&gt;Сделать тег&lt;/h3&gt;
  &lt;pre id=&quot;rm6b&quot; data-lang=&quot;bash&quot;&gt;$ git tag v1.4-lw
$ git tag

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

v0.1
v1.3
v1.4&lt;/pre&gt;
  &lt;h3 id=&quot;r_sharing_tags&quot;&gt;Обмен тегами&lt;/h3&gt;
  &lt;p id=&quot;zGNN&quot;&gt;По умолчанию, команда &lt;code&gt;git push&lt;/code&gt; не отправляет теги на удалённые сервера. После создания теги нужно отправлять явно на удалённый сервер. Процесс аналогичен отправке веток — достаточно выполнить команду &lt;code&gt;git push origin &amp;lt;tagname&amp;gt;&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;W4jh&quot; data-lang=&quot;bash&quot;&gt;$ 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 -&amp;gt; v1.5&lt;/pre&gt;
  &lt;p id=&quot;69qm&quot;&gt;Если у вас много тегов, и вам хотелось бы отправить все за один раз, то можно использовать опцию &lt;code&gt;--tags&lt;/code&gt; для команды &lt;code&gt;git push&lt;/code&gt;. В таком случае все ваши теги отправятся на удалённый сервер (если только их уже там нет).&lt;/p&gt;
  &lt;h3 id=&quot;_переход_на_тег&quot;&gt;Переход на тег&lt;/h3&gt;
  &lt;p id=&quot;hQuL&quot;&gt;Если вы хотите получить версии файлов, на которые указывает тег, то вы можете сделать &lt;code&gt;git checkout&lt;/code&gt; для тега. Однако, это переведёт репозиторий в состояние «detached HEAD», которое имеет ряд неприятных побочных эффектов.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;KQcI&quot;&gt;&lt;em&gt;Если в состоянии «detached HEAD» внести изменения и сделать коммит, то тег не изменится, при этом новый коммит не будет относиться ни к какой из веток, а доступ к нему можно будет получить только по его хешу. &lt;/em&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;w09k&quot;&gt;Поэтому, если вам нужно внести изменения — исправить ошибку в одной из старых версий — скорее всего вам следует создать ветку:&lt;/p&gt;
  &lt;pre id=&quot;gzOl&quot;&gt;$ git checkout -b version2 v2.0.0&lt;/pre&gt;
  &lt;p id=&quot;m5nB&quot;&gt;Если сделать коммит в ветке &lt;code&gt;version2&lt;/code&gt;, то она сдвинется вперед и будет отличаться от тега &lt;code&gt;v2.0.0&lt;/code&gt;, так что будьте с этим осторожны.&lt;/p&gt;

</content></entry><entry><id>l0ne:scp-copy</id><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne/scp-copy?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><title>Как копировать файл на удаленный сервер</title><published>2021-10-08T17:41:24.003Z</published><updated>2022-06-29T10:55:14.074Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/c5/26/c526f245-43c9-4d6c-94fa-78c1cbca5341.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/f0/f4/f0f4fb89-4b2d-41af-8c58-f8a5675076db.jpeg&quot;&gt;Заходим в директорию от куда необходимо скопировать файл/файлы, например file1.zip в директории /home/ , необходимо скопировать на удаленный компьютер в папку /home2/ . Находимся на первом сервере 192.168.0.1</summary><content type="html">
  &lt;figure id=&quot;aZPx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f0/f4/f0f4fb89-4b2d-41af-8c58-f8a5675076db.jpeg&quot; width=&quot;2500&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;J0bl&quot;&gt;Заходим в директорию от куда необходимо скопировать файл/файлы, например &lt;code&gt;file1.zip&lt;/code&gt; в директории &lt;code&gt;/home/&lt;/code&gt; , необходимо скопировать на удаленный компьютер в папку &lt;code&gt;/home2/&lt;/code&gt; . Находимся на первом сервере &lt;code&gt;192.168.0.1&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;MKcD&quot;&gt;root@192.168.0.1 [/home/]# scp file1.zip root@192.168.0.2:/home2/&lt;/pre&gt;
  &lt;p id=&quot;BYud&quot;&gt;или с любого места&lt;/p&gt;
  &lt;pre id=&quot;Gb9N&quot;&gt;root@192.168.0.1 [/]# scp /home/file1.zip root@192.168.0.2:/home2/&lt;/pre&gt;
  &lt;p id=&quot;KOIO&quot;&gt;после ввода у вас запросит пароль к удаленному серверу.&lt;/p&gt;
  &lt;pre id=&quot;74NE&quot;&gt;root@192.168.0.2&amp;#x27;s password:&lt;/pre&gt;
  &lt;p id=&quot;klSq&quot;&gt;т.е. &lt;code&gt;scp файл пользователь@адрес_сервера (IP или домен):каталог&lt;/code&gt; на удаленном сервере куда необходимо это скопировать&lt;br /&gt;если необходимо скопировать несколько файлов то их можно указать через пробел, т.е.: file1.zip file2.zip ...&lt;/p&gt;

</content></entry><entry><id>l0ne:react-native-styled-components</id><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne/react-native-styled-components?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><title>Styled Components + React Native</title><published>2021-09-24T14:07:30.512Z</published><updated>2021-09-24T14:07:30.512Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/62/4c/624c2932-27db-4a91-82f4-b5c2893c9b13.jpeg"></media:thumbnail><category term="react-native" label="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><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/12/8e/128e5420-53b2-484e-b075-aba1aa21e5e2.jpeg&quot;&gt;И так мы уже установили RN. Сделали навигацию по приложению. На чем писать стили?</summary><content type="html">
  &lt;figure id=&quot;zO6h&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/12/8e/128e5420-53b2-484e-b075-aba1aa21e5e2.jpeg&quot; width=&quot;6000&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;S5Db&quot;&gt;И так мы уже &lt;a href=&quot;https://teletype.in/@l0ne/react-native-init&quot; target=&quot;_blank&quot;&gt;установили RN&lt;/a&gt;. Сделали &lt;a href=&quot;https://teletype.in/@l0ne/react-native-navigation&quot; target=&quot;_blank&quot;&gt;навигацию&lt;/a&gt; по приложению. На чем писать стили?&lt;/p&gt;
  &lt;p id=&quot;HSow&quot;&gt;А почему бы не попробовать &lt;a href=&quot;https://styled-components.com/&quot; target=&quot;_blank&quot;&gt;styled-components&lt;/a&gt;?&lt;/p&gt;
  &lt;h3 id=&quot;eogh&quot;&gt;Ну и как всегда максимально короткая заметка как это все получить у себя на борту.&lt;/h3&gt;
  &lt;p id=&quot;eU62&quot;&gt;Устанавливаем:&lt;/p&gt;
  &lt;pre id=&quot;Fj9F&quot; data-lang=&quot;bash&quot;&gt;yarn add styled-components@5.2.0&lt;/pre&gt;
  &lt;p id=&quot;iBXX&quot;&gt;Теперь импортим и начинаем использовать&lt;/p&gt;
  &lt;pre id=&quot;3Mxx&quot; data-lang=&quot;javascript&quot;&gt;import styled from &amp;#x27;styled-components/native&amp;#x27;;&lt;/pre&gt;
  &lt;p id=&quot;rZI8&quot;&gt;Например мы хотим сделать View, который будет контейнером для нашего текста, а также сделать стилизованный текст:&lt;/p&gt;
  &lt;pre id=&quot;I1SK&quot; data-lang=&quot;javascript&quot;&gt;const Container = styled.View&amp;#x60;
  flex: 1;
  background-color: white;
  align-items: center;
  justify-content: center;
&amp;#x60;;
const Text = styled.Text&amp;#x60;
  font-size: 18px;
  color: blue;
  font-weight: 500;
&amp;#x60;;&lt;/pre&gt;
  &lt;p id=&quot;rwK9&quot;&gt;Все вместе выглядит вот так:&lt;/p&gt;
  &lt;pre id=&quot;zVsv&quot; data-lang=&quot;javascript&quot;&gt;import React from &amp;#x27;react&amp;#x27;;
import styled from &amp;#x27;styled-components/native&amp;#x27;;

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

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

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

</content></entry><entry><id>l0ne:react-native-navigation</id><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne/react-native-navigation?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><title>Делаем навигацию в React Native</title><published>2021-09-22T07:05:12.532Z</published><updated>2021-09-24T14:27:16.808Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/d0/f6/d0f68283-4bd5-4672-b556-280c069e4d3a.jpeg"></media:thumbnail><category term="react-native" label="React Native"></category><tt:hashtag>react_native</tt:hashtag><tt:hashtag>react_navigation</tt:hashtag><tt:hashtag>javascript</tt:hashtag><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/cf/02/cf02dd3b-c3cb-407e-9137-587076398b99.jpeg&quot;&gt;Устанавливаем как написано в документации https://reactnative.dev/docs/navigation:</summary><content type="html">
  &lt;figure id=&quot;ihby&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/02/cf02dd3b-c3cb-407e-9137-587076398b99.jpeg&quot; width=&quot;3600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ZoTs&quot;&gt;Устанавливаем как написано в документации &lt;a href=&quot;https://reactnative.dev/docs/navigation&quot; target=&quot;_blank&quot;&gt;https://reactnative.dev/docs/navigation&lt;/a&gt;:&lt;/p&gt;
  &lt;pre id=&quot;NqWJ&quot; data-lang=&quot;bash&quot;&gt;yarn add @react-navigation/native @react-navigation/native-stack 
yarn add react-native-screens react-native-safe-area-context&lt;/pre&gt;
  &lt;p id=&quot;I9kN&quot;&gt;Для IOS дополнительный шаг:&lt;/p&gt;
  &lt;pre id=&quot;D8Im&quot; data-lang=&quot;bash&quot;&gt;npx pod-install&lt;/pre&gt;
  &lt;p id=&quot;D6ol&quot;&gt;Теперь нужно обернуть все наше приложение в контейнер навигации &lt;strong&gt;NavigationContainer&lt;/strong&gt;. Обычно это делается в &lt;strong&gt;App.js&lt;/strong&gt; или &lt;strong&gt;index.js&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;2Mar&quot; data-lang=&quot;javascript&quot;&gt;import * as React from &amp;#x27;react&amp;#x27;;
import { NavigationContainer } from &amp;#x27;@react-navigation/native&amp;#x27;;

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

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

const Stack = createNativeStackNavigator();

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

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

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

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

</content></entry><entry><id>l0ne:react-native-init</id><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne/react-native-init?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><title>Стартуем React Native приложение</title><published>2021-09-21T12:04:41.650Z</published><updated>2021-09-21T12:04:41.650Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/86/2e/862e45a1-5e9a-4543-b7c6-4783185863b7.jpeg"></media:thumbnail><category term="react-native" label="React Native"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/1d/7e/1d7e9bb6-c3df-4a1c-8ba1-50bf7adad80b.jpeg&quot;&gt;Android запустить:</summary><content type="html">
  &lt;figure id=&quot;3J7k&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1d/7e/1d7e9bb6-c3df-4a1c-8ba1-50bf7adad80b.jpeg&quot; width=&quot;6000&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;ho4Y&quot;&gt;Вы хотите написать мобильное приложение на React Native?&lt;/h3&gt;
  &lt;pre id=&quot;5xjQ&quot; data-lang=&quot;bash&quot;&gt;npx react-native init MyMobileApp&lt;/pre&gt;
  &lt;h3 id=&quot;cWh1&quot;&gt;Вы хотите написать мобильное приложение на React Native с Typescript на борту?&lt;/h3&gt;
  &lt;pre id=&quot;RGsR&quot; data-lang=&quot;bash&quot;&gt;npx react-native init MyMobileAppTS --template react-native-template-typescript&lt;/pre&gt;
  &lt;p id=&quot;6u0U&quot;&gt;Android запустить:&lt;/p&gt;
  &lt;pre id=&quot;FSYU&quot; data-lang=&quot;bash&quot;&gt;npx react-native run-android&lt;/pre&gt;
  &lt;p id=&quot;gvc6&quot;&gt;IOS (только на Mac OS):&lt;/p&gt;
  &lt;pre id=&quot;LUPP&quot;&gt;npx react-native run-ios&lt;/pre&gt;
  &lt;p id=&quot;jFwi&quot;&gt;Приятного полета!&lt;/p&gt;
  &lt;p id=&quot;wTiK&quot;&gt;Тут положу &lt;a href=&quot;https://reactnative.dev/docs/next/environment-setup&quot; target=&quot;_blank&quot;&gt;https://reactnative.dev/docs/next/environment-setup&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>l0ne:install-docker-ubuntu</id><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne/install-docker-ubuntu?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><title>Отправляйтесь в доки</title><published>2021-09-20T14:31:59.600Z</published><updated>2021-09-20T14:33:37.791Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/33/aa/33aadf7f-1aa2-4e9d-805e-a9bbcb588915.jpeg"></media:thumbnail><category term="docker" label="Docker"></category><tt:hashtag>ubuntu</tt:hashtag><tt:hashtag>docker</tt:hashtag><tt:hashtag>docker_compose</tt:hashtag><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/6b/85/6b85fc73-5363-4e3c-895d-c102721f2493.jpeg&quot;&gt;Обновляем пакеты в системе:</summary><content type="html">
  &lt;figure id=&quot;hocc&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6b/85/6b85fc73-5363-4e3c-895d-c102721f2493.jpeg&quot; width=&quot;3600&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;G62H&quot;&gt;Как быстро навернуть докер в ubuntu?&lt;/h3&gt;
  &lt;p id=&quot;f4sO&quot;&gt;Обновляем пакеты в системе:&lt;/p&gt;
  &lt;pre id=&quot;J1jd&quot; data-lang=&quot;bash&quot;&gt;sudo apt update&lt;/pre&gt;
  &lt;p id=&quot;Vo1J&quot;&gt;Ставим вспомогательные пакеты:&lt;/p&gt;
  &lt;pre id=&quot;zVhD&quot; data-lang=&quot;bash&quot;&gt;sudo apt install apt-transport-https ca-certificates curl software-properties-common&lt;/pre&gt;
  &lt;p id=&quot;921u&quot;&gt;Добавим ключ GPG и репозиторий Docker в список источников пакетов APT:&lt;/p&gt;
  &lt;pre id=&quot;j6TD&quot; data-lang=&quot;bash&quot;&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository &amp;quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;yEIS&quot;&gt;Еще раз обновим пакеты и ставим сам докер:&lt;/p&gt;
  &lt;pre id=&quot;898z&quot; data-lang=&quot;bash&quot;&gt;sudo apt update
sudo apt install docker-ce&lt;/pre&gt;
  &lt;p id=&quot;2iIo&quot;&gt;Теперь Docker установлен, демон запущен, и процесс будет запускаться при загрузке системы. Убедимся, что процесс запущен:&lt;/p&gt;
  &lt;pre id=&quot;2c25&quot; data-lang=&quot;bash&quot;&gt;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&lt;/pre&gt;
  &lt;h3 id=&quot;2h6f&quot;&gt;Использование команды Docker без sudo (опционально)&lt;/h3&gt;
  &lt;p id=&quot;T4K6&quot;&gt;По умолчанию, запуск команды docker требует привилегий пользователя root или пользователя группы docker, которая автоматически создается при установке Docker. Если вам это не надо, добавьте имя своего пользователя в группу docker:&lt;/p&gt;
  &lt;pre id=&quot;FtUz&quot; data-lang=&quot;bash&quot;&gt;sudo usermod -aG docker ${USER}&lt;/pre&gt;
  &lt;p id=&quot;SqPr&quot;&gt;После чего перелогинится.&lt;/p&gt;
  &lt;p id=&quot;PHE4&quot;&gt;Чтобы проверить, можете ли вы осуществлять доступ и загружать образы из Docker Hub, введите следующую команду:&lt;/p&gt;
  &lt;pre id=&quot;fvCT&quot; data-lang=&quot;bash&quot;&gt;docker run hello-world&lt;/pre&gt;
  &lt;p id=&quot;Qf8L&quot;&gt;Мои поздравления!&lt;/p&gt;
  &lt;h3 id=&quot;At61&quot;&gt;Установка Docker Compose если нужно&lt;/h3&gt;
  &lt;pre id=&quot;lsUs&quot; data-lang=&quot;bash&quot;&gt;sudo curl -L &amp;quot;https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)&amp;quot; -o /usr/local/bin/docker-compose&lt;/pre&gt;
  &lt;p id=&quot;3hHL&quot;&gt;Права на выполнение:&lt;/p&gt;
  &lt;pre id=&quot;SW8g&quot; data-lang=&quot;bash&quot;&gt;sudo chmod +x /usr/local/bin/docker-compose&lt;/pre&gt;
  &lt;p id=&quot;ykSb&quot;&gt;Проверим версию:&lt;/p&gt;
  &lt;pre id=&quot;xWrU&quot; data-lang=&quot;bash&quot;&gt;docker-compose -v

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

</content></entry><entry><id>l0ne:install-nvm-nodejs</id><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne/install-nvm-nodejs?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><title>Установка Node JS</title><published>2021-09-17T11:34:47.941Z</published><updated>2021-09-20T14:34:13.377Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/70/38/70389541-a102-430e-b25c-3d2930c4881e.jpeg"></media:thumbnail><category term="bash" label="Bash"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/3f/a1/3fa1e244-f20f-4391-ae14-4de5c6c62341.jpeg&quot;&gt;Я ставлю обычно NVM (Node Version Manager). Он позволяет выбирать нужную версию легко и непринужденно. Поехали... Идем в репозиторий https://github.com/nvm-sh/nvm</summary><content type="html">
  &lt;figure id=&quot;Pt4S&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3f/a1/3fa1e244-f20f-4391-ae14-4de5c6c62341.jpeg&quot; width=&quot;3600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;h4Qs&quot;&gt;Я ставлю обычно NVM (Node Version Manager). Он позволяет выбирать нужную версию легко и непринужденно. Поехали... Идем в репозиторий &lt;a href=&quot;https://github.com/nvm-sh/nvm&quot; target=&quot;_blank&quot;&gt;https://github.com/nvm-sh/nvm&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;o2nY&quot;&gt;Устанавливаем:&lt;/p&gt;
  &lt;pre id=&quot;2iwd&quot; data-lang=&quot;bash&quot;&gt;curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash&lt;/pre&gt;
  &lt;p id=&quot;Phuc&quot;&gt;Она устанавливает скрипт nvm для вашей учетной записи. Для его использования необходимо сначала получить ваш файл .bashrc:&lt;/p&gt;
  &lt;pre id=&quot;kpcQ&quot; data-lang=&quot;bash&quot;&gt;source ~/.bashrc&lt;/pre&gt;
  &lt;p id=&quot;7d4A&quot;&gt;Проверяем что NVM установлен:&lt;/p&gt;
  &lt;pre id=&quot;3fw6&quot; data-lang=&quot;bash&quot;&gt;nvm --version

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

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

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

</content></entry><entry><id>l0ne:ssh-keygen</id><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne/ssh-keygen?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><title>Ключ SSH</title><published>2021-09-17T10:49:04.353Z</published><updated>2021-09-20T14:34:39.691Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/25/e3/25e39a59-851a-4eda-a813-bc898af7b1af.jpeg"></media:thumbnail><category term="bash" label="Bash"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/33/24/3324cb5a-19b9-4e49-a562-65289b5681c2.jpeg&quot;&gt;Как сгенерить ключ ssh на сервере Linux?</summary><content type="html">
  &lt;figure id=&quot;2SIz&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/33/24/3324cb5a-19b9-4e49-a562-65289b5681c2.jpeg&quot; width=&quot;3600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;yqvy&quot;&gt;Как сгенерить ключ ssh на сервере Linux?&lt;/p&gt;
  &lt;pre id=&quot;E0ig&quot; data-lang=&quot;bash&quot;&gt;ssh-keygen&lt;/pre&gt;
  &lt;p id=&quot;5tks&quot;&gt;Отвечаем на вопросы. Выводим на экран:&lt;/p&gt;
  &lt;pre id=&quot;StXy&quot; data-lang=&quot;bash&quot;&gt;cat ~/.ssh/id_rsa.pub&lt;/pre&gt;
  &lt;p id=&quot;SLe1&quot;&gt;Надеюсь помог...&lt;/p&gt;

</content></entry><entry><id>l0ne:postgres-positive-check</id><link rel="alternate" type="text/html" href="https://teletype.in/@l0ne/postgres-positive-check?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=l0ne"></link><title>Только позитив с Postgres</title><published>2021-09-16T07:19:59.304Z</published><updated>2021-09-20T14:35:34.018Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/f0/05/f005b441-28ff-43c7-8861-344a2917503d.jpeg"></media:thumbnail><category term="postgresql" label="postgresql"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/76/5d/765d2a83-26c7-43f5-ae43-07a0e5883ea4.jpeg&quot;&gt;ALTER TABLE &quot;products&quot; ADD CONSTRAINT &quot;total_check&quot; CHECK (total &gt;= 0);</summary><content type="html">
  &lt;figure id=&quot;W1BW&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/76/5d/765d2a83-26c7-43f5-ae43-07a0e5883ea4.jpeg&quot; width=&quot;6000&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;HVRE&quot;&gt;ALTER TABLE &amp;quot;products&amp;quot; ADD CONSTRAINT &amp;quot;total_check&amp;quot; CHECK (total &amp;gt;= 0);&lt;/p&gt;
  &lt;p id=&quot;PkJA&quot;&gt;Нам нужно сохранить значение в базе, которое не может принимать отрицательное значение, например зарплата. Мы создали Integer и вскоре получаем баг, что оно отрицательное и твой код не сработал 🤤&lt;/p&gt;
  &lt;p id=&quot;rIOH&quot;&gt;Добавить проверку на уровне базы postgres можно таким SQL запросом:&lt;/p&gt;
  &lt;pre id=&quot;Waph&quot; data-lang=&quot;sql&quot;&gt;ALTER TABLE &amp;quot;employees&amp;quot; ADD CONSTRAINT &amp;quot;positive_salary_check&amp;quot; CHECK (salary &amp;gt; 0);&lt;/pre&gt;
  &lt;p id=&quot;emfF&quot;&gt;Или в виде knex миграции, если вы понимаете о чем я ;)&lt;/p&gt;
  &lt;pre id=&quot;Tjwh&quot; data-lang=&quot;javascript&quot;&gt;import * as Knex from &amp;#x27;knex&amp;#x27;;

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

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

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