Search
Write a publication
Pull to refresh
1
Alexander Stellove @AlLSTLread⁠-⁠only

Software Engineer

Send message

Стоимость операций в тактах ЦП

Reading time17 min
Views79K
Всем доброго! Вот мы и добрались до тематики С++ на наших курсах и по нашей старой доброй традиции делимся тем, что мы нашли достаточно интересным при подготовке программы и то, что будем затрагивать во время обучения.

Инфографика:



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

Указатели сложны, или Что хранится в байте?

Reading time9 min
Views19K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Pointers Are Complicated, or: What's in a Byte?" авторства Ralf Jung.


Этим летом я снова работаю над Rust фуллтайм, и я снова буду работать (помимо прочих вещей) над "моделью памяти" для Rust/MIR. Однако, прежде чем я заговорю о своих идеях, я наконец должен развеять миф, что "указатели просты: они являются просто числами". Обе части этого утверждения ошибочны, по крайней мере в языках с небезопасными фичами, таких как Rust или C: указатели нельзя назвать ни простыми, ни (обычными) числами.


Я бы также хотел обсудить часть модели памяти, которую необходимо затронуть, прежде чем мы можем говорить о более сложных частях: в какой форме данные хранятся в памяти? Память состоит из байтов, минимальных адресуемых единиц и наименьших элементов, к которым можно получить доступ (по крайней мере на большинстве платформ), но каковы возможные значения байта? Опять же, оказывается, что "это просто 8-битное число" не подходит в качестве ответа.

Читать дальше →

Использование handle и intrusive reference counter-ов в многопоточных средах в языке C

Reading time8 min
Views13K
Доступ к одим и тем же данным в нескольких потоках считается плохой практикой, но во многих случаях это неизбежно, и это не тот вопрос, который обсуждается здесь. Вопрос который здесь обсуждается, это как организовать такой доступ наиболее безопасным способом. Также тут не обсуждаются атомарные операции, которые тут упоминаются: разные компиляторы предлагают различные средства для таких операций.

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

Это может быть сделано несколькими способами, но мы будем говорить только о двух из них: хэндлы (handles) и встроенные счётчики ссылок (intrusive reference counters).
Читать дальше →

Алгоритмы рандома

Reading time5 min
Views83K
В этой статье вы увидите самые разнообразные велосипеды алгоритмы для генерации случайных чисел.

Про что статья


Про алгоритмы генерирующие псевдослучайные числа, которые отличаются между собой качеством результата и скоростью исполнения. Статья будет полезна тем, кто хочет получить высокопроизводительную генерацию чисел в своих программах или разработчикам софта для микроконтроллеров и старых платформ по типу ZX Spectrum или MSX.
Читать дальше →

Указатели на методы классов в C++

Reading time6 min
Views41K
Привет, интернет.

Решил написать статью об указателях на методы классов. Недавно мне пришлось столкнуться с тем, как они работают изнутри, когда писал некоторые вещи ориентированные под компилятор. Эти указатели работают не совсем как обычные указатели, не имеют возможности быть приведенными в void, и часто имеют размер больше 8 байт. Информации на эту тему в интернете я нашел относительно немного, потому решил разобраться сам.
Читать дальше →

Советы по C++

Reading time2 min
Views64K

Предыстория



За 2 года, я прочитал очень много книг по C++. Лучшим вариантом запоминания информации считаю ведение конспектов.
Несколько дней назад я остался без компьютера и интернета. Чтобы не тратить время впустую решил пересмотреть все свои записи. В тот момент ко мне и пришла идея сервиса, о котором я расскажу ниже.
Читать дальше →

Основные понятия стандартной библиотеки С++

Reading time3 min
Views45K
Данная статья определяет основные понятия стандартной библиотеки С++. Она приводится для того чтобы на неё ссылаться в дальнейшем.

Наибольшей частью стандартной библиотеки С++ является библиотека STL (Standard Template Library – Стандартная Библиотека Шаблонов). Библиотека STL содержит пять основных видов компонентов:

  • контейнер (container): управляет набором объектов в памяти.
  • итератор (iterator): обеспечивает для алгоритма средство доступа к содержимому контейнера.
  • алгоритм (algorithm): определяет вычислительную процедуру.
  • функциональный объект (function object): инкапсулирует функцию в объекте для использования другими компонентами.
  • адаптер (adaptor): адаптирует компонент для обеспечения различного интерфейса.


Читать дальше →

Об удобной навигации и отладке C++ кода в Vim

Reading time7 min
Views42K
Компания, где я работаю, разрабатывает программное обеспечение на C++ под Linux. Долгое время мы использовали Qt Creator, с редкими ребятами работающими из Emacs и Vim. Когда я сам попытался пересесть на Vim, я понял, что ситуация с плагинами для разработки на С++ очень не простая. Поработав немного с CTags, я быстро понял, что без напильника работать в Vim будет очень сложно.
К сожалению, с ростом опыта работы с Vim редактор в Qt Creator в режиме эмуляции устраивал меня все меньше, и в какой-то момент я решил потратить немного времени и разобраться, как же сделать из Vim нормальную среду.
Я очертил для себя четыре вещи, которые я бы хотел от среды разработки, и которых мне бы хватило в Vim, чтобы полностью на него перейти:

1. Автодополнение
2. Навигация по коду
3. Отладка прямо из среды
4. Интеграция с Git (в частности Blame прямо в редакторе, и Git Grep)

Автодополнение в Vim — это решенная проблема, и название у решения YouCompleteMe. Это очень качественный плагин, который реализует автодополнение для большого количества языков программирования, в частности Python и C++. Ходят слухи, что внутри Google YouCompleteMe решает и вторую проблему с навигацией кода, но использует для этого внутренные инструменты гугла для индексирования.

Интеграция с Git в какой-то степени решена с помощью vim-fugitive. Это не такая комплексная интеграция, как бывает у Jet Brains, или в Visual Studio, но сравнимая с тем, что предлагает Qt Creator. Те два сценария, которые нужны были мне: blame и grep — работают хорошо.

Отладка и навигация были проблемами, решенными гораздо хуже. В этой статье я расскажу о плагине, который мы написали для навигации по С++ коду. В конце статьи я также расскажу о том, как мы для себя решили проблему с интегрированным отладчиком.
Читать дальше →

Ethernet – 40 лет: от наброска на салфетке до гигабитных линий связи

Reading time5 min
Views8.1K


Коммерческая жизнь Ethernet началась 30 сентября 1980 года – следовательно, в этом году ему исполнилось ровно 40 лет. Впервые его определил патент, поданный на рассмотрение компанией Xerox в 1975-м. В нём был описан сетевой протокол передачи данных на скорости 10 Мб/с. На рынок протокол вышел в 1980-м, а в 1983-м IEEE подредактировал его, сделав стандартом IEEE 802.3. Следующие 37 лет этот стандарт множество раз обновлялся и пересматривался.

В современном стандарте Ethernet есть не только разные градации скорости, от изначальных 10 Мб/с до сегодняшних максимальных 400 Гб/с, но и бессчётное множество изменений, внесённых в основной протокол. Эти изменения позволяют как использовать современные скорости, так и новые применения Ethernet – например, электропитание и маршрутизация объединительной платы [backplane routing]. Надёжность и экономичность Ethernet в 1990-м году позволили создать стандарт 10BASE-T (802.3i-1990), который постепенно проник в настольные компьютеры.
Читать дальше →

Искусство создания диаграмм процессов

Reading time9 min
Views43K
Когда хочешь быстро объяснить суть какого-то процесса, то обычно рисуешь на листке бумаги несколько прямоугольников с текстом и проводишь между ними связи. Этому нехитрому принципу следуют большинство методологий описания бизнес-процессов, технологических процессов и любой другой человеческой деятельности. Можно принять как данность, что подобные схемы очень важны в современной парадигме накопления знаний.

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

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

image

Читать дальше →

Преимущества метода интервального запоминания

Reading time8 min
Views39K
Представьте, что вы могли бы ускорить свой процесс обучения и улучшить запоминание основ, техник и команд программирования.

Сегодня я расскажу вам, как это сделать с помощью интервального запоминания и бесплатного open-source инструмента под названием Anki.


Читать дальше →

Засеки 25 минут!

Reading time2 min
Views5.3K
Как часто вам бывает нужно просто засечь время? Я думаю, что такая необходимость периодически возникает у всех. Кто-то просто смотрит на часы, кто-то использует специальные программы, кто-то ставит будильник на телефоне.

Но помимо всех этих способов можно ещё сделать вот так:

sleep 25m ; xmessage 'Hey! :)'

Всего две команды, которые довольно легко запоминаются.

Вместо xmessage может быть, разумеется, что угодно ещё. Например:

sleep 8h 30m ; mplayer /home/user/Music/pink_floyd-the_happiest_days_of_our_lives.flac

Впрочем, тут надо учитывать, что команда не будет выполнена, если вы закроете терминал. Если же необходимо, чтобы команда всё-таки выполнилась, то есть несколько способов это сделать.
Читать дальше →

Привычка делать сейчас

Reading time4 min
Views42K

Привычка делать сейчас Нила Фиоре — это самоучитель о понимании и преодолении прокрастинации.


Прокрастинция — это механизм борьбы с боязнью начала или завершения задачи. Никто не ленив во всём: можно быть неспособным начать новую главу романа, но при этом спокойно продолжать обязательное чтение курса своего коллеги.


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

Читать дальше →

Система Личной Эффективности «Важное событие дня»

Reading time3 min
Views12K
Приветствую сообщество. Я хотел бы рассказать про систему личной эффективности «важное событие дня».
Про эту систему я узнал на одном из бизнес тренингов. Оригинала техники не знаю (не смог найти), поэтому описываю так, как услышал и использую сам.

Сразу перейду к сути.

Описание


Каждый день необходимо записывать самое важное событие, которое произошло с тобой в течение дня. Событие может быть из любой сферы жизни. Например: прибрался в комнате, закрыл проект Х, секс, посмотрел фильм, и т.д.

Далее, когда подходит к концу неделя, необходимо выбрать «самое важное событие недели» из дней, которые были в течение недели. Лучше не обобщать неделю, а именно выбрать из уже записанных дней.

За месяц необходимо выбрать лучшее из недель. И так далее для квартала и года.



Первое время было не просто пользоваться техникой: забывал фиксировать данные, приходилось вспоминать события аж за всю неделю. Но со временем привычка дошла до автоматизма и стало намного проще.
Читать дальше →

Введение в реверсинг с нуля, с использованием IDA PRO

Reading time5 min
Views26K
Привет, Хабравчане!

Для тех, кто не знает, в своё время я взял на себя ответственность перевести испанский курс Introduccion Al Reversing Con Ida Pro Desde Cero под авторством Ricardo Narvaja на русский язык. Прошло 2,5 года и теперь я могу смело сказать, что курс переведен на русский язык. На данный момент это 67 частей. Но это ещё не всё. В конце 67 части, мы можем увидеть, что нас ждёт продолжение. Сейчас же я бы хотел рассказать, про то как я переводил курс, с чем столкнулся при переводе, что узнал и как всё это было.
Читать дальше →

Как заговорить на английском через месяц. 9 простых и проверенных шагов

Reading time8 min
Views464K
Хабр, привет!

Меня зовут Марина Могилко, я кофаундер онлайн-платформы LinguaTrip.com.

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

Все советы рассчитаны на тех, кто уже обладает минимальным уровнем английского — учил его в школе или на курсах. Но заговорить через месяц смогут и те, кто только знакомится с языком, правда, им будет труднее. В статье не будет рекомендаций типа «учите язык вместе с носителем языка» или «погрузитесь в языковую среду». Это действенные методы, но они не всегда подходят.

Итак, начинаем! Осторожно: под катом мини-словарик на все случаи жизни.

image

Знакомство с межпроцессным взаимодействием на Linux

Reading time11 min
Views224K
Межпроцессное взаимодействие (Inter-process communication (IPC)) — это набор методов для обмена данными между потоками процессов. Процессы могут быть запущены как на одном и том же компьютере, так и на разных, соединенных сетью. IPC бывают нескольких типов: «сигнал», «сокет», «семафор», «файл», «сообщение»…

В данной статье я хочу рассмотреть всего 3 типа IPC:
  1. именованный канал
  2. разделенная память
  3. семафор
Отступление: данная статья является учебной и расчитана на людей, только еще вступающих на путь системного программирования. Ее главный замысел — познакомиться с различными способами взаимодействия между процессами на POSIX-совместимой ОС.
Читать дальше →

Горячие клавиши YouTube

Reading time1 min
Views169K
Все из нас (ну почти) пользуются сервисом YouTube, но не все знают, что процесс просмотра видеороликов на вышеупомянутом сервисе может быть сравним по удобству с просмотром видео на локальном медиа-плеере (например Media Player Classic), если пользоваться горячими клавишами.

Целиться мышкой в элементы управления не всегда удобно, горячие клавиши я очень люблю и, к тому же, не нашёл подобной публикации на Хабре, поэтому и решил начать с малого и посвятить свою первую публикацию составлению подробного списка горячих клавиш YouTube.
к списку горячих клавиш

ТОП-10 подводных камней, на которые вы можете наткнуться при переходе на Vim

Reading time5 min
Views15K
Согласитесь, каждый раз, когда вы видите человека, который использует Vim, вам кажется, что он знает то, чего не знаете вы. Иначе, как вы можете объяснить тот факт, что он использует редактор, который, по вашему мнению, является open-source мусором? Думайте, что хотите, но есть целый ряд причин, по которым програмисты поклоняются Vim.
Пока вы не потратите по крайней мере месяц на ознакомление с ним, вы, несомненно, будете его ненавидеть. Именно по этой причине большинство новичков работают с Vim около дня, после чего больше никогда к нему не притрагиваются. Они даже представить себе не могут, какой невероятной скоростью и гибкостью он обладает. Нужно всего-лишь найти в себе силы и преодолеть те трудности, которые встретятся вам на протяжении всего того времени, что вы знакомитесь с Vim.
Читать дальше →

Ведение Telegram-канала с помощью GitHub Actions

Reading time11 min
Views14K


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


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


И вот, среди прочих родилась простая идея: "А почему бы не автоматизировать отслеживание новых выпусков ИТ-подкастов с помощью Telegram-бота и GitHub Actions? Чтобы просто подписаться на telegram-канал и получать актуальные выпуски подкастов по мере их выхода.


Конечно, можно скачать специализированные приложения, типа "Poket Casts", либо подписаться на RSS, но лично для меня использование Telegram-канала является самым удобным, простым и привычным.


Так был создан telegram-канал @awesome_russian_podcasts, куда в автоматическом режиме публикуются новые выпуски множества ИТ-подкастов, собранных в моём репозитории. Собственно, о процессе создания этого канала (его техническую часть) я и хочу рассказать далее.

Читать дальше →

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity