Pull to refresh
3
0

User

Send message

Strace в Linux: история, устройство и использование

Reading time17 min
Views61K


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


Следить за «интимной жизнью» программ на Linux помогает утилита strace, которой и посвящена эта статья. К примерам использования «шпионского» оборудования прилагаются краткая история strace и описание устройства подобных программ.

Читать дальше →
Total votes 86: ↑86 and ↓0+86
Comments27

Как Tesla обучает автопилот

Reading time24 min
Views34K


Расшифровка 2-й части Tesla Autonomy Investor Day. Цикл обучения автопилота, инфраструктура сбора данных, автоматическая разметка данных, подражание водителям-людям, определение расстояния по видео, sensor-supervision и многое другое.

Читать дальше →
Total votes 67: ↑64 and ↓3+61
Comments67

ELFийские трюки в Go

Reading time6 min
Views11K


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


Предупреждение: ничему полезному эта мини-статья вас не научит.

Читать дальше →
Total votes 28: ↑26 and ↓2+33
Comments5

Внедрение в архитектуру советских программируемых калькуляторов «Электроника МК-52»

Reading time18 min
Views44K


В этой статье я хочу рассказать об архитектуре советских программируемых микрокалькуляторов на примере калькулятора «Электроника МК-52» и как можно внедриться в его архитектуру.

Советские калькуляторы семейства "Электроника Б3-34" («Электроника МК-56», «Электроника МК-61» и «Электроника МК-52») были особенно популярны в СССР. Причиной этому была не только доступная цена в 65 рублей за МК-54, 85 рублей за МК-61 или 115 рублей за МК-52, но и развитой язык программирования. Это семейство калькуляторов стало де-факто стандартным для многочисленных пользователей. Огромное количество книг было посвящено программированию на этих машинках и публикацией готовых алгоритмов. Электроника МК-52 даже летала в космос на корабле Союз ТМ-7, где предполагалось его использование в качестве резервного на случай неисправности спускаемого навигационного оборудования. Даже в военно-морском флоте СССР калькулятор «Электроника МК-52» с блоком расширения памяти БРП «Астро» какое-то время был стандартным средством для навигационных расчетов.


Читать дальше →
Total votes 115: ↑115 and ↓0+115
Comments180

Освобождаемся от обработки ошибок, устраняя ошибки

Reading time4 min
Views7K


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

Не нужно обрабатывать ошибки вообще. Я не говорю «удалите ваш код обработки ошибок», вместо этого я предлагаю изменить ваш код так, чтобы у вас не было много ошибок для обработки.

Эта статья черпает вдохновение из главы «Define Errors Out of Existence”» книги « A philosophy of Software Design» Джона Оустерхаута. Я постараюсь применить его совет к Go.
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments17

Проводим ревизию ошибок

Reading time3 min
Views2.3K

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


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



картинка отсюда

Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments2

RedisPipe — вместе веселее

Reading time15 min
Views7.4K

Когда я думаю о том, как работают наивные RPC клиенты, мне вспоминается анекдот:


Суд.
— Подсудимый, за что вы убили женщину?
— Еду я в автобусе, подходит кондуктор к женщине, с требованием купить билет. Женщина открыла сумочку, достала кошелочку, закрыла сумочку, открыла кошелочку, достала кошелек, закрыла кошелочку, открыла сумочку, положила туда кошелочку, закрыла сумочку, открыла кошелек, достала деньги, открыла сумочку, достала кошелочку, закрыла сумочку, открыла кошелочку, положила туда кошелек, закрыла кошелочку, открыла сумочку, положила туда кошелочку.
— И что?
— Контролер ей дал билет. Женщина открыла сумочку, достала кошелочку, закрыла сумочку, открыла кошелочку, достала кошелек, закрыла кошелочку, открыла сумочку, положила туда кошелочку, закрыла сумочку, открыла кошелек, положила туда билет, закрыла кошелек, открыла сумочку, достала кошелочку, закрыла сумочку, открыла кошелочку, положила туда кошелек, закрыла кошелочку, открыла сумочку, положила туда кошелочку, закрыла сумочку.
«Возьмите сдачу», раздался голос контролера. Женщина… открыла сумочку…
— Да убить её мало, — не выдерживает прокурор.
— Так я это и сделал.
© С.Альтов

А если серьёзно
Total votes 32: ↑30 and ↓2+28
Comments7

Контроль консистентности кода в Go

Reading time8 min
Views12K


Если вы считаете консистентность важной составляющей качественного кода — эта статья для вас.


Вас ждут:


  • Разные способы сделать одно и то же в Go (эквивалентные операции)
  • Менее очевидные факторы, влияющие на однородность вашего кода
  • Способы увеличения консистентности вашего проекта
Читать дальше →
Total votes 38: ↑36 and ↓2+34
Comments14

Практические советы, примеры и туннели SSH

Reading time13 min
Views226K

Практические примеры SSH, которые выведут на новый уровень ваши навыки удалённого системного администратора. Команды и советы помогут не только использовать SSH, но и более грамотно перемещаться по сети.

Знание нескольких трюков ssh полезно любому системному администратору, сетевому инженеру или специалисту по безопасности.
Читать дальше →
Total votes 69: ↑66 and ↓3+63
Comments29

Благодаря WebAssembly можно писать Frontend на Go

Reading time9 min
Views24K
Оригинал статьи.

В феврале 2017 года член команды go Brad Fitzpatrick предложил сделать поддержку WebAssembly в языке. Спустя четыре месяца в ноябре 2017 автор GopherJS Ричард Музиол начал реализовывать идею. И, наконец, полная реализация была смержена в mаster. Разработчики получат wasm примерно в августе 2018, с версией go 1.11. В результате, стандартная библиотека берёт на себя почти все технические сложности с импортом и экспортом функций, знакомых вам, если вы уже пробовали компилировать Си в wasm. Звучит многообещающе. Давайте посмотрим, что можно сделать с первой версией.
Читать дальше →
Total votes 20: ↑17 and ↓3+14
Comments93

Самый полный русскоязычный перевод Гарвардского курса по программированию CS50 2015, бесплатно на YouTube

Reading time2 min
Views55K
В этой статье я хочу немного рассказать о самом лучшем в мире курсе по программированию.

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

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

image
Total votes 19: ↑18 and ↓1+17
Comments26

Работаем в консоли быстро и эффективно

Reading time9 min
Views125K

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

Читать дальше →
Total votes 88: ↑85 and ↓3+82
Comments117

Пишем GeoIP exporter для Prometheus с визуализаций в Grafana за 15 минут

Reading time5 min
Views12K


Привет всем!


Я хочу поделиться с вами тем, как легко можно написать свой экспортер для Prometheus на Golang и покажу как это можно сделать на примере небольшой программы, которая следит за тем, откуда географически установлены текущие TCP соединения.

Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments2

Python для ребёнка: выбор самоучителя

Reading time8 min
Views123K
Python для ребёнка: выбор книги для самостоятельного изучения языка в 2018 году

Мой сын заинтересовался программированием на Python, и у меня появился вопрос – есть ли сегодня возможность купить книгу для ребёнка в качестве самоучителя? Самоучители для взрослых детям не подходят – мотивации продираться самостоятельно через учебники программирования и у взрослых не всегда хватает, а у ребёнка скучное «академическое» изложение вообще может убить весь интерес к предмету на пятой странице.

К счастью, на момент написания статьи (конец 2018 года) выбор оказался весьма широк – есть как переводные, так и отечественные книги, нацеленные на детскую и подростковую аудиторию. В ходе поиска, отсеяв книги по Python 2, я смог найти 10 свежих книг по Python 3 для детей, изучил каждую их них вживую в офлайн-магазинах, и результатами своих изысканий хочу поделиться с вами в статье под катом.
Читать дальше →
Total votes 47: ↑45 and ↓2+43
Comments54

Второй ретрокомпьютер-бейдж от Hackaday

Reading time3 min
Views12K


Положительный опыт применения ретрокомпьютеров-бейджей на прошедшей в мае конференции в Белграде (новость на Хабре и на Hackaday) побудил руководство Hackaday повторить эксперимент на следующем мероприятии — Superconference, или сокращённо Supercon, которая пройдёт в ноябре в Пасадине. Новая модель гаджета ещё интереснее.
Читать дальше →
Total votes 31: ↑29 and ↓2+27
Comments16

Законы рефлексии в Gо

Reading time9 min
Views50K
Привет, Хабр! Представляю вашему вниманию перевод статьи «The Laws of Reflection» от создателя языка.

Рефлексия — способность программы исследовать собственную структуру, в особенности через типы. Это форма метапрограммирования и отличный источник путаницы.
В Go рефлексия широко используется, например, в пакетах test и fmt. В этой статье попытаемся избавиться от «магии», объяснив, как рефлексия работает в Go.
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments10

Спрятанная овца и типографическая археология

Reading time5 min
Views7.8K

Распаковка оригинальных растровых шрифтов Macintosh


Я большой поклонник растровой гарнитуры Chicago от Сьюзан Каре. Если вы старше 25-ти, то она знакома вам как системный шрифт Macintosh с 1980-х по 1990-е годы, а потом его ещё вызвали на бис для маленьких экранчиков первых iPod. За известностью гарнитуры скрывается солидная работа. Маленьким растровым буквам трудно придать уникальную и гармоничную индивидуальность, но Chicago делает это: высококонтрастный рубленый шрифт с горсткой ключевых завитков, создающих дружелюбное впечатление. Выглядит так:



Я люблю его контрольные u, v, w, m, n. Недавно я подготовил очень полезный курс по дизайну современных шрифтов, после чего захотелось разобрать Chicago и посмотреть, можно ли больше узнать о том, как работает этот дизайн. Этого шрифта нет на современном MacBook. Я поискал в онлайне, но быстро понял, что во всех коллекциях бесплатных шрифтов представлены только подделки.
Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments5

Как не наступать на грабли в Go

Reading time10 min
Views95K

Этот пост является версией моей же англоязычной статьи "How to avoid gotchas in Go", но слово gotcha не переводится на русский, поэтому я буду использовать это слово как без перевода, так и немного непрямой вариант — "наступать на грабли".


Gotcha — корректная конструкция системы, программы или языка программирования, которая работает, как описано, но, при этом, контринтуитивна и является причиной ошибок, поскольку её легко использовать неверно.

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


Но один вопрос меня мучал долгое время — почему я сам никогда не делал этих ошибок? Серьезно, самые популярные из них, вроде путаницы с nil-интерфейсом или непонятного результата при append()-е слайса — в моей практике никогда не были проблемой. Каким-то образом мне повезло обойти эти подводные камни с первых дней своей работы с Go. Что же мне помогло?


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

Читать дальше →
Total votes 46: ↑38 and ↓8+30
Comments9

Вызов функций Go из других языков

Reading time9 min
Views23K

image


С версии 1.5 компилятор Go поддерживает несколько режимов сборки, определяемых флагом buildmode. Их ещё называют режимами исполнения Go (Go Execution Modes). С их помощью go tool может компилировать пакеты Go в нескольких форматах, включая архивы и библиотеки общего пользования Go (shared libraries), архивы и библиотеки общего пользования Си, а с версии 1.8 — и динамические плагины Go.


В статье мы рассмотрим компилирование пакетов Go в библиотеки Си. В этом режиме сборки компилятор генерирует стандартный бинарный файл объекта (shared object) (.so), передавая функции Go в качестве API в стиле Си. Мы поговорим о том, как создавать библиотеки Go, которые можно вызывать из C, Python, Ruby, Node и Java.


Весь код доступен на GitHub.

Читать дальше →
Total votes 57: ↑55 and ↓2+53
Comments23

50 оттенков Go: ловушки, подводные камни и распространённые ошибки новичков

Reading time44 min
Views223K


Go — простой и забавный язык. Но в нём, как и в любых других языках, есть свои подводные камни. И во многих из них сам Go не виноват. Одни — это естественное следствие прихода программистов из других языков, другие возникают из-за ложных представлений и нехватки подробностей. Если вы найдёте время и почитаете официальные спецификации, вики, почтовые рассылки, публикации в блогах и исходный код, то многие из подводных камней станут для вас очевидны. Но далеко не каждый так начинает, и это нормально. Если вы новичок в Go, статья поможет сэкономить немало часов, которые вы бы потратили на отладку кода. Мы будем рассматривать версии Go 1.5 и ниже.
Читать дальше →
Total votes 80: ↑76 and ↓4+72
Comments270

Information

Rating
Does not participate
Location
Украина
Registered
Activity