Skip to content

Instantly share code, notes, and snippets.

@wthoutanymmries
Last active June 20, 2024 19:44
Show Gist options
  • Select an option

  • Save wthoutanymmries/abac22492d4d44bf97f45a76e163a1d8 to your computer and use it in GitHub Desktop.

Select an option

Save wthoutanymmries/abac22492d4d44bf97f45a76e163a1d8 to your computer and use it in GitHub Desktop.

Выбор ОС для разработки

Разработку легче всего вести на Linux машине. Многие инструменты либо не доступны на Windows, либо сложны в использовании/установке/конфликтуют с другими инструментами. Рекомендуетя прочесть эту секцию польностью.

WSL - Windows Subsystem for Linux

Самым простым и быстрым варианом будет WSL. Эта опция позволяет Windows запустить параллельно с собой Linux ядро непосредственно на железе, одновременно проводя глубокую с ним интеграцию (например, предоставляя доступ к файловой системе). Эта опция установит только инструменты работы с командной строкой без графического интерфейса.

Инструкция по установке и настройке WSL от Microsoft

Никогда не пользовался WSL, но слышал много хороших отзывов об этом интрументе.

Dual Boot

Идеальным вариантом будет dual boot (двойная загрузка/две операционные системы) с одним из дистрибутивов Linux, однако этот метод требует некоторой сноровки и уверенности в администрировании операционных систем, так как как Windows так и Linux могут затереть загрузчик другой системы, эффективно делая её загрузку невозможной. Загрузчик можно восстановить, это не так сложно, но эта тема выходит за рамки данного руководства.

Если/когда Вы остановитесь на варианте dual boot, перед установкой второй операционной системы необходимо создать копию всеех важных файлов, так как их можно с лёгкостью потерять, ошибившись при форматировании диска.

Перед установкой дистрибутива непоредственно на железо рекомендуется ознакомится с ним в виртуальной машине (например, Oracle VM VirtualBox) и определиться с выбором DE - Desktop Environment - Gnome или KDE Plasma. Linux дистрибутивы на странице загрузок предоставляют выбор между DE, однако стоит помнить, что устновка некольких DE одновременно возможна, но может привести (и вероятней всего приведёт) к нестабильности ОС, поэтому с выбором DE следует определиться перед непосредственной установкой ОС.

Рекомендуемые дистрибутивы Linux

Ubuntu

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

Особенности: стабильность, постоянство.

Ubuntu, если Вы предпочитаете Gnome
Kubuntu, если Вы предпочитаете KDE Plasma

Arch-based дитрибутивы

Если Вы желаете использовать самые свежие версии пакетов и инструментов как только они становятя доступными, то следует обратить внимание на данное семейство дистрибутивов.

Стандартный менеджер пакетов рекомендуется дополнить AUR-helper'ом paru для простоты установки проприетарных программ и пакетов из AUR-git-репозиториев. Paru является оболочкой для стандартного менеджера пакетов pacman и обладает полной его функциональностью. Многие AUR-helper'ы имеют набор команд идентичный pacman. Эту особенность следует учитывать при чтении документации инструментов разработчика в разделе Arch Linux Install Guide.

Пример:

yay -S visual-studio-code-bin

идентично

paru -S visual-studio-code-bin

однако

pacman -S visual-studio-code-bin

завершится с ошибкой, так как пакет visual-studio-code-bin является AUR-git-репозиторием, что очевидно из его опиcания в базе. Пример обычного пакета.

Пвкеты установленные при помощи pacman и AUR-helper'а можно обновить при помощи одной команды, которая выполняет полное обновление системы

paru -Syu

Пакеты установленные из AUR-git-репозиториев можно обновить только при помощи AUR-helper'а установившего пакет. Не рекомендуется использовать более одного AUR-helper'а.

Подробнее об установке и удалении пакетов/программ

man pacman

или на соответствующей cтранице в ArchWiki.

Особенности: rolling release model, свежие пакеты, простота использования, великолепный wiki, великолепная база и менеджер пакетов, тонкость настройки.
Недостатки: сложность в настройке ванильного дистрибутива.

Manjaro

Все плюсы Arch Linux с минимумом головной боли. Процесс установки полностью автоматизирован, реализован с помощью графического интерфейса и напоминает установку Ubuntu.

Рекомендуетя для ознакомления.

Manjaro

Arch Linux

Ванильный Arch Linux требует глубокого понимания Linux систем для правильной установки и настройки. Установка выполняется вручную из командной строки. Перед установкой на железо следует составить для себя подробную инструкцию по установке и настройке и отладить её в виртуальной машине. Для данных инструкций нормален долгий период их разработки.

Рекомендуетя для академического ознакомления в свободное время. Либо чисто для флекса лол. Посетите r/unixporn сабрэддит для знакомства с тем, на что способна кастомизация Linux.

ArchLinux

Полезные ресурсы

  • explainshell.com предоставляет диаграммы, объясняющие команды командной строки Linux, если у них присутствует man-страница.
  • DistroTube - туториалы, гайды, новости Linux, интересные команды, обзор дистрибутивов.

Редактор кода

Visual Studio Code. Нет редактора лучше. Устанавливайте нужные раширения под нужный язык.

Я сооветую тему Deepdark Material так как она ставит наиболее читаемые акценты.

Веб-разработка

Перед углублением в данную тему рекомендуетя ознакомиться с ванильными JavaScript (например, здесь или здесь), HTML и CSS.

Перед серьёзным началом разработки рекомендуется ознаомиться (хотя бы поверхностно, желательно, до уровня комфортной работы с типами) с TypeScript. Видео обязательное к просмотру.

Рекомендуемые фреймворки/библиотеки/инструменты:

  • ReactJS - самый использумый фреймворк для веб разработки. Отличная документация. Фреймворк можно использовать для кроссплатформенной разработки (одно приложение для веб, MacOS, Windows, iOS, Android. Для мобильной разработки рекомендуется использовать expo).
  • Tailwindcss - CSS фреймворк и система дизайна значительно облегчающая работу с CSS и дизайн красивых компонентов. Пользуясь данным инструментом, можно научиться пользоватья CSS. Отличная документация.
  • shadcn/ui - "библиотека компонентов" написанных с ипользованием React и Tailwindcss. Отличное качество кода, простота использования и модификации. Пластичность. Поддержка accessibility features. Рекомендуется к ознакомлению.
  • NextJS - фреймворк над фреймворком. Использует React как ядро, объединяя frontend и backend в одну тесно интегрирванную кодовую базу.
  • trpc - инструмент, позволяющий использовать Typescript и на клиенте и на сервере. Значительно облегчает работу с типами.
  • zod - валидатор. Сам проверяет соответствие входящих JSON-данных типовой схеме. Значительно упрощает работу с типами.
  • electron - кроссплатформенные desktop приложения при помощи JavaScript, HTML и CSS.

Первый проект React рекомендуется создать при момощи Vite. Необходимо будет установить среду исполнения NodeJS (наибольшая совместимость) или Bun (наивышая скорость при меньшей совместимости, так как среда исполнения достаточно новая и всё ещё находится в активной разработке).

При высоком уровне ознакомленнсти с темой рекомендуется ознакомиться с шаблоном Create T3 App.

Полезные ресурсы

  • MDN - extensive wiki on all things web dev by Mozilla.
  • Postman - инструмент для отладки API.
  • Regex101 - инструмент для отладки регулярных выражений.
  • Web Dev Simplified - туториалы
  • Theo - новости dev, парадигмы разработки, лучшие практики. Контент может быть ложным для понимания поначалу, но очень полезен in the long run (мой русский перестаёт работать лол).
  • Hyperplexed - recreation of stunning CSS effects. General web dev focused staff.
  • Fireship - dev news, short 100 second tutorials.

Artificial Intelligence

Moderm LLMs have become powerful enough to encourage their use during education and in simple apps due to their ability to generate JSON output.

I recommend using Llama 3 derivatives since they are top performing LLMs that can actually run locally at a decent speed. Stay away fron unquantized models. They are way too big, waste both RAM and VRAM and are slow to boot. I recommend sticking with 8bit quantized models since they offer a decent compromise between performance and quality. Just look for the one that fits in your VRAM. You can go a bit lower with quantization level if your hardware isn't running the problem fast enough but that will lower the model quality.

For running the models locally I recommend looking at llama.cpp project. It usually implements all the latest advancements in LLMs and the documentation is quite thorough and it can serve the models over http. llama.cpp also supports GBNF grammars (essentially regular expressions) which lets you force the model to comply with certain schema. Check the examples for more infromation.

You can search for models on Hugging Face. If you wannt them to be compatiblw with llama.cpp search for the ones with GGUF in their name. That file extension also means that the model is quantized.

You can consult (or browse) the r/LocalLLaMA subreddit for the best performing models and/or any questions.

Alternitevely you can check apps like ollama (also supports serving the model over http) or Text Generation Web UI.

To actually use the model you can serve it over http and consume the server's output in any desired language since it's all JSON anyway.

Helpful resources

  • LangChain - tools for NLP (Natural Language Processing)
  • node-llama-cpp - Node.js bindings for llama.cpp.
  • mCoding - youtube channel that focuses on Python programming language.

You can also google python nlp libraries for more instruments.

Game development

Since I am not as familiar with this topic as I am with other ones I will just provide a simple list of resources which might be helpful on your jorney.

Helpful Resources

  • Unreal Engine 5 - state-of-the-art free open source high performance graphics engine with a huge library of free high quality assets in it's store. Be sure to visit the store monthly and hoard as many of them as you can since the giveaway items are changing every month (sometimes you can even get 400$ value for free).
  • Quixel Megascans - The largest 3D scan library. It provides free high quality assets for Unreal engine users.
  • Metahuman - high quality character crreation. Free for Unreal Engine users. Is still in early access.
  • C++ Weekly With Jason Turner - outstanding YouTube channel about all things C++. Focuses heavily on optimization but should also have beginner tutorials. Relevant since UE5 uses C++.
  • Unity - another free game engine. Is harder to develop for since it does not provide many primitives and abstractions UE5 does. Not really recommended since recent controversies but is a great tool nevertheless. C# is a bit easier to write than C++ but not by much.
  • Roblox Creator Hub - lulz. I thhink it's based on Unity. You can check it out if you're into this stuff though you're probably already familiar with it.

Other links and comments

  • GitHub you should obviously use Git for all your projects. This is a version control system so you don't have to track versions manually.
  • Python is a great programming language period. And it's easy to learn and use.
  • Rust is a great first programming language since the ccompiler essentially teaches you
  • Kaze Emanuar - game dev and low level optimiztion for Nintendo N64 comsole.
  • ThePrimeagen - mostly for entertainment. Focuses on Rust programming language and web development.
  • LaurieWired - entertainment and disassembly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment