Как стать автором
Обновить

Linux (или компьютер) совсем для всех

Время на прочтение 2 мин
Количество просмотров 4K
Настройка Linux *
Возможно, этот пост следовало бы опубликовать в блог «компьютер для всех» или подобный, но, думаю, можно и сюда.

Задача. Обучить (с нуля) 60-летнюю маму пользоваться компьютером, Ubuntu Linux и электронной почтой Gmail.

Ресурс. Все необходимые детали, чтобы собрать компьютер, загрузочная флэшка с Ubuntu, вечер на сборку компьютера и установку ОС, несколько часов на написание руководства, полчаса на обучение.

Результат. Мы переехали в другую страну, а тот компьютер работает и позволяет его пользователю обмениваться письмами по электронной почте без чьей-либо помощи.
Читать дальше →
Всего голосов 93: ↑73 и ↓20 +53
Комментарии 67

Простой интерпретатор с нуля на Python (перевод) #1

Время на прочтение 5 мин
Количество просмотров 46K
Python *
Туториал
Из песочницы


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


В этом цикле статей я попытаюсь захватить часть этой простоты путем написания простого интерпретатора для обычного императивного языка IMP (IMperative Language). Интерпретатор будет написан на Питоне, потому что это простой и широко известный язык. Также, питон-код похож на псевдокод, и даже если вы не знаете его [питон], у вас получится понять код. Парсинг будет выполнен с помощью простого набора комбинаторов, написанных с нуля (подробнее расскажу в следующей части). Никаких дополнительных библиотек не будет использовано, кроме sys (для I/O), re (регулярные выражения в лексере) и unittest (для проверки работоспособности нашей поделки).
Читать дальше →
Всего голосов 28: ↑25 и ↓3 +22
Комментарии 14

Простой интерпретатор с нуля на Python #2

Время на прочтение 8 мин
Количество просмотров 17K
Python *
Туториал
Перевод


В предыдущей статье мы рассматривали сам язык IMP и основную структуру интерпретатора. Также, мы тщательно рассмотрели лексер. В этой статье мы будем писать небольшой парсер для нашего языка. Он будет извлекать AST (abstract syntax tree) из списка токенов, сгенерированных лексером. Библиотека комбинатора будет независимая, то есть с помощью нее можно будет написать парсер для любого языка.


Что такое комбинаторы парсеров?

Есть очень много способов написать парсер. Самым простым и быстрым способом сделать это являются комбинаторы.

Вы можете считать парсер функцией, которая принимает поток токенов. Если успешно, то парсер будет «съедать» немного токенов из потока. Функция вернет часть финального AST вместе с остальными токенами. Комбинатор — это функция, которая производит парсер, как его результат, обычно после приема одного или нескольких анализаторов (парсеров) в качестве входных данных, отсюда и название — «комбинатор». Вы можете использовать комбинаторы для создания законченного парсера для языка, как IMP, путем создания множества маленьких парсеров для каждой части языка.
Читать дальше →
Всего голосов 28: ↑26 и ↓2 +24
Комментарии 0

Простой интерпретатор с нуля на Python #4

Время на прочтение 5 мин
Количество просмотров 14K
Python *
Туториал
Перевод


В предыдущих трех частях мы создали лексер, парсер и AST для нашего игрушечного языка IMP. Мы даже написали нашу собственную библиотеку парсеров комбинаторов. В этой, финальной статье мы напишем последний компонент интерпретатора — исполнитель.


Давайте подумаем, как обычно исполняются программы. В любой момент времени есть некоторые «точки контроля», которые указывает на то, какое выражение программа собирается выполнить дальше. Когда следующее выражение исполняется, оно модифицирует состояние программы, путем улучшения «точки контроля» и изменения значений переменных.
Читать дальше →
Всего голосов 30: ↑28 и ↓2 +26
Комментарии 1

Простой интерпретатор с нуля на Python (часть 3)

Время на прочтение 12 мин
Количество просмотров 17K
Python *
Из песочницы
image


Разъяснение к публикации
Пользователь @duse ранее выкладывал переводы двух предыдущих статей, явно намереваясь перевести всю серию. Так как тема меня очень интересует, а новых переводов нет, обратился к первоисточнику. С английским не очень силён, чтобы не терять суть, стал переводить на русский. Так и родился этот перевод. Прошу прощения у @duse в случае, если мне стоило ещё чуточку потерпеть. Но для сообщества в любом случае должна быть польза.


Таким образом, мы написали лексер библиотеку комбинатора парсеров для нашего интерпретатора. В этой части, мы создадим структурные данные абстрактного синтаксического дерева (AST), и напишем парсер, используя нашу библиотеку комбинаторов, которые переводят список токенов, возвращенных лексером, в абстрактное синтаксическое дерево (AST). После того, как мы распарсим AST, запустить программу будет очень просто.

Читать дальше →
Всего голосов 26: ↑24 и ↓2 +22
Комментарии 1

Пишем операционную систему. Часть 1. Загрузчик

Время на прочтение 3 мин
Количество просмотров 38K
Системное программирование *
Из песочницы
Всем привет! Сегодня мы напишем загрузчик, который будет выводить «Hello World» и запустим его на VirtualBox. Писать будем на ассемблере FASM. Скачать его можно отсюда. Также нам понадобится собственно VirtualBox и UltraISO. Перед тем как писать код, разберемся как загружаются операционные системы.

Итак, когда мы нажимаем большую кнопку включения на нашем компьютере запускается система, которая есть на любом компьютере — BIOS (Basic Input/Output System или базовая система ввода/вывода). Задача BIOS это:

Читать дальше →
Всего голосов 52: ↑44 и ↓8 +36
Комментарии 37

Как сменить свою специальность на программиста?

Время на прочтение 9 мин
Количество просмотров 27K
Программирование *Учебный процесс в IT
Вам надоела ваша работа? Нет перспектив? Возможно, только начинаете свой путь?
В данной статье мы рассмотрим какой путь надо пройти, сколько времени, сил и денег надо затратить чтобы с нуля дойти до уровня, когда вам начнут присылать приглашения на работу за рубежом на очень вкусных условиях.



Здравствуйте, меня зовут Александр Зеленин. Я программист с более чем 15 годами опыта. За это время удалось поработать на позициях от веб-разработчика до CTO, в компаниях разного уровня (от 5 человек, до 2000+, стартапах, корпорациях), в разных странах и городах. Так же собеседовал более тысячи человек за всё время, вёл образовательные курсы, менторил и так далее.

* Данная статья является исключительно моим мнением. Не претендует на полность, абсолютную корректность, отсутствие ошибок, неточностей. Используйте здравый смысл при принятии любых решений и несите ответственность за них лично.
Читать дальше →
Всего голосов 17: ↑9 и ↓8 +1
Комментарии 57

От студента до учителя: как разобраться в веб-разработке, если это не твой профиль

Время на прочтение 8 мин
Количество просмотров 4.3K
Блог компании GeekBrains Разработка веб-сайтов *CSS *Программирование *Java *

Хоть кому-то и может показаться, что веб-разработчик — это суровый технарь (айтишник же!), вход в эту профессию не сложнее, чем в Python . В неё часто переходят бывшие педагоги, юристы, бухгалтеры и другие гуманитарии. О том, с чего начать обучение, какие ошибки допускают новички, как освоиться в профессии и стоит ли самостоятельно учиться, рассказывает преподаватель веб-разработки в GeekBrains Алексей Кадочников.

Читать далее
Всего голосов 8: ↑5 и ↓3 +2
Комментарии 1

Let's start in GameDev

Время на прочтение 2 мин
Количество просмотров 1.3K
C++ *Разработка игр *C# *Математика *Карьера в IT-индустрии
Из песочницы

I just started to learn Game Development, and decided to run write my personal blog about it. So there you can find information(resources, blogs, courses, books) that i've gathered and my personal problems with learning)

Read more
Всего голосов 7: ↑4 и ↓3 +1
Комментарии 2

CustomView Android. Кольцевая диаграмма для отображения статистики

Уровень сложности Средний
Время на прочтение 25 мин
Количество просмотров 4.4K
Разработка мобильных приложений *Разработка под Android *Kotlin *Дизайн мобильных приложений *
Туториал
Из песочницы

Наверное, каждый Android-разработчик на этапе обучения или в процессе выполнения задач в коммерческом проекте задумывался о создании своей CustomView без использования сторонних библиотек, с собственной отрисовкой, анимацией, а также хорошей оптимизацией, чтобы CustomView адаптировалась под переданные ей размеры, правильно отображалась в независимости от экрана пользователя.

Самый верный и действенный способ постичь Дзен в реализации CustomView является работа над диаграммами и графиками. Чем сложнее будет задуманная диаграмма, тем больше этапов будет пройдено в её реализации: начиная от собственного расчета размеров, заканчивая многоступенчатой анимацией при отрисовке. Каждый из вас способен сделать что-то своё, но порог входа для этого, я соглашусь, достаточно высокий. Поэтому необходим некоторый пример, который поможет разобраться в этом темном лихолесье неизвестности. 

Что ж, в этой статье мы пройдем все этапы реализации своей CustomView, с подробным описанием шагов, чтобы каждый смог повторить такое в своих проектах. Мы будем реализовывать кольцевую диаграмму для отображения какой-либо статистики, добавим много возможностей кастомизации диаграммы под любые виды задач, а также приправим это дело красивой анимацией отрисовки и сохранением состояния. Все будет написано на языке программирования Kotlin.

Вперед за CustomView!
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 8