Есть несколько причин следующей ошибки, при попытке подключения к репозиторию в GutHub:
ERROR: Repository not found.
fatal: Could not read from remote repository.
Самые распространенные причины - ключи не добавлены в аккаунт GitHub или неправильно настроены на локальном компьютере. Но я столкнулся с другой ситуацией, и алгоритм решения не был описан в интернете.
У меня было несколько ключей для доступа к разным репоизториям. Как переключаться между SSH ключами?
Если вы не уверены, что у вас установлены SSH ключи, посмотрите эту статью: Настройка SSH ключей для Github
Если у вас несколько ключей, то алгоритм переключения между ними такой
ssh -v git@github.com
You've successfully authenticated, but GitHub does not provide shell access
ssh-add ~/.ssh/my-key/mykey
Could not open a connection to your authentication agent.
eval "$(ssh-agent -s)"
Agent pid 1111
ssh-add ~/.ssh/my-key/mykey
Identy added: ... (your@mail.com)
Ctrl + Левый клик мышки
.
Мы можем переопределить функцию для вывода описания Категории товаров Woocommerce.
У меня бывают ситуации, когда мне нужно в описании вставить JavaScript код или добавить шорткоды, при этом стандартные фильтры, которые добавляют параграфы и разрывы строк ломают верстку
Ниже приведена функция, которую вы можете вставить в файл functions.php
.
Она уберет вставку автопараграфов, позволит добавлять чистый html и JS код в описании категорий товаров Woocommerce и при этом даст возможность использовать шорткоды.
function woocommerce_taxonomy_archive_description() {
if ( is_product_taxonomy() && 0 === absint( get_query_var( 'paged' ) ) ) {
$term = get_queried_object();
if ( $term && !empty( $term->description ) ) {
add_filter( 'term_description_add_shortcode', 'do_shortcode', 11 );
echo '<div class="term-description">' . apply_filters( 'term_description_add_shortcode', $term->description ) . '</div>';
}
}
}
Рассказываем как добавить SSH ключи для Github
Чтобы была доступна команда git
из коммандной строки, нужно установить Git с оф сайта git-scm.com. Вместе с ним установится git bash.
Нужно настроить доступ по SSH к репозиторию. Для этого нужно сгенерировать ключи.
Чтобы проверить установлены ли ключи, в git bash воспользуйтесь командой ls -al ~/.ssh
Если в ответ получите No such file or directory
, значит нужно создать ключи.
$ ssh-keygen -t ed25519 -C "your_email@example.com"
Нужно будет ввести фразу пароль
$ eval "$(ssh-agent -s)"
Возвратит что-то типа
Agent pid 1232
Дальше добавляем ключи в ssh-агент, он потребует ввести фразу пароль:
$ ssh-add ~/.ssh/id_ed25519
Копируем в буфер ключ
$ clip < ~/.ssh/id_ed25519.pub
Вставляем их в аккаунт на Гитхабе. Settings - SSH and GPG keys
Вкратце расскажу про свое рабочее место. В основном речь пойдет о программах, которые я использую.
В Хроме включаю синхронизацию, чтобы не переносить данные и следующие плагины (перечисляю только связанные с разработкой)
Также нужно в Гугл Хроме отключить кэширование файлов. Иначе, при изменении изображений, CSS или JS файлов вы можете не увидеть изменений на сайте. Так как Хром загрузит их из кэша.
Более правильный метод добавлять к именам файлов хэши, тогда вы гарантированно будете подгружать из заново при изменении. Но мы не можем влиять на все сайты, иногда нам нужно дорабатывать чужие проекты.
Если разработка на PHP, то нужен сервер, и, скорее всего, нужна база данных. Для того, чтобы установить все враз я использую Open Server.
Когда то давно я использовал другую сборку под названием Denwer, но сейчас она уже не актуальна.
Пожалуй единственное, что я настраиваю в Open Server, это отправка почты через удаленный SMTP сервер. Это нужно, чтобы тестировать формы обратной связи на сайтах и прочие функции, требующие отправки почты.
Сначала я пользовался только Sublime text (о нем ниже), переход на полноценную IDE был неочевиден. Сперва было не удобно, но в этой IDE скрыт такой мощный функционал, что сейчас уже возврат к Sublime text как к основному редактору уже просто невозможен.
В PhpStorm я устанавливаю бесплатный шрифты JetBrains Mono. Помимо того, что он красивый, он добавляет многие спецсимволы для программистов.
Также я меняю настройки форматирования кода по умолчанию и цветовую схему на Sublime-подобную - monokai.
Из плагинов к Шторму добавляю:
Он незаменим, когда нужно быстро отредактировать файл не создвавя проект. Просто открываешь и редактируешь. Можно даже файл не создавать. Просто скопировал код, отредактировал, вернул на сайт. В PhpStorm такого нет и к этому я долго не мог привыкнуть.
Плагины, которые я использую в Sublime
{ "keys": ["ctrl+shift+c"], "command": "expand_selection_to_quotes"}
Это файловый менеджер. Одна из причин, по которой мне не комфортно работать с макбуком это отсутствие хорошей альтернативы Total commader. Под mac os есть MC (Midnight Commander), но он не дотягивает.
Total Commander может очень многое, например
Это система контроля версий. Чтобы была доступна команда git
из коммандной строки, нужно установить Git с оф сайта git-scm.com. Вместе с ним установится git bash.
Читайте статью как сгенерировать SSH ключи и подключиться к GitHub по SSH.
Для того, чтобы установить Gulp, нужно установить Node js. Node - это JavaScript сервер на основе движка Гугл хрома V8. Скачать можно на сайте nodejs.org
Для сборки проектов использую Gulp 4. Набор пакетов меняется от сборки к сборке в зависимости от потребностей. Но он примерно такой:
По сути, webpack это сборщик модулей для JavaScript приложений. Когда webpack собирает ваше приложение, он буквально строит дерево зависимостей, в которых нуждается каждый модуль, и генерирует один или несколько бандлов.
Начиная с версии 4 webpack не требует наличия конфигурационного файла для сборки проекта. Тем не менее он очень гибко настраивается.
Для начала вам необходимо понять базовые концепции
Этот документ описывает общий обзор этих концепций, в то же время по ссылкам вы можете посмотреть более детальные примеры.
Точка входа показывает какой модуль webpack должен использовать первым для построения внутреннего дерева зависимостей. Webpack выяснит от каких других модулей и баблиотек зависит эта точка входа (напрямую или косвенно).
По умолчанию это значение ./src/index.js
, но вы можете установить другое значение в настройках, например
webpack.config.js
module.exports = {
entry: './path/to/my/entry/file.js'
};
Вывод сообщает webpack место куда будет сохранен бандл и имя бандла. По умолчанию это ./dist/main.js
.
Вы можете это настроить в поле output
.
webpack.config.js
const path = require('path');
module.exports = {
entry: './path/to/my/entry/file.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'my-first-webpack.bundle.js'
}
};
В этом примере мы использовали свойства output.filename
и output.path
чтобы сообщить webpack место и имя результирующего файла.
Возможно, вы обратили внимание, что модуль path
импортируется в первой строке. Это основной модуль Node.js для управления путями файлов.
Из коробки webpack понимает только JavaScript и JSON файлы. Загрузчики позволяют webpack обрабатывать другие типы файлов и конвертировать их в модули, которые могут быть загружены в ваше приложение и добавилены в дерево зависимостей.
Обратите внимание, что возможность импорта любого типа модулей, таких как css-файлы, это функция характерная для webpack и не поддерживается другими сборщками или таск-ранерами. Это оправдано, поскольку позволяет разработчикам строить более точное дерево зависимостей.
В общем случае, загрузчики имеют два свойства в конфигурационном файле:
webpack.config.js
const path = require('path');
module.exports = {
output: {
filename: 'my-first-webpack.bundle.js'
},
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
}
};
Конфигурация выше определяет свойство "правила" (rules
) для единственного модуля с двумя обязательными свойствами test
и use
. Они говорят webpack компилятору следующее:
"Когда ты проходя через path встречаешь файл с расширением '.text' внутри выражения require()/import
, используй raw-loader для преобразования прежде чем добавить в бандл".
Обратите внимание, что регулярные выражения для шаблонов поиска файлов не оборачиваются в кавычки, например, /.txt$/
это не тоже самое, что и '/.txt$/'
или "/.txt$/"
. Первый вариант дает webpack инструкцию искать файлы оканчивающиеся на txt, а другие искать файлы по абсолютному пути '.txt', это скорее всего не то, что вы ожидаете.
xxl
для размеров экранов на 1400px
и более.rem
(1.5rem
или примерно 24px
, вместо 30px
). Теперь:
.g-*
, .gx-*
и .gy-*
, чтобы задавать вертикальные/горизонтальные отступы..no-gutters
теперь .g-0
position: relative
, поэтому если нужно вернуть такое поведение, то воспользуйтесь классом .position-relative
.order-*
, которые редко использовались. Остались только классы с .order-1
до .order-5
..media
box-sizing: border-box
теперь используется только в bootstrap-grid.css
, вместо глобального..display-5
и .display-6
table
можно применять классы цвета бордера table.table.table-bordered.border-primary
.thead-light
и .thead-dark
в пользу классов .table-*
, которые можно применять ко всем элементам таблицы (thead, tbody, tfoot, tr, th, td
).pre-scrollable
.text-justify
<ul>
и <ol>
стандартный браузерный padding-left
сброшен с 40px
на 2rem
label
.custom-*
стили объединены с обычными
.custom-check
теперь .form-check
.custom-check.custom-switch
теперь .form-check.form-switch
.custom-select
теперь .form-select
.custom-file
и .form-file
заменены на стили выше в .form-control
.custom-range
теперь .form-range
.form-control-file
и .form-control-range
.input-group-append
и .input-group-prepend
.form-group, .form-row, .form-inline
label
в формах теперь требует наличия класса .form-label
.form-text
больше не задает свойство display
<select>
с классом multiple
Добавлен новый компонент
В примерах теперь используются иконки
background
вместо .badge-*
(например, .bg-primary
вместо .badge-primary
).rounded-pill
вместо .badge-pill—use
hover
и focus
для бейджей внутри ссылок и кнопокpadding
для бейджей с .25em/.5em
на .35em/.65em
padding, background-color, border-radius
--bs-breadcrumb-divider
для изменения без компиляции CSS..btn-block
из утилит. Если требуется, то оборачивайте кнопки в .d-grid
и .gap-*
.hover
и active
pointer-events: none;
.card-deck
. Оберните карточку в класс колонок и добавьте родительский .row-cols-*
контейнер для создания серий карт..card-columns
.carousel-dark
вариант с темными текстом и индикаторамиМы уже слышали, что ASUS готовит TUF Gaming модель RTX 3060 Ti, но теперь смогли получить фотографии этой карты. В целом дизайн кулера идентичен RTX 3070 TUF Gaming. Радиатор идентичен, и карта, использует ту же конструкцию печатной платы.
RTX 3070 и RTX 3060 Ti используют одинаковый графический чип GA104. Но мощность 3070 - 220 Вт, а 3060 Ti - 200 Вт. Поэтому были внесены конструктивные изменения в компоненты подачи питания. Мы можем увидеть их, посмотрев на расположение конденсаторов на задней панели. Важный момент, в отличие от RTX 3070 TUF с двумя разъемами для подключения питания, версия RTX 3060 Ti будет иметь единственный 8-контактный разъем. В конструкции системы охлаждения сохранена компоновка с тремя кулерами и толщиной 2,5 слота.
NVIDIA официально представит свою модель GeForce RTX 3060 Ti 2 декабря 2020 года. RTX 3060 Ti TUF GAMING OC (overclocking вариант) должен стоить немного выше рекомендованной NVIDIA розничной цены, которая, как ожидается, составит 399$. С другой стороны, TUF non-OC может быть ближе к этой цене.
ASUS GeForce RTX 3060 Ti TUF Gaming OC, Source: VideoCardz
ASUS GeForce RTX 3060 Ti TUF Gaming OC, Source: VideoCardz
Фото упаковки этой модели, которые утекли в сеть на прошлой неделе:
ASUS GeForce RTX 3060 Ti TUF Gaming OC packaging, Source: PC Master Race Facebook
Перевод статьи Amando Abreu на Medium
Сразу вывод статьи: подавляющее большинство компаний используют грейд "джуниор" только для того, чтобы платить тебе меньше денег, ни для чего больше.
Вы не джуниор, если:
В реальности, вы не можете оставаться джуниором более 6 месяцев. Если вы знаете как использовать Git и задеплоить проект - вы уже не джуниор.
Это дискуссионная тема. Что делает вас сеньором?
В реальности это сочетание зрелости и знаний
Давайте определим что такое зрелость:
В психологии зрелость - это способность адекватно реагировать на окружающую среду.
Вы можете на самом деле наизусть знать каждый язык программирования и алгоритмы машинного обучения. Но ваш уровень зрелости будет серьезным импульсом к званию сеньора. Это идет рука об руку с эффектом Даннинга-Крюгера.
Небольшая разбивка как каждый уровень видит мир.
Джуниоры испытывают нехватку знаний. Они не уверены какое решение принять и поддаются влиянию менеджеров (особенно это опасно, если менеджер без технического образования).
Мидлы на 100% уверены, что то, что они читали на прошлой неделе это абсолютно верный выбор и надо все переписать прямо сейчас. Технический знания обычно очень высокие, но могут быть оторваны от потребностей бизнеса и приводить к накоплению нерешенных технических вопросов.
Знает, что он не знает, и собирает отзывы со всех уровней бизнеса, прежде чем принять решение, и, возможно, даже переопределить проблему.
Большинство людей остаются Мидлами всю свою жизнь, потому что в этот момент вы очень уверены в своих технических способностях (и довольно часто ваши технические возможности действительно высоки), но вы находитесь в техническом пузыре, слишком изолированном от других частей бизнеса. Не все проблемы стоит решать с помощью кода, и это знает Сеньор.
Чем меньше вы думаете, что знаете, тем больше данных вы будете собирать на разных уровнях компании, чтобы помочь в принятии решений. Вместо того, чтобы предполагать, вы должны убедиться, что дела на самом деле так и обстоят.
Если у вас высокий уровень технических знаний, то в ту минуту, когда вы понимаете, что многого не знаете - из других частей бизнеса - вы начинаете переход от Мидла в Сеньору. Именно здесь синдром самозванца ударит сильнее, чем когда-либо прежде.
Это то, что я слышу чаще всего и лично чувствую больше всего:
Я перестал развиваться
Во многих компаниях легко остановиться в прогрессе.
Если вы чувствуете, что вам нужно сменить работу, начните с себя:
Чтобы успешно вести переговоры, вам нужно быть достаточно уверенным, чтобы уйти, достаточно хорошо владеть своими навыками, чтобы можно было быстро найти работу в любом другом месте.
Многие пользовались поиском файлов в своей операционной системе. Например, "*.txt", где * это любая последовательность символов, а ? - это один произвольный символ. Так вот. Это не регулярные выражения. Подобные выражения называются файловыми глобами или Групповыми символами (wildcards).
Дальше про регулярные выражения
По аналогии, специальные символы, которые не несут буквальный смысл, называются метасимволами. Все остальные символы, несущие буквальный смысл, называются литералами.
Под строкой подразумевается не переменная с типом string, а любой текст в его начале и после символа переноса строки. Аналогично конец строки.
^Отчет
- найдет все строки, начинающиеся со слова "Отчет"txt$
- найдет все строки заканчивающиеся на "txt"Специфика заключается в том, что они совпадают с определенной позицией в строке, а не с символами текста.
Выражение ^$
совпадет с пустой строкой.
Символьный класс [квадратные скобки] - это очень важное понятие. Потому что одни и те же символы могут обозначать совершенно разные вещи внутри него и снаружи. Например, точка "." за пределами символьного класса является метасимволом и обозначает любой литерал. А внутри скобок [.] воспринимается буквально и будет совпадать с точкой.
[...] - в квадратных скобках можно перечислить символы, которые могут находиться в данной позиции.
Выражение [e]
- совпадает с буквой "е", а выражение [ea]
- совпадет с любой из этих букв.
Внутри символьного класса дефис - это интервал. Например, [0123456789]
= [0-9]
Выбрать все html-теги заголовков можно конструкцией <H[1-6]>
.
Если дефис стоит в символьном классе первым, то он не может обозначать интервал, поэтому он будет интерпретироваться как литерал, то есть буквально.
[^..] - класс совпадет с любыми символами, не входящими в него. Внутри символьного класса "^" имеет уже другой смысл.
[^1-6]
- совпадет с любыми символами не принадлежащими интервалу 1-6.
| - означает "или". Например, Bob|Robert
. Используется как метасимвол вне символьного класса. То есть внутри [|]
он будет воспринят буквально, как поиск вертикальной черты.
Подвыражения, объединенные таким способом называются альтернативами.
Конструкцию выбора можно отделять от остального выражения круглыми скобками, то есть gray|grey
= gr(a|e)y
.
Если нужно, чтобы метасимвол воспринимался буквально, нужно поставить перед ним слеш \
Другими словами - экранированный метасимвол становится литералом. Например поиск скобок в тексте должен выглядеть так \(
и \)
.
Аналогично слеш превращает некоторые литералы в метасимволы. Например, \t
- знак табуляции.
Квантификаторы определяют количество экземпляров элемента после которого стоят.
Метасимвол | Обозначение | Пример |
---|---|---|
. (точка) | заменяет любой символ (кроме переноса строки) | |
? (знак вопроса) | предшествующий ему символ является не обязательным | (July|Jul) = (July?) |
+ (плюс) | предшествующий символ встречается один или несколько раз | |
* (звездочка) | предш. символ встречается любое количество раз, в том числе 0 раз | |
{min, max} | количество совпадений от min до max | [a-zA-Zа-яА-Я]{3,12} - букв должно быть не менее 3, но и не более 12 |
{0,1} | Эквивалентно метасимволу ? | |
{1,} | Эквивалентно метасимволу + | |
{0,} | Эквивалентно метасимволу * | |
( ) круглые скобки | Применяются для группировки, сохранения совпавшего текста или ограничения конструкций выбора | |
\t | Табуляция | |
\n | Перенос строки | |
\r | Возврат каретки | |
\s | Любой пропуск. Объединяет в себе пробелы, табуляции, перенос строки, возврат каретки | |
\S | Все, что не относится к \s | |
\b | Граница слова. После него должны следовать словесные символы и тогда это начало слова. Либо перед ним должны стоять словесные символы и тогда это конец слова. | |
\w | Любая цифра, буква или знак подчеркивания | [a-zA-Zа-яА-Я0-9_] |
\W | Все, что не относится к \w | |
\d | Цифры | [0-9] |
\D | все, что не относится к \d | [^0-9] |
Позволяют искать текст, который совпал с предыдущей частью выражения.
Например, нам нужно найти повторяющееся слово в тектсе. \b([a-zA-Z]+) \1
- здесь метасимвол \1
будет ссылкой на подвыражение в скобках. Сначала мы ищем начало слова, за ним будут следовать одна или несколько букв, затем пробел и потом эта же последовательность букв.
Кажой паре скобок будет соответствовать номер \1 \2 \3 ...
.
Пары скобок нумеруются в соответствии с порядковым номером открывающейся скобки слева направо. Поэтому можно вкладывать скобки друг в друга.
Часто бывает так, что в одном выражении применяется несколько пар круглых скобок. Некоторые из них нужны для группировки текста с последующим применением к нему квантификатора, некоторые для конструкций выбора, некоторые для ссылок.
Когда мы ссылаемся на скобки, удобно отделить остальные пары скобок не предназначенные для ссылок.
Для этого существует конструкция (?: )
. Это обеспечивает группировку без сохранения. То есть этим скобкам не будет присвоен номер.
\1 \2 \3
эти скобки можно не учитывать