Interesting materials from C/C++, Python, Go, Linux world and more by @sabbakumov | Интересные материалы из мира C/C++, Python, Go, Linux и не только от @sabbakumov
Поделиться с друзьями:
Vim видео от Дерека Уайта
English version: http://telegra.ph/Vim-videos-from-Derek-Wyatt-01-16
Дерек Уайт (Derek Wyatt) несколько лет назад записывал видео, посвященные текстовому редактору Vim (https://vimeo.com/user1690209).
Можно сказать, что благодаря этим видео я и пришел к пониманию Vim. К слову, мне настолько понравилась цветовая схема, которую использует Дерек (xoria256), что пользуюсь ей до сих пор (кстати, Дерек тоже).
Не буду здесь касаться преимуществ и недостатков этого текстового редактора: оставлю это на следующие статьи. Отмечу лишь, что я настолько привык к режимам редактирования Vim, что ощущаю редактор как продолжение себя. Как говорил А.С. Пушкин: "Привычка свыше нам дана: замена счастию она".
Видео Дерека познакомят вас как с основами использования, так и с продвинутыми вещами, например, с макросами, глобальными regexp-командами, регистрами выражений и многим другим.
2018-01-16 19:22:08
Acme
English version: http://telegra.ph/Acme-12-28
Как вы думаете, каким текстовым редактором пользуются разработчики языка программирования Go Роб Пайк и Расс Кокс, разработчик Unix Кен Томпсон? Чем пользовался Деннис Ритчи? Emacs? Vim? Какая-то IDE? А вот и нет. Ответ: Acme (http://acme.cat-v.org/). Да-да, представьте себе, есть такой редактор. Его написал еще в девяностых Роб Пайк для операционной системы Plan9 на языке Alef. Позже редактор портировали на C.
Если кратко, то это такая среда для программистов. Упор сделан на текстовое взаимодействие и управление мышкой. Любой фрагмент текста может быть исполнен как команда. Редактор полностью тайловый, однако это отдельное приложение, а не полноценный оконный менеджер как i3 или Awesome.
В качестве демонстрации возможностей редактора Расс Кокс записал скринкаст (https://research.swtch.com/acme), посвященный Acme. Выглядит очень впечатляюще, учитывая, что этим редактором он пользуется ежедневно. По словам Расса, все коллеги, только взглянув на монитор, могут сразу сказать, что это его компьютер: подводит желтый фон редактора и голубые панели. Кстати, в Acme нет подсветки синтаксиса. Роб Пайк и пользователи Acme считают это бесполезной и отвлекающей вещью.
Загрузить и поиграться с Acme можно тут: https://code.google.com/archive/p/acme-sac/downloads
2017-12-28 20:54:09
Некоторое время назад публиковал подборку каналов коллег-администраторов. Возможно, что не все видели ее, особенно новые читатели, поэтому в честь нового года публикую список занимательных каналов:
@MicrosoftRus - Авторские заметки для ITPro & Dev о Microsoft, Windows Server, System Center, Azure, Office 365, OMS, SQL, облаках, железе и не только.
@technologique - Канал о тенденциях в технологиях разработки ПО и концепциях языков программирования, открытых технологиях FLOSS, Linux, облачных инфраструктурах и DevOps практиках, хранении и анализе данных, DL/ML, информационной безопасности.
@dncuug - Канал посвящен разработке под .NET Core - ежедневные публикации о новостях платформы, интересные статьи, видео.
@IoT_community - Канал крупнейшего российского сообщества по интернету вещей. Подборки интересных материалов, новости и анонсы различных мероприятий об IoT.
@msdnru - Официальный канал сообщества Microsoft Developer для разработчиков и всех, кто интересуется новыми технологиям.
@ITBroadcast - Канал для тех, кто хочет быть в теме и познавать новое в области IT. Входим в Top 1 каналов Telegram о технологиях.
2017-12-20 18:00:17
Lua за 1 час
English version: http://telegra.ph/Lua-in-1-hour-10-30
В продолжение предыдущей темы видео о языке Lua от того же автора: https://www.youtube.com/watch?v=S4eNl1rA1Ns.
Еще об интересных особенностях языка:
• Устранение хвостового вызова
• Поддержка корутин
• Реализация слабых ссылок, не влияющих на работу сборщика мусора
Так же забыл упомянуть примеры использования Lua (кроме игр, конечно):
• Модули веб-сервера Nginx
• CloudFlare
• Tarantool
Еще замечу, что есть такой проект LuaJIT: http://luajit.org/. С его помощью можно получить реально быстро работающие программы на Lua. А еще код довольно простой и компактный.
2017-10-30 16:57:50
Lua за 15 минут
English version: http://telegra.ph/Lua-in-15-minutes-10-23
Нашел мини-курс по языку Lua, в котором дается основной синтаксис: http://tylerneylon.com/a/learn-lua/.
Вообще этот язык используется в игровой индустрии (и не только), поэтому я решил взглянуть на него повнимательнее.
Lua показался для меня достаточно странным как человеку с бэкграундом C++ и Python. Вот некоторые его особенности:
• Комментарии начинаются с
--
а многострочные с
--]]
• Все переменные глобальные, но есть возможность создать локальную переменную через ключевое слово local (говорят, JavaScript перенял эту особенность у Lua).
• Все числа - вещественные. Авторами утверждается, что беспокоится не стоит, т.к. 64-разрядные вещественные числа могут точно хранить целые числа разрядности 52 бита.
• Блоки кода обозначаются как в Паскале через do/end, then/end.
• Если переменная не объявлена, но было произведено ее чтение, то результат - не ошибка, а nil.
• Только nil и false считаются за ложь. Все остальное - истина. Даже 0 и ''.
• В циклах for i = 1, 100 диапазон включает в себя обе границы.
• Присутствуют полноценные замыкания.
• Функции - это объекты первого порядка.
• Единственная составная структура данных - это хэш-таблица. Все остальное, включая массивы, списки, деревья, конструируется через таблицы. Как отмечают сами авторы, на эту идею их вдохновил Lisp, где все создается на основе списков.
• "Массивы" индексируются начиная с 1.
• ООП прототипное (в этом тоже, говорят, схожи Lua и JavaScript). Реализовано при помощи таблиц, мета-таблиц и мета-методов. Вообще довольно занятная концепция.
Первое издание книги Programming in Lua от авторов доступно совершенно свободно на сайте языка: https://www.lua.org/pil/contents.html.
В целом, язык довольно странный, но интересный. Однако я нахожу Python гораздо более понятным, интуитивным и прямолинейным. Единственное, за что можно похвалить Lua, так это то, что реализация занимает всего несколько десятков файлов на C, а так же за невероятную компактность и скорость его виртуальной машины и высокую совместимость с C, что делает этот язык весьма полезным в разработке игр.
2017-10-23 18:29:11
Подборка IT-каналов
На просторах телеграма уже существуют тысячи каналов и, порой, найти что-то стоящее действительно трудно. Мы с коллегами-администраторами дружественных каналов решили составить для вас небольшую подборку каналов об IT. Каждый найдет для себя что-то свое: разработка, железные темы, новости, обзоры и многое другое.
@lhommequipleure - Авторский канал про страх и отвращение в Санкт-Петербурге, автор верует в единорогов и пытается стать гиперполиглотом
@ccoder - Дайджест-подкаст "Котики Кодят". Новости из мира веб-разработки, программирования, фронтенда и бэкенда, девопс, операционных систем, машинного обучения и информационной безопасности.
@spalmalo_tt - Полезные ссылки для разработчика, девопса, дата саентиста. Скидываю то, что хочу донести коллегам
с примерно таким же стеком и интересами: Linux, Ruby, OSX, Python, ML, психология
@MicrosoftRus - Авторские заметки о Microsoft, Windows Server, System Center, Azure, Office 365, OMS и не только для ITPro & Dev и всех, кто интересуется новыми технологиям
@theaftertimes - Несерьезный дайджест IT. Ежедневно. Цитаты, паста, картинки.
@Technologique - Канал о тенденциях в технологиях разработки ПО и концепциях языков программирования, о развиваемых и формирующихся экосистемах языков (Rust, Kotlin, Go, Python, Dart, Crystal, etc.), открытых технологиях FLOSS, Linux, облачных инфраструктурах и DevOps практиках, хранении и анализе данных, машинном обучении и информационной безопасности.
@robotics_channel - Канал о робототехнике, нейросетях, автоматизации, научных исследованиях и разработках в смежных областях
@ITBroadcast - Канал для тех, кто хочет быть в теме и познавать новое в области IT. Входим в Top 1 каналов Telegram о технологиях.
@linkmeup_podcast - Самый официальный канал единственного и неповторимого подкаста для связистов Linkmeup. Постим мы тут новости с нашего сайта, вконтактика и просто интересные всякости. Иногда даже инженерное порно ;)
@sterkin_ru - авторский канал о Windows 10, безопасности, мобильном мире: тайное знание, профессиональный ликбез, гадание по логам, срыв покровов, доставка пруфов
@zatelecom - Авторский канал про телеком. Новости, тренды и истории. Много фоточек со всего мира и мнение о происходящем
@msdnru - Официальный канал сообщества Microsoft Developer для разработчиков и всех, кто интересуется новыми технологиям
@IoTSpace - Канал о бизнесе эры Интернета Вещей и цифровой трансформации
2017-10-18 19:00:18
Caps Lock -> Ctrl
English version: http://telegra.ph/Caps-Lock---Ctrl-10-17
Совет дня. В последнее время все больше нравится использовать клавишу Caps Lock как Ctrl. Все дело в том, что при слепой печати она находится буквально рядом с левым мизинцем и поэтому все сочетания клавиш с Ctrl сразу становятся проще для набора.
В OS X и Ubuntu перенастроить клавишу можно прямо в настройках, в Windows, к сожалению, стандартного способа нет, поэтому нашел в интернете файл, меняющий реестр для этого: https://github.com/sabbakumov/DotFiles/blob/master/capslock_to_ctrl.reg.
2017-10-17 18:44:31
Документы LLVM
English version: http://telegra.ph/LLVM-Documents-10-12
2 документа, регламентирующих разработку LLVM: https://llvm.org/docs/CodingStandards.html
https://llvm.org/docs/ProgrammersManual.html
Из интересного:
• Исключения и RTTI запрещены и выключены опциями компилятора. Основная причина - это то, что они нарушают главный принцип, заложенный в стандарте: "Don't pay for what you don't use". LLVM не хочет, чтобы компилятор неявно генерировал какую-либо дополнительную информацию в объектные файлы.
• Используется самописная форма RTTI, которая является более универсальной за счет того, что может использоваться для классов без виртуальных методов.
• Используются два понятия ошибок: ошибки программиста (отлавливаются при помощи огромного количества assert) и восстанавливаемые ошибки (обрабатываются при помощи классов Error, ErrorOr, Expected, что очень похоже на Google классы Status и StatusOr).
• formatv - функция для типобезопасного форматирования строк как в Python.
• Огромное количество различных структур данных для определенных целей. Одна из самых полезных, на мой взгляд, это SmallVector и специализация SmallString. SmallVector - это вектор, который внутри себя на стэке выделяет заданное пользователем число элементов. Если это число становится больше N, он выделяет память в куче и хранит элементы там. В результате можно добиться снижения числа аллокаций памяти.
2017-10-12 21:07:07
Торвальдс и Git
English version: http://telegra.ph/Torvalds-and-Git-09-11
Интересное выступление Линуса Торвальдса, создателя ядра Linux, в офисе Google на тему разработанной им системы контроля версий - Git https://www.youtube.com/watch?v=4XpnKHJAok8. По ходу видео Линус в свойственной ему манере рассказывает, почему Google должен выбросить Perforce и начать использовать Git. Видео 2007 года, однако в Google до сих пор во многих местах используется Perforce CVS, хотя сотрудники могут локально использовать Git.
2017-09-11 20:12:13
Странные указатели
English version: http://telegra.ph/Strange-pointers-08-28
Вы наверное знаете, что компилятор раскрывает следующий код:
const int array[] = {0, 1, 2};
const int val = array[1];
как
const int array[] = {0, 1, 2};
const int val = *(array + 1);
Данный факт влечет за собой одну особенность: можно записать тот же самый код так:
const int array[] = {0, 1, 2};
const int val = 1[array];
и все будет работать. Дело в том, что в C/C++ данная конструкция все так же раскроется в:
const int array[] = {0, 1, 2};
const int val = *(1 + array);
2017-08-28 19:26:01