Pull to refresh
-3
0

Пользователь

Send message

Введение в аннотации типов Python. Продолжение

Reading time4 min
Views69K


Автор иллюстрации — Magdalena Tomczyk


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

Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments33

Опыт программирования на Юниксе*

Reading time8 min
Views13K

Под программированием понимается собственно процесс программирования на С для мелких микроконтроллеров, а также трассировка печатных плат, рисование моделек в Солиде, редактирование доков в Офисе, чтение интернета и написание этой заметки.


Вот это устройство UNIX FIT MX-450V, или кратко – *ЮНИКС, на котором и осуществляется процесс программирования.



Вообще, всё вместе это 1001-е выступление на тему «о правильном рабочем месте программиста». Все составные части девайса многократно описаны в литературе, никаких революционных свершений не предлагается, зато приведен в целом успешный опыт инсталляции и использования. Устройство классическое – подъёмный стол и под ним беговая дорожка. Фотки – частично из сети, частично из моей рабочей берлоги, заранее прошу прощения за невысокое качество – условия тотальной захламленности + убогое освещение + я, увы, не фотограф совсем. Под катом – множество подробностей, включающих вивисекцию невинных железочек с элементами колхоза.

Читать дальше →
Total votes 38: ↑37 and ↓1+36
Comments22

7 направлений развития Linux в 2019 году

Reading time6 min
Views58K
Настал новый год, а значит можно говорить о том, что прошёл ещё один год, в котором Linux не заняла ведущее место среди настольных операционных систем. Во многих сферах Linux показывает себя просто прекрасно, но в экосистеме Linux всё ещё существует ряд давних проблем.


Читать дальше →
Total votes 94: ↑72 and ↓22+50
Comments227

Внутренняя и внешняя линковка в C++

Reading time9 min
Views64K
Всем добрый день!

Представляем вам перевод интересной статьи, который подготовили для вас рамках курса «Разработчик C++». Надеемся, что она будет полезна и интересна для вас, как и нашим слушателям.

Поехали.

Сталкивались ли вы когда-нибудь с терминами внутренняя и внешняя связь? Хотите узнать, для чего используется ключевое слово extern, или как объявление чего-то static влияет на глобальную область? Тогда эта статья для вас.

В двух словах

В единицу трансляции включены файл реализации (.c/.cpp) и все его заголовочные файлы (.h/.hpp). Если внутри единицы трансляции у объекта или функции есть внутреннее связывание, то этот символ виден компоновщику только внутри этой единицы трансляции. Если же у объекта или функции есть внешнее связывание, то компоновщик сможет видеть его при обработке других единиц трансляции. Использование ключевого слова static в глобальном пространстве имен дает символу внутреннее связывание. Ключевое слово extern дает внешнее связывание.
Компилятор по умолчанию дает символам следующие связывания:

  • Non-const глобальные переменные — внешнее связывание;
  • Const глобальные переменные — внутреннее связывание;
  • Функции — внешнее связывание.


Читать дальше →
Total votes 26: ↑22 and ↓4+18
Comments34

C++: сеанс спонтанной археологии и почему не стоит использовать вариативные функции в стиле C

Reading time18 min
Views22K
Началось все, как водится, с ошибки. Я первый раз работал с Java Native Interface и делал в C++ части обертку над функцией, создающей Java объект. Эта функция — CallVoidMethod — вариативна, т.е. помимо указателя на среду JNI, указателя на тип создаваемого объекта и идентификатора вызываемого метода (в данном случае конструктора), она принимает произвольное число других аргументов. Что логично, т.к. эти другие аргументы передаются вызываемому методу на стороне Java, а методы могут быть разные, с разным числом аргументов любых типов.

Соответственно и свою обертку я тоже сделал вариативной. Для передачи произвольного числа аргументов в CallVoidMethod использовал va_list, потому что по-другому в данном случае никак. Да, так и отправил va_list в CallVoidMethod. И уронил JVM банальным segmentation fault.

За 2 часа я успел перепробовать несколько версий JVM, от 8-ой до 11-ой, потому что: во-первых это мой первый опыт с JVM, и в этом вопросе я StackOverflow доверял больше, чем себе, а во-вторых кто-то на StackOverflow посоветовал в таком случае использовать не OpenJDK, а OracleJDK, и не 8, а 10. И лишь потом я наконец заметил, что помимо вариативной CallVoidMethod есть CallVoidMethodV, которая произвольное число аргументов принимает через va_list.

Что мне больше всего не понравилось в этой истории, так это то, что я не сразу заметил разницу между эллипсисом (многоточием) и va_list. А заметив, не смог объяснить себе, в чем принципиальное отличие. Значит, надо разобраться и с эллипсисом, и с va_list, и (поскольку речь все-таки о C++) с вариативными шаблонами.
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments11

Волновые процессы в гидравлических линиях. Основы

Reading time4 min
Views8.9K

Привет, Хабр!

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

Под катом я покажу “на пальцах” и при помощи гифок основные волновые эффекты. В качестве примера я буду использовать опять гидравлическую линию, но на самом деле в основе лежат практически те же самые уравнения, что и для акустики и электрических линий. Так что, даже если вы не гидравлик, может быть простые аналогии помогут вам разобраться в волновых процессах в целом.
Осторожно! Под катом 15 Мб анимированных гифок!
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments10

Рекурсивная маршрутизация в MikroTik через шлюзы назначемые DHCP

Reading time4 min
Views32K
Наиболее часто задаваемый мне вопрос по использованию рекурсивной маршрутизации звучит так: «Что делать, если основной провайдер назначает нам ip-адрес через dhcp, при этом часто изменяется шлюз по-умолчанию?».

image
Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments13

Подборка докладов по ядру Linux с Open Source Summit Europe 2018

Reading time4 min
Views7.6K


На прошлой неделе в Эдинбурге (Шотландия) прошел европейский Open Source Summit 2018. Представляю вашему вниманию подборку интересных докладов по ядру Linux, на которых мне удалось поприсутствовать.
Total votes 27: ↑25 and ↓2+23
Comments2

Изучаешь английский? Комиксы в помощь

Reading time6 min
Views27K
Сейчас есть огромное количество систем для изучения английского языка. Очень популярными становятся методики, которые активно используют фильмы и сериалы. Но мы пошли дальше и рекомендуем своим ученикам учить английский с помощью комиксов!

Как это делать и что нужно знать, чтобы обучение было приятным и интересным, — рассказываем в этой статье.
Читать дальше →
Total votes 12: ↑10 and ↓2+8
Comments6

Python: как уменьшить расход памяти вдвое, добавив всего одну строчку кода?

Reading time5 min
Views71K
Привет habr.

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


Как это работает, продолжение под катом.
Читать дальше →
Total votes 117: ↑107 and ↓10+97
Comments58

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

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

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

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

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

Семантика копирования и управление ресурсами в C++

Reading time28 min
Views53K

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



Читать дальше →
Total votes 45: ↑44 and ↓1+43
Comments83

Qt: рисование по мотивам векторной графики

Reading time10 min
Views14K

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

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

Бинарные модули для Python

Reading time17 min
Views16K
Python — классный. Мы говорим «pip install» и скорее всего нужная библиотека поставится. Но иногда ответ будет: «compilation failed», потому что есть бинарные модули. Они практически у всех современных языков страдают какой-нибудь болью, потому что архитектур много, что-то нужно собирать под конкретную машину, что-то нужно линковать с другими библиотеками. В целом интересный, но малоизученные вопрос: а как же их делать и какие там проблемы? На этот вопрос постарался ответить Дмитрий Жильцов (zaabjuda) на MoscowPython Conf в прошлом году.


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

  • Native C/C++ Extension
  • SWIG
  • Cython
  • Ctypes
  • Rust

О спикере: Дмитрий Жильцов занимается разработкой больше 10 лет. Работает в компании ЦИАН системным архитектором, то есть несет ответственность за технические решения и контроль сроков. В своей жизни успел попробовать и ассемблер, Haskell, C, а последние 5 лет активно программирует на Python.
Total votes 51: ↑48 and ↓3+45
Comments15

Linux в домашних условиях или…

Reading time3 min
Views16K

Как заставить Linux запускать через Wine профессиональный софт на примере Adobe Photoshop СС 2018 без использования инструментария Play on Linux.


Все что будет написано под катом является экспериментом который вы можете сами провернуть на своей рабочей станции с операционной системой на базе ядра Linux или на macOS кому как нравится.

Читать дальше →
Total votes 27: ↑18 and ↓9+9
Comments40

Что записано в файле .ssh/known_hosts

Reading time5 min
Views62K

Каждый раз, когда мы подключаемся по протоколу ssh к серверу, ssh клиент проверяет совпадает ли публичный ключ для этого сервера с тем, который был прошлый раз (по крайней мере так рекомендует делать стандарт ssh). В OpenSSH список известных ключей серверов хранится в файле known_hosts. Под катом коротко о том, что и как конкретно там хранится.

Читать дальше →
Total votes 47: ↑45 and ↓2+43
Comments15

Настройка squid или как не купить платное решение

Reading time20 min
Views121K
image

Всем привет!

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

Мы пытались внедрить решение от Ideco и ИКС, в итоге остановились на squid. Под катом история пути и техническая информация по настройке старого доброго кальмара.
Читать дальше →
Total votes 15: ↑11 and ↓4+7
Comments31

Курс «Языки веб-программирования» (на основе Ruby) от МГТУ им. Н. Э. Баумана на канале Технострим

Reading time14 min
Views21K


В этой статье мы расскажем о курсе «Языки веб-программирования», который читается на кафедре «Компьютерные системы и сети» (ИУ-6) МГТУ им. Н.Э. Баумана. Примеры приводятся на Ruby, а сам курс и представляет собой 16 видеолекций, доступных бесплатно на канале Технострим. В «Бауманке» курс читается для студентов второго курса, уже знакомых с высокоуровневыми языками программирования, такими как Pascal, C++ или Java. Основной акцент делается на системное понимание технологий, используемых в веб-программировании, а не на глубину освоения именно технологий Ruby. Поэтому курс также будет полезен слушателям, имеющим отрывочные знания о веб-технологиях на любых языках.
Total votes 24: ↑24 and ↓0+24
Comments18

Новая уязвимость Mikrotik? Нет, но стоит проверить свои устройства

Reading time2 min
Views58K


Второго августа получил рассылку “MikroTik: URGENT security advisory” о том, что некий ботнет использует уязвимость Winbox Service для взлома и заражения устройств.

Из текста рассылки стало ясно, что уязвимость закрыта еще 23 апреля 2018 года в версии v6.42.1. Начал проверять подшефные устройства и нашел несколько роутеров с 6.40.1, один из которых был заражен.
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments36

Python — это медленно. Почему?

Reading time9 min
Views85K
В последнее время можно наблюдать рост популярности языка программирования Python. Он используется в DevOps, в анализе данных, в веб-разработке, в сфере безопасности и в других областях. Но вот скорость… Здесь этому языку похвастаться нечем. Автор материала, перевод которого мы сегодня публикуем, решил выяснить причины медлительности Python и найти средства его ускорения.


Читать дальше →
Total votes 67: ↑59 and ↓8+51
Comments55

Information

Rating
Does not participate
Location
Томская обл., Россия
Registered
Activity