Статьи
11 прочтений · 1 год назад
Подключение js кода к API, CORS и зачем он нужен. Работая над проектом, мы столкнулись с проблемой заголовков CORS. Для приема данных требовались входящие заголовки, которые не отправлялись с сервера. Итак, что же такое CORS? CORS - стандарт передачи данных между источником и приемником. Передавая данные, он также передает заголовки, с помощью которых и происходит чтение данных. Итак, принимающее запрос устройство получает заголовки, сверяет их со списком разрешенных источников и только после этого принимает запрос. Все современные веб-браузеры используют политику одинакового источника. То есть веб-приложения, которые используют API, могут спрашивать данные только с домена, с которого шла загрузка, если cors-заголовки не используются. CORS заголовки существует для защиты данных. При появлении таких тегов, как <img>, <script>,<audio> и многие другие безопасность пользователей оказалась под угрозой, потому что вместо картинки или аудио мы можем получить скрипт, который запустится на устройстве и принесет некоторые проблемы. Стоит сказать о том, что сервера также должны поддерживать заголовки cors, иначе ответ прочитан не будет. В нашем случае требовалась настройка nginx, так как именно он использовался в нашем проекте, в качестве обратного прокси сервера. Настроить отправку заголовков можно и другими способами, например, apache, выбор зависит от стека, который используется в проекте. #programming #programmer #it #программирование #програмист #сервер #клиент #язык #Python #NodeJS #TimeTable #React #API #CORS #безопасность
9 прочтений · 1 год назад
Продолжаем тему резервного копирования данных. Сегодня рассмотрим более современные способы создания бэкапа. Бесконечно-инкрементальный бэкап — это метод создания резервной копии данных, при котором каждый последующий бэкап содержит только инкременты. Подразумевается, что после первоначального полного резервного копирования, будут создаваться только инкрементальные бэкапы. Это позволяет сократить время создания бэкапа и сэкономить дисковое пространство. Однако при восстановлении данных может потребоваться больше времени, так как нужно восстановить все изменения. Синтетический полный бэкап — это метод создания полной копии данных, используя уже существующие инкрементальные бэкапы. Он периодически воссоздаёт полный бэкап из инкрементальных. Это позволяет сократить время создания полной копии и уменьшить нагрузку на сеть и хранилище данных. Смарт-бэкап — этот метод позволяет комбинировать полный, дифференциальный и инкрементальный бэкапы. Это позволяет сократить время создания бэкапа и снизить нагрузку на сеть и хранилище данных. Кроме того, данный метод может самостоятельно управлять хранилищем. Каждый из этих методов имеет свои преимущества и недостатки, поэтому выбор метода зависит от требований к безопасности данных и от конкретных потребностей. Важно помнить, что регулярное создание резервных копий данных — это необходимое условие для обеспечения безопасности информации. #backup #бекап #programming #programmer #it #программирование #програмист
13 прочтений · 1 год назад
Продолжая тему резервного копирования, хочется рассмотреть виды резервного копирования и их особенности. Существуют традиционные и более современные методы бэкапа. Сегодня обсудим первый тип, к нему можно отнести такие бэкапы, как: • Полный • Инкрементальный • Дифференциальный Полный бэкап – это создание полной копии данных. Это самый простой и очевидный способ. Рассмотрим плюсы и минусы. Преимущества: • Простота • Скорость восстановления данных Недостатки: • Занимает много места • Долгий процесс создания копии данных Инкрементальный бэкап – строится на полном бэкапе, а затем сохраняются лишь изменившиеся файлы с момента последнего создания бекапа (инкременты). Таким образом, для разового бэкапа, он не отличается от полного бэкапа, но при регулярных бэкапах, он получает преимущество. Плюсы: • Занимает сравнительно мало места • Скорость создания бэкапа (так как сохраняются лишь изменившиеся фалы) • Может часто выполняться Минусы: • Долгий процесс восстановления данных (так как нужно учитывать все инкременты) • В случае утраты или повреждения одного инкремента, данные будут потеряны. Дифференциальный бэкап – строится на полном бэкапе, а затем сохраняются лишь изменившиеся файлы, изменившиеся с момента создания полного бэкапа. Преимущества: • Высокая скорость создания бэкапа • Быстрое восстановление данных • Может часто выполнятся Недостатки: • Со временем, может занимать много места Сравнительная таблица данных бэкапов представлена на рисунке. Более современные методы строятся на гибриде всех этих методов, про эти методы, их преимущества и недостатки мы планируем рассказать в следующих постах. #backup #бекап #programming #programmer #it #программирование #програмист
2 прочтения · 1 год назад
Резервное копирование - это процесс создания копии данных, или сокращённо - бекап. Как говорится, люди делятся на два типа, кто не делает бекапы и те кто уже делает. При кажущейся очевидности многие пренебрегают данным способом обеспечения безопасности данных. Так зачем же делать бекапы? Их делают для снижения риска потери данных. Так как различные события могут угрожать целостности данных. От банального удаления по ошибке, взлома и уничтожения злоумышленником, до выхода из строя жёсткого диска. Итак, польза бекапов понятна, но возникает новая проблема, как их создавать? Ответом могут стать десятки и сотни специализированных программ, которые лучше выбирать с учётом своей операционной системы и потребностей. Сложностей с использованием не должно быть, так как существует огромное количество руководств и советов для новичков. Важно автоматизировать процесс бекапов, так как легко забыть запускать его самостоятельно. Также стоит уделить внимание тому, куда сохраняется бекап. Дело в том, что сохранять бекап нужно на другой диск, иначе в нём мало смысла. Существуют различные варианты, от второго диска или флешки, до облачного диска. Я рекомендовал бы второй вариант, так как у компаний, которые предоставляют услуги облачного хранилища надежное хранение данных и риск потери данных в облаке близится к нулю, а значит, бекап обязательно сохранится. В следующей части планирую затронуть виды резервного копирования и их особенности. #backup #бекап #programming #programmer #it #программирование #програмист
6 прочтений · 1 год назад
Сегодня немного об обучении нейросети. Чтобы нейросеть могла выполнять поставленные перед ней задачи, ее нужно обучить. Это довольно долгий и сложный этап в ее разработке, однако один из самых важных. Для обучения нейросети нужен запрос с верным ответом на него. Сейчас есть много возможностей для обучения нейросетей. Это базы, где представлены запросы и ответы на эти запросы. Это базы с картинками, по которым нейросеть учится определять, что на картинке находится. База с голосовыми записями, где нейросеть учится отделять шум от голоса и определяет, что именно сказал человек. Есть даже псевдонейросеть, созданная для обучения других нейросетей. Даже хорошо обученная нейросеть не всегда правильно выполняет все задачи, она может допустить ошибку, перепутать или просто не понять. Поэтому когда нейросеть выполняет важную работу нужно следить за качеством выполнения. С обучением нейросети могут возникнуть две основные проблемы: недообучение и переобучение. Недообучение связано с использованием слишком простых примеров для обучения, в связи с чем нейросеть ошибается больше, чем должна. Переобучение напротив связано с использованием при обучении сложных, но однотипных примеров, поэтому нейросеть много ошибается на примерах, которых не было в обучении. Значит, обучение нейросети нужно проводить не слишком долго, правильно подобрав для этого обучающую выборку. #programming #programmer #it #программирование #програмист #нейросеть #нейроны #machine_learning #learning #переобучение
1 прочтение · 1 год назад
Как работает нейросеть, в чем её отличие от программы. Нейросеть - это направление искусственного интеллекта, активно применяющееся в решении лёгких задач. Строение нейросети напоминает строение нашей нервной системы: она состоит из нейронов, которые объединены синапсами. Самая простая нейросеть имеет всего один слой и несколько основных типов нейронов: принимающие информацию, обрабатывающие ее и выдающие результат. У сложной нейросети слоёв может быть много. Теперь небольшое сравнение с человеком. Человеческий мозг содержит 86 миллиардов нейронов. Самый большой искусственный интеллект на текущий момент - GPT, ChatGPT 3 версии содержит 175 миллиардов параметров. Если уже решили, что человек слабее нейросети, то это не так. Нейроны человека имеет сложную структуру, а поэтому не могут сравниваться с нейронами нейросети. В чем отличие от программы? Программа работает по определенному алгоритму, заранее прописанному разработчиком. У нейросети нет алгоритма, хотя есть правила, согласно которым она решает задачи, поставленные перед ней. Обучение нейросети. Нейросеть использует веса для принятия решений. Изначально они расставлены рандомно, поэтому необученная нейросеть будет много ошибаться. В процессе обучения нейросеть будет сама менять веса в случае, где результат верный. Таким образом нейросеть обучается. Выходит, нейросеть может быть использована для выполнения каких либо задач, но полностью заменить человека ими не получится. #programming #programmer #it #программирование #програмист #нейросеть #нейроны #синапс #программа #обучение #chatGPT
1 прочтение · 1 год назад
Расскажу про проект, который находится в стадии разработки. Это сайт StormFox написанный на React и NodeJS. На сайте будут представлены проекты и рассказано о них. Там также будут публиковаться посты, вместе с ними мы планируем новостную ленту, где будут рассказаны новости команды и этапы разработки проектов. Почему выбрали такой стек? О преимуществах и недостатках NodeJS было рассказано в предыдущем посте. React - это мощная библиотека для разработки пользовательского интерфейса. Отличается высокой производительностью, возможностью многократно использовать компоненты, что позволяет не дублировать код. Однако у него плохая документация, что немного компенсируется большим сообществом. В дополнение к описанным плюсам и минусам React давно хотелось изучить, поэтому мы взяли его для проекта. React и NodeJS идут в одном пакетном менеджере, а также основаны на одном и том же языке, поэтому их очень удобно использовать в связке. На сайте команды будет встроенный SMM-планер, который будет рассылать посты в другие соцсети. SMM-планер позволит автоматизировать публикацию постов команды во все соцсети. На текущий момент у команды 3 соцсети, публиковать посты во всех мы иногда забываем, поэтому и пришли к мнению, что идеальным проектом для нас сейчас будет именно сайт команды с планером. На текущий момент мы планируем разработку планера на Python, так как нам важна скорость написания кода, не важна скорость выполнения кода. Также у Python есть удобные для нашей задачи библиотеки. Подробнее про разработку планера мы расскажем позднее. #programming #programmer #it #программирование #програмист #сервер #клиент #язык #Python #NodeJS #StormFox #React #smm_планер
4 прочтения · 1 год назад
Сегодня рассмотрим и сравним языки для написания серверной части сайта, а именно Python и NodeJS. Выбор языка, зависит от характеристик, которые необходимы приложению, но сильные и слабые стороны языков полезно знать. Итак, расскажу немного про данные языки: - Python - высокоуровневый язык программирования. - NodeJS - фреймворк JavaScript, созданный для серверной части веб-приложений. Скорость разработки. В скорости разработки я отдам предпочтение Python. Оба языка обладают простым и мощным синтаксисом, который позволяет быстро писать сложные проекты. У обоих языков большое комьюнити и большинство проблем, с которыми может встретится программист уже имеет решение. Однако комьюнити и количество проектов у Python на gitHub все же выше. Скорость отработки кода. NodeJS в этом пункте обгоняет Python, но не значительно. Если у нас лёгкое приложение без сложных вычислений, то вероятно разницу мы не заметим. А вот на больших значениях масштабы начнут расти и NodeJS благодаря своему мощному движку будет гораздо быстрее. Однако если рассматривать машинное обучение и научные вычисления, быстрее окажется Python. Масштабируемость NodeJS является более гибкой системой благодаря своей ассинхронности. А Python обладает огромным количеством библиотек, в том числе для масштабируемости. Поэтому расширение приложения прекрасно подойдёт для обоих языков, хотя если мы расширяем большую систему, в Python могут возникнуть сложности. Поэтому предпочтение в гибкости отдается NodeJS. Итоги: - Скорость разработки выше у Python - Производительность выше у NodeJS - Большое комьюнити у обоих вариантов - Python обладает большим количеством библиотек - NodeJS более гибкий и масштабируем - NodeJS предназначен для веб-приложений #programming #programmer #it #программирование #програмист #сервер #клиент #язык #Python #NodeJS #StormFox@
17 прочтений · 1 год назад
Сегодня речь пойдёт о реализации API для проекта "Расписание РТУ МИРЭА" Начнём с введения про API. API — описание способов, взаимодействия одной компьютерной программы с другими. В нашем случае мы реализуем интерфейс, который позволит по запросу пользователя выдавать необходимые данные из СУБД. Как я рассказывал в предыдущем посте про расписание, за актуальность данных в СУБД отвечает парсер. Итак, для чего нам может потребоваться API? Есть несколько причин, расскажу по порядку. Во-первых, планировалось создать вебсайт, а также ботов в нескольких соцсетях - это клиенты. API позволит унифицировать общение с СУБД. То есть, при смене СУБД, способа хранения данных или типов данных, нам не придётся изменять обращения к СУБД у клиентов, нам достаточно изменить обращение API к СУБД. Клиенты продолжат работать, так как обращались через API. Во-вторых, так как все запросы пройдут через API, то появится возможность оптимизировать запросы к СУБД. Также мы сможем добавить СУБД для хранения версий расписания, которое меняется в процессе семестра. В-третьих, если API имеет статический ip адрес, то может быть доступен для других разработчиков, которые хотят получать изменения в расписании, но не хотят нагружать свою систему или создавать парсер. В-четвёртых, нам необходимо обрабатывать ситуацию, когда наступают сессия или каникулы. Дело в том, что во время сессии было бы хорошо давать расписание экзаменов, а во время каникул сообщать, что наступили каникулы. Для разработки API был выбран язык Golang. На данный момент API находится в стадии разработки. Возможно, в дальнейшем будут рассказаны подробности разработки. #server #client #programming #programmer #it #программирование #програмист #сервер #клиент #архитектура #GO #Golang #API #TimeTableMirea
21 прочтение · 1 год назад
Продолжаем тему проекта "Расписание РТУ МИРЭА" Одна из целей была максимально быстро получать изменения в расписании, но при этом не нагружать сервер излишне сильно. Так как процесс синхронизации базы данных должен проходить регулярно, нам важно, чтобы парсер был максимально оптимизированным. Был выбран язык программирования Golang, так как он достаточно быстрый в исполнении и удобен в разработке. Для получения расписания, было решено написать собственный парсер. Парсер — это программа, сервис или скрипт, который собирает данные с указанных веб-ресурсов, анализирует их и выдает в нужном формате. В нашем случае, мы хотим найти все ссылки на файлы с расписанием на портале МИРЭА, затем скачать эти файлы и узнать, есть в них новые данные или нет Идея заключается в проверке даты и содержимого файла с последней его версией внесённой в СУБД. Если отличий нет, то у нас актуальное расписание и мы можем не тратить время и ресурсы на чтение файлов и последующую запись в СУБД. Что касается чтения файлов, тут возникают основные трудности. Дело в том, что единого шаблона расписания для вуза, то ли нет, то ли его не всегда придерживаются. То есть что-то похожее на шаблон присутствует, но периодически нарушается. Также проблемой станет, что файлы имеют разные расширения. На данный момент xls и xlsx, что также усложняет работу для парсера. Полностью решить эти проблемы на данный момент не удалось. Для того, чтобы адаптироваться к различным шаблонам используется алгоритм, который не привязан к конкретным строкам и номерам ячеек, он свободно проходится по файлу и считывает из него данные. Для решения проблемы с xls файлами реализовано преобразование их к формату xlsx. Основным решением проблем является обработка ошибок и сбор статистики, какие файлы автоматически не были прочитаны. После нахождения таких файлов усовершенствуется алгоритм, поэтому с каждой итерацией увеличивается количество считанных файлов. Таким образом, мы реализовали автоматизированное обновление базы данных расписания до актуального состояния. Нам остаётся сделать интерфейс для предоставления расписания пользователю, но об этом поговорим в следующий раз.
3 прочтения · 1 год назад
Сегодня хочется рассказать о проекте, который буду выполнять совместно с командой. Проект "Расписание РТУ-МИРЭА". Собственно, проект будет собирать расписание для всех курсов, институтов и форм обучения в МИРЭА, где источником данных будет выступать официальный сайт РТУ МИРЭА. В проекте будет реализован парсер, для получения актуального расписания, СУБД, для хранения расписания, API, телеграмм бот и сайт для предоставления данного расписания клиентам. Расскажу про стек технологий. В качестве СУБД остановилось на PostgreSQL, так как она стабильная и отлично подходит для наших целей. Для парсера и API был выбран язык Golang, так как хотелось изучить этот язык, а также у него высокая скорость исполнения кода, что нам и нужно, чтобы расписание обновлялось максимально быстро. Сайт разрабатывается на NodeJS + React, как и в случае с Golang одной из причин является желание изучить данные языки программирования. Телеграм бот будет реализован на языке Python. В отличии от API и парсера, здесь больших нагрузок не ожидается, так что на первом месте становится скорость разработки и удобные библиотеки. Сопутствующие технологии проекта - это git, для удобной системы контроля версий, а также github, для взаимодействия команды. А также, проект будет развернут в среде разработки docker, для удобства. Дело в том, что у разработчиков разные ОС, что значительно усложняет процесс развёртывания проекта. Но перенос его в docker снизит влияние ОС и позволит разрабатывать проект без дополнительных настроек. На этом всё, про успехи разработки и статус работы над проектом будет рассказано в следующих постах. P.S. когда минимальная версия проекта будет готова мы добавим ссылку на сайт, а пока... Ссылка на github проекта: https://github.comgithub.com/...rea проекта!
7 прочтений · 1 год назад
Сегодня мы поговорим о языках и их типизации. Речь могла бы пойти о кулинарии и рецептах приготовления языка, но вы не в той группе , пойдемте-ка рассуждать о языках программирования. Итак, начнем с классификации типизации и термине типизация в общем. Типизация - определение языком программирования типа переменной. Например, "1"+"1"=="11", но 1+1==2. Почему так? В первом случае мы поставили кавычки, тем самым сказали, что это строки. Второй случай - кавычек нет, значит, это числа. Один плюс один равно не двум, а одиннадцати!!! Разрушив это заблуждение, я могу переходить дальше. Есть динамически и статически типизированные языки. Различие в проверке, если у статической типы проверяются перед запуском программы, то у динамической во время ее работы. Примерами языков со статической типизацией являются Си, Go, Java, а динамической - Python, PHP, JavaScript. У каждой из типизацией есть свои плюсы и минусы. К плюсам статической можно отнести: - Скорость выполнения - При компиляции выполняется проверка, а при ошибке сразу сообщат Плюсы динамической: - Легко при обучении языку - Быстрое написание кода - Удобно описывать алгоритмы, где заранее неизвестен тип переменной К минусам статической можно отнести все плюсы динамической и наоборот. Теперь о слабой и сильной типизации. Внимание! Статическая типизация не сильная и не слабая, как и динамическая, хотя на ринг их не выпускали, так что доказательств нет. Сильно типизированный язык - язык с четкими правилами типизации, которые нельзя обойти. В таких языках нужно указывать типы при инициализации переменной(когда переменной присвоено значение и она запущена в работу). Такая типизация, например, в Java, Python. Плюсы сильной типизации: - При запуске можно получить или ошибку или корректную работу приложения - Скорость работы высокая, так как не нужно проверять типы - Определенное преобразование переменных Слабо типизированным язык называется, когда переменные не привязаны к конкретному типу. Например, PHP, Си, JavaScript. Плюсы слабой типизации: - Быстрая разработка из-за отсутствия необходимости думать над типом данных - Меньшее количество кода - Просто работать с выражениями, где даны разные типы данных, а придти нужно к одному