Дневник разработчицы
407 subscribers
111 photos
9 videos
14 files
145 links
Откровенные истории о проектах, работе, учебе и открытиях в мире программирования. Присоединяйтесь и вдохновляйтесь вместе со мной!
Download Telegram
Чувствую себя кул-хацкером) Подключилась к Instance по ssh, нашла там название запущенного докер контейнера, выполнила на контейнере exec, запустив django shell, а потом запустила скриптик, который мне выгрузил нужную статистику.
Вроде мелочь, но путь тернистый. До этого я только sql-запросы к продовой базе тыкала.

Команды:

чтобы получить список контейнеров
docker exec --interactive CONTAINER_ID django-admin shell

Ну, а дальше в интерактивном режиме импорт и запуск нужного скрипта.

Кстати, раньше я не понимала нафига вообще нужен этот shell, зачем все так упорото все прогоняют через shell. Теперь это мой чуть ли не основной инструмент для проверки своих идей в процессе написания кода. Почти каждую функцию проверяю в shell. Ну, или если не джанга, то аналогично запуск python в консоли отличный вариант для тестирования скриптов. #Docker
Еще хочу поделиться. Не знала как отправлять файлы с помощью Python.
Так как я не хотела заморачиваться со скачиванием файла или подключением s3 для сохранения, решила воспользоваться методом отправки файла в telegram api для ботов (sendDocument). Вот, пришлось разобраться как крепить файлы к post запросу. Получилась такая функция:

url = f"https://api.telegram.org/bot{settings.TOKEN}/sendDocument"
caption = "описание файла"
data = {"chat_id": chat_id, "caption": caption}
with open(self.file_name, "rb") as file:
files = {"document": file}
response = requests.post(url, data, files=files)
add_log(self.name, response.text)
return response

Как-то так. #Python
После JS в скрипте на python пыталась на каждой строчке ; ставить и тело функции чуть не внесла в {}.

Прохожу AJAX.

Перелопатила кучу всего, чтобы придумать с помощью какой приблуды запустить свой js, в итоге оказалось, что того как запускает шаблоны pycharm вполне достаточно, чтобы отправлять post-запросы. Лектор предлагал openserver и еще что-то подобное, мне не понравилось.
Дальше лектор кладет в папочку php-скрипт, чтобы обрабатывать запросы, но у меня то Pycharm, я не могу его осквернять.
Полезла запускать flask. Конечно, я не через template на flask запустила html (хотя что мне мешало).
Короче, ошибка, не тот домен. corsы-фигорсы (защита от кросдоменных запросов), стаковерфлоу, библиотека flask_cors, чтобы добавить разрешение для запросов с другого порта localhost. Это я еще почти молчу, что сначала я пыталась фласк поднять в докере, но что-то пошло не так, поэтому психанула и запустила просто в venv прямо в винде. Ненуачо.
Тяжела и неказиста жизнь простого программиста.
Полдня в топку на то, чтобы просто выпендриться и сделать по-своему условную инфру для прохождения курса, еще и довольно криво. Зато, блин, опыт. Но все равно чет в докере не вышло запустить. Странно. Очень странно.

Тем временем в лекциях по AWS (да я их не бросила) vpc (сети, подсети). Понравилось выражение лектора - "Приступим, помолясь". Это, блин, слоган для работы с инфрой, особенно на AWS. Когда буду настраивать деплой на новую платформу, тоже буду приступать, помолясь, поставлю рядом шаманский бубен и заряженную воду, вдруг поможет. Нет, AWS хорош, но СЛИШКОМ СЛОЖНА!

Мой прогресс: js 54/124; aws 31/88. Кажется, до конца недели не успею. #AWS, #JS, #Учеба, #Курсы
Пришел очередной отчет из wakatime. Забавно, что больше 70% приходится на браузер. И это не только во время прохождения курса, но и при реализации проектов примерно такая же доля. Не потому что прокрастинация и вот это все, а потому что чтение документации, поиск решений и тд и тп приходится именно на долю браузера.

Если что, я не разбиралась как там точно проводятся замеры, но плагин wakatime у меня стоит в Pycharm и в браузере, а также подключен github.

К слову, если не подключать плагин к браузеру, то всю активность будет считать как программирование. Статистика будет нечестная, зато красивая) #Учеба, #Tools, #Работа
Мой дашборд с разбивкой по дням. #Учеба, #Tools, #Работа
Табы или пробелы?
Вот так кодишь себе тихонечко и даже не догадываешься, что используешь пробелы, а не табы, пока вдруг не пойдешь настраивать eslint.

Никогда бы не подумала, что это вообще имеет хоть какое-либо значение, кроме холиваров.
Если что, для python есть PEP https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces
Pycharm сам все делает по-красоте, вам даже думать не надо. Он просто по умолчанию ставит пробелы.
Я свято верила, что использую табы, пока не начала тыкать в код и не обнаружила, что на самом деле там пробелы.

Осталось решить вопрос с js, сколько пробелов ставить? 2 или 4?) https://learn.javascript.ru/coding-style#otstupy
2 выглядит лаконичнее, учитывая многослойность кода на js. Зато 4 пробела читабельнее, на мой взгляд. Оставлю 4.

Пока искала ответы на свои вопросы, нашла статью на хабре https://habr.com/ru/company/mailru/blog/331696/

Зато я сегодня узнала о том, где находятся настройки code style в ide.
Для Pycharm также можно скормить конфиг eslint, если очень надо. #Python
Ребята с табами, я с вами, но вот какой оказался конфуз) #Tools
Не могу не поделиться базовыми принципами ООП #Учеба
Когда я училась в школе, у меня не было дома интернета, компьютер был еще с Windows 95, 1.5 ГБ памяти у жесткого диска, а еще я пользовалась дискетами.
О программистах я думала как о совсем непонятных людях и грезила журналистикой. Писала статьи и таскала их на дискетах в местную редакцию. Я жила в маленьком провинциальном городе.

История моей учебы довольно раздолбайская. Изначально я поступила на очку на специальность по дорожным машинам, бросила, так как не понимала зачем оно мне. Потом филфак, журналистика - заочка, вечерка. Короче, я так ничего и не окончила.

А потом в 22 года я случайно попала в IT как менеджер. И так до 31 года я руководила - фрилансерами, проектами, командами, отделами. Всему уже училась в процессе. Книжки, курсы, статьи, коллеги.

Я немного жалею, что не знала и не понимала еще в школе, что такое программирование и как я могу в нем реализоваться. Я искренне восторгаюсь программистами, кто начал еще в детстве постигать это ремесло.

Однако, сейчас у меня есть все возможности, чтобы изучать программирование и при этом осознавать каждый свой шаг, так как есть большой опыт управления проектами. Я не просто пишу код, я понимаю зачем он нужен и что на самом деле я от него хочу.

А также у меня есть офигенное рабочее место. Хоть это и материальное, но как же классно, иметь удобный стол, стул, монитор, хороший пк для работы.

Но все это мелочи по сравнению с кайфом от невероятного потока новой информации, возможностей и результатов реализации своих идей. Когда я делаю то, что задумала, и оно получается. #Жизнь, #Истории
👏1
Python VS JS. Функция reduce.
В Python https://pythonz.net/references/named/reduce/
В JS https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

Смысл функции в том, что она последовательно пройдет по всем элементам массива и на каждой итерации будет выполнять заданное действие с текущим элементом и результатом с предыдущей итерации.

Питонисты не рекомендуют пользоваться этим методом, так как читабельность кода - наше все. И я за, лучше уж цикл написать, так проще и понятнее.

Но JS - гангстер, он не боится грязи.
Я применила эту функцию для поиска максимального id из списка со словарями.


{id: 1, label: 'Going to learn React'},
{id: 2, label: 'That is so good'},
{id: 3, label: 'I need a break...'},
{id: 4, label: "That's good"}
]

const max_id = data.reduce((max, current) => current.id > (max.id ? max.id : 0)? current.id : max.id)
Как будет это выглядеть в Python:


{"id": 1, "label": 'Going to learn React'},
{"id": 2, "label": 'That is so good'},
{"id": 3, "label": 'I need a break...'},
{"id": 4, "label": "That's good"}
]
max_id = 0
for item in data:
if item['id'] > max_id:
max_id = item['id']
или короче, но менее читабельно вот так:
max_id = max([item['id'] for item in data])
На самом деле если присмотреться к коду JS, то можно увидеть, что я в функцию передаю другую неназванную функцию, сократив написание в виде стрелочной функции () => {}, убираю тело, условия возврата записываю в виде тернарного оператора (правда ? если да : иначе), в котором пишу еще одно условие в виде тернарного оператора, чтобы обойти ситуацию, когда в первой итерации у меня ничего нет в переменной max (подставляю 0).
max.id ? max.id : 0
Так вот, я грущу от JS из-за таких конструкций. Если для того, чтобы объяснить что делает 1 строчка кода, нужно рассказывать 5 минут, то это нечитаемая строчка кода.
Иногда от лектора курса JS слышу: "Давайте запишем это красиво", и дальше он сокращает код, делая из 5 строчек одну, но менее читабельную. Так вот, такое "красиво" не значит хорошо или умно. Вот придерживаться code style - это красиво. В остальном, чем проще, тем понятнее. #JS, #Python
Python vs JS. Сделать первую букву заглавной.

Python - все просто, функция str.capitalize(), плюс еще есть str.title(), которая делает все первые буквы в словах заглавными. https://pythonz.net/references/named/str.capitalize/

JS. Не, я так не умею, я могу только str.toUpperCase(). Делай сама... Ну ок:
str[0].toUpperCase() + str.slice(1)
Блин, js, ну ты же язык для создания интерфейсов... Почему?
¯\(°_o)/¯ #JS, #Python
Верни мне... верни мне... верни мне мой друг, и снова верни мне...

```const WithRestoService = () => (Wrapped) => {
return (props) => {
return (
<RestoServiceContext.Consumer>
{
(RestoService) => {
return <Wrapped {...props} RestoService={RestoService}/>
}
}
</RestoServiceContext.Consumer>
)
};
};


```Навеяло https://youtu.be/4TsqlT0rfJI

Компонент высшего порядка. HOC - один из паттернов JS.
Если что - текущий пример из курса)

PS. Я все еще не могу добить курс по JS, я уже отложила AWS и фигачу только JS. Осталось 16 лекций. #JS, #Учеба
JS.xmind
7.7 MB
Я дошла до последнего раздела и осознала, что он практический на нативном JS. Возможно, я к нему вернусь, но позже. Всю теорию я закончила, а это значит, пора возвращаться к своему проекту и начать пилить интерфейс.
Как и обещала, прикладываю свой конспект по этому курсу. Сразу скажу, что js я конспектировала гораздо менее тщательно, чем Python. Ну, и напомню, что самому писать такой конспект гораздо полезнее, чем пользоваться чужим.
Фух. 🤪💪
Надо будет еще потом AWS добить. #JS, #Конспекты
Очередная тру-стори про AWS. Помните, я писала, что ограничила доступ к бд? Привет счета за внутрисетевой перегон данных, так как база данных и инстансы находятся в одном регионе, но в разных зонах. Сижу, разбираюсь как это исправить. #AWS
Что проще перенести: 1 инстанс с бд или 2 сервисных?

Сервисные, конечно, особенно на Elastic Beanstalk. Эта штука позволяет создать рядом новое окружение, поднять на нем нужную версию приложения и просто плавно переключить url с одного окружения на другое. Вжух - и легким движением руки приложение переходит на другой инстанс.
Заодно решила попробовать spot-запрос на инстансы. Надо только на всякий случай поднять второй инстанс, чтобы был резервный. Но для начала послежу как пойдут расходы в бюджете.
Что неожиданно, но приятно, так как я внесла сервисные инстансы в ту же подсеть, что моя бд, они автоматом получили к ней доступ без указания security group. Очевидно, наверное, что так и должно было случится, но я далека от понимания инфраструктуры, поэтому для меня это было внезапно.
Надо будет допройти курс по AWS.
И кстати, включила логи в CloudWatch. Оказывается, это можно сделать, поставив 1 галочку в настройках. Больше не надо скачивать логи, хехей!

Все больше радуюсь возможностям AWS. Правда, пока разберешься с их документацией и настройками, все волосы можно себе оборвать, плюс еще влететь на много денег. #AWS
День инфры. Обновила версию платформы. Одно приложение совершенно спокойно обновилось. Со вторым пришлось плясать с бубном. Все попытки просто обновиться были бесполезны. Пришлось создавать еще одно окружение с новой платформой, а потом опять же свапать. Так прошло удачно. Почему я сразу этого не сделала, когда меняла зону? СТРАШНО!)
Правда, страшно.
(⊙_⊙;) #AWS
Повторила базовую структуру для React-приложения, предложенную в курсе, для своего проекта. Задолбалась создавать папочки. Спасибо Django за то, что базовая структура генерится автоматически. #React