-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
9cac35e
commit a44efba
Showing
5 changed files
with
109 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
+++ | ||
draft = false | ||
date = 2023-08-27T07:08:08+04:00 | ||
title = "День третий" | ||
description = "Поиски сокровища" | ||
slug = "" | ||
authors = ["Viktar Ivanou"] | ||
tags = ["python"] | ||
categories = [] | ||
externalLink = "" | ||
series = ["magic-world"] | ||
+++ | ||
|
||
# Сегодня мы отправимся в лес... | ||
|
||
![Beautiful Forest](/forest.jpg) | ||
|
||
Рядом с замком растет небольшой лес, в котором растут 10000 деревьев. Все деревья на вид совершенно обычные, но иногда самое обычное, бывает особенным. | ||
|
||
Лазая по библиотеке мы узнали как нам отыскать особенное дерево. Внутри каждого дерева есть что-то. В нашем случае это json ответ от сервера. Можем считать что каждый символ - это колечко(которые мы считаем, чтобы узнать возраст дерева). Если мы сможем посчитать количество символов в первой тысяче деревьев, а потом отнять эту цифру от количества символов в последней тысяче. Мы и узнаем какое дерево нам нужно. | ||
|
||
Не сложно, но должно быть интересно :) Я рекомендую остановиться здесь и пойти попробовать посчитать. Ну или можно продолжить чтение. | ||
|
||
# Разбор | ||
|
||
Задача на самом деле не очень сложная. По большому счету все что нам нужно - это "вскрыть" 1000 деревьев, посчитать колечки, потом сложить все цифры вместе. Сделать то же самое с последней тысячей и отнять одно от второго. | ||
|
||
Каждый раз когда нам предстоит сделать одно и то же с большим количеством объектов, первое, что приходи в голову это использовать цикл. В нашем случае мы будем использовать for: | ||
|
||
```python | ||
|
||
for i in range(1000): | ||
... | ||
``` | ||
|
||
Можно сказать что функция range() позволит нам пробежаться по определенному диапазону значений. В нашем случае от 0(потому что мы не указывали стартовый номер) до 1000. И с каждым разом i будет увеличиваться на 1. | ||
|
||
Например: | ||
|
||
```python | ||
for i in range(100, 300): | ||
# i == 100 | ||
# i == 101 | ||
.... | ||
# i == 299 | ||
``` | ||
|
||
Верхний порог не включается. Поэтому в нашем примере i не станет 300, а закончиться на 299. Об этом важно помнить. Потому что в одна из самых распространённых ошибок в программировании, это ошибка на единичку. :) | ||
|
||
```python | ||
sum([1, 2, 3, 4, 5]) # равно 15 | ||
``` | ||
|
||
Функция sum() может помочь нам сложить все значения внутри списка. Я думаю это полезная возможность о которой стоит помнить. А функция len() может рассказать нам сколько символов хранится в строке(не только это, но для нашего примера...) | ||
|
||
```python | ||
len('I know how to count!') # Равно 20 | ||
``` | ||
|
||
Еще один важный момент. Когда бы смотрим содержимое папки с помощью listdit(). Нет гарантии что элементы будут отсортированы. Поэтому, чтобы быть уверенными в том что элементы находятся в нужном нам порядке, их придется отсортировать отдельно. О сортировке мы уже немного говорили в первый день. Можно заглянуть туда, если нужно | ||
|
||
Имея все эти кусочки пазла осталось только собрать их воедино, и узнать результат. Вперед! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
+++ | ||
draft = true | ||
date = 2023-08-26T20:46:15+04:00 | ||
title = "Почему мне нравиться терминал" | ||
description = "Я в очередной раз воодушевился работой в терминале" | ||
slug = "" | ||
authors = ["Viktar Ivanou"] | ||
tags = ["bash", "linux", "terminal"] | ||
categories = ["linux", "bash"] | ||
externalLink = "" | ||
series = [] | ||
+++ | ||
|
||
# Терминал | ||
|
||
![the matrix](/the-matrix.webp) | ||
|
||
Еще со времен моего детства, когда я в первый раз смотрел "Матрицу", меня впечатлила работа "операторов". Когда они смотрели в свой монитор и писали комманды в терминал. И в это время на экране происходили очень не понятные, но очень круто выглядящие процессы. После этого были еще фильмы и еще терминалы :) И я мечтал о том, что когда нибудь и у меня будет возможность стать одинм из них, заклинателей терминала! Но когда у меня наконец появился доступ к компьютеру, интернет был еще редкостью, а в нашем небольшом поселке найти книги по работе с компьютером было не найте. Уже тем более "Как работать в консоли". Поэтому, моим желаниям научиться так же круто делать штуки в коммандной строке, не суждено было сбыться. И вместо этого я прожег свое время играя в The Elder Scolls. | ||
|
||
![The Elder Scrolls III: Morrowind](/morrowind.jpg) | ||
|
||
Но прошло время, Х колличесто лет. Мин изминенился, изменился и я. Интернет перестал быть редкостью. Контент наполнил Ютуб и т.д.И по разным причинам я решил перейти на линукс как свою основную, и (почти) единственную систему. И мои приключения в мире коммандной строки начались снова. Но очень скоро интерес мой поугас т.к. я не совсем представлял(на том этапе) зачем мне нужен терминал, если я могу сделать все тоже самое как "обычный смертный". Но чем больше я пользовался терминалом, тем больше мне это нравилось. Такие вещи как настроить яркось, или режим для второго монитора, перестали быть "волшебством по нажатию кнопки". Я стал больше понимать что происходит на самом деле. И мне это нравилось. | ||
|
||
Когда я снова стал увлекаться разработкой и программированием. Любовь к работе в консоли принесла свои результаты. Когда мне понадобилось создать более 5000 файлов, которые бы соответсвовали названиям книг из списка. Это было просто: | ||
|
||
```bash | ||
$ cat titles_list.txt | xargs touch | ||
``` | ||
|
||
И всё, готово! | ||
|
||
Для этого же проекта мне нужно было создать 10.000 файлов и в каждый файл я зотел поместить текст полученный с api. Можно было конечно написать скрипт на (вставить желаемый язык прогроммирования). Но мне хотелось прокачать свои консольные навыки. Тем более, что совсем недавно я узнал о gnu parallel который позволяет запускать задачи паралельно друг другу. | ||
|
||
Для начала я создал 10.000 пустых файлов: | ||
|
||
```bash | ||
$ printf "joke_number_%d\n" {1...10000} | xargs touch | ||
``` | ||
|
||
После этого: | ||
```bash | ||
$ ls | parallel 'curl -H "Accept: application/json" https://icanhazdadjoke.com/ -o {}' | ||
``` | ||
|
||
Можно было использовать for цикл. Можно было объеденить эти две комманды в одну. Наверное можно было сделать лучше. НО, уменя получилось! Получилось настолько хорошо, что я привысил лимит запросов на сервер в минуту. | ||
|
||
И что мне нравиться больше всего - это то, что комманды больше не кажуться мне магическими заклинаниями, в которых я ничего не понимаю, но если сделать так... то все получается как надо. Наоборот, каждая команда в отдельности это маленький кусочек лего. Который выполняет свою задачу. И комбинируя одни и теже "кусочки лего" можно сделать все, что тебе захочиться. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.