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

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

Отправить сообщение

Доступная система видеонаблюдения с охраной на дачу за 60 минут

Время на прочтение24 мин
Количество просмотров93K

Речь пойдет о сборке, настройке и запуске охранной системы с датчиками, камерой, хранением видеозаписей на удаленном домашнем NAS, встроенным UPS, web-интерфейсом и оповещением через Telegram.

Чтобы быть предельно кратким, оформил статью в стилистике hackster.io. Информация рассчитана на читателей с опытом работы с одноплатным компьютером Raspberry и пониманием принципов работы VPN.

Читать далее
Всего голосов 102: ↑99 и ↓3+122
Комментарии163

ООП в Wolfram Mathematica

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров2.9K

В комментариях к мой статье пользователь @Refridgeratorв ответ на мой вопрос написал, что в Wolfram Language (WL) не хватает следующего:

"ООП, перегрузки операторов, строгой типизации, событийно-ориентированного
программирования, дата-ориентированного программирования, параллельного программирования с примитивами синхронизации, средств отладки, скорости исполнения." (с) @Refridgerator

Я отлично понимаю, что вокруг Mathematica сложились некоторые исторические стереотипы. В них обычно WL представляется как калькулятор на стероидах или просто игрушка, или больше язык запросов, которым можно дополнительно решать уравнения и строить графики. Сегодня я попытаюсь показать, что в языке есть не только лишь графики, уравнения и интегралы. Вряд ли у меня хватит сил написать подробно касательно каждого пункта списка, но я постараюсь объяснить хотя бы часть.

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии15

«Нежданчики» языка Фортран

Время на прочтение6 мин
Количество просмотров30K

Многие из нас, обучаясь программированию ещё в университетах или дома, делали это на языках С/С++. Конечно, всё зависит от времени, в которое начиналось наше знакомство с языками программирования. Скажем, кто-то начинал с Фортрана, другие — с Basic’a или Delphi, но стоит признать, что доля начавших свой тернистый путь программиста с С/С++ наибольшая. К чему я всё это? Когда перед нами стоит задача изучить новый язык и написать на нём код, мы часто основываемся на том, как бы я это написал на своём «базовом» языке. Сузим вопрос — если нужно написать что-то на Фортране, то мы вспоминаем, как бы это было реализовано на С и делаем по аналогии. Очередной раз столкнувшись с тонкостью языка, которая привела к абсолютно неработающему алгоритму и большой проблеме, эскалированной мне, я решил отыскать как можно больше нюансов языка Фортран (Fortran 90/95), по сравнению с С, с которыми столкнулся лично. Это своего рода «нежданчики», которые ты явно не планировал увидеть, а они бац – и всплыли!
Конечно, речь не пойдёт о синтаксисе — в каждом языке он свой. Я попробую рассказать о глобальных вещах, способных изменить всё «с ног на голову». Поехали!
Читать дальше →
Всего голосов 41: ↑33 и ↓8+25
Комментарии24

Наследование в C++: beginner, intermediate, advanced

Время на прочтение9 мин
Количество просмотров291K

В этой статье наследование описано на трех уровнях: beginner, intermediate и advanced. Expert нет. И ни слова про SOLID. Честно.


Beginner


Что такое наследование?


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


Класс, который наследует данные, называется подклассом (subclass), производным классом (derived class) или дочерним классом (child). Класс, от которого наследуются данные или методы, называется суперклассом (super class), базовым классом (base class) или родительским классом (parent). Термины “родительский” и “дочерний” чрезвычайно полезны для понимания наследования. Как ребенок получает характеристики своих родителей, производный класс получает методы и переменные базового класса.


Наследование полезно, поскольку оно позволяет структурировать и повторно использовать код, что, в свою очередь,

Читать дальше →
Всего голосов 15: ↑11 и ↓4+7
Комментарии62

Инициализация в современном C++

Время на прочтение26 мин
Количество просмотров160K


Общеизвестно, что семантика инициализации — одна из наиболее сложных частей C++. Существует множество видов инициализации, описываемых разным синтаксисом, и все они взаимодействуют сложным и вызывающим вопросы способом. C++11 принес концепцию «универсальной инициализации». К сожалению, она привнесла еще более сложные правила, и в свою очередь, их перекрыли в C++14, C++17 и снова поменяют в C++20.


Под катом — видео и перевод доклада Тимура Домлера (Timur Doumler) с конференции C++ Russia. Тимур вначале подводит исторические итоги эволюции инициализации в С++, дает системный обзор текущего варианта правила инициализации, типичных проблем и сюрпризов, объясняет, как использовать все эти правила эффективно, и, наконец, рассказывает о свежих предложениях в стандарт, которые могут сделать семантику инициализации C++20 немного более удобной. Далее повествование — от его лица.

Всего голосов 62: ↑61 и ↓1+60
Комментарии125

Регулярные выражения в Python от простого к сложному. Подробности, примеры, картинки, упражнения

Время на прочтение25 мин
Количество просмотров1.5M

Регулярные выражения в Python от простого к сложному




Решил я давеча моим школьникам дать задачек на регулярные выражения для изучения. А к задачкам нужна какая-нибудь теория. И стал я искать хорошие тексты на русском. Пяток сносных нашёл, но всё не то. Что-то смято, что-то упущено. У этих текстов был не только фатальный недостаток. Мало картинок, мало примеров. И почти нет разумных задач. Ну неужели поиск IP-адреса — это самая частая задача для регулярных выражений? Вот и я думаю, что нет.
Про разницу (?:...) / (...) фиг найдёшь, а без этого знания в некоторых случаях можно только страдать.

Плюс в питоне есть немало регулярных плюшек. Например, re.split может добавлять тот кусок текста, по которому был разрез, в список частей. А в re.sub можно вместо шаблона для замены передать функцию. Это — реальные вещи, которые прямо очень нужны, но никто про это не пишет.
Так и родился этот достаточно многобуквенный материал с подробностями, тонкостями, картинками и задачами.

Надеюсь, вам удастся из него извлечь что-нибудь новое и полезное, даже если вы уже в ладах с регулярками.
Читать дальше →
Всего голосов 99: ↑98 и ↓1+97
Комментарии66

21 фича современного C++, которые вам обязательно пригодятся

Время на прочтение10 мин
Количество просмотров33K

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

Сообщество C++ дополняет стандарт чаще, чем Apple выпускает новые iPhone. Благодаря этому C++ теперь больше похож на большого слона, а съесть целого слона за один присест невозможно. Вот почему я решил написать эту статью, чтобы дать вашему путешествию по современному C++ своего рода отправную точку. Моя целевая аудитория здесь — люди, которые переходят со старого (т.е. 98/03) С++ на современный (т.е. 2011 и далее) С++.

Я отобрал ряд фич современного C++ и постарался объяснить их на лаконичных примерах, чтобы вы научились определять места, где их можно использовать.

Читать далее
Всего голосов 52: ↑47 и ↓5+53
Комментарии160

Документируем код эффективно при помощи Doxygen

Время на прочтение18 мин
Количество просмотров362K


Данная статья входит в получившийся цикл статей о системе документирования Doxygen:

  1. Документируем код эффективно при помощи Doxygen
  2. Оформление документации в Doxygen
  3. Построение диаграмм и графов в Doxygen

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

В этой статье мы сначала познакомимся с самой системой и её возможностями, затем разберёмся с её установкой и базовыми принципами работы, и, наконец, завершим знакомство рассмотрением различных примеров документации, примеров того, как следует документировать те или иные части кода. Словом, познакомимся со всем тем, что позволит вам освоиться и начать работать с этой замечательной системой.
Читать дальше →
Всего голосов 52: ↑52 и ↓0+52
Комментарии39

Документирование кодовой базы. Зачем и как?

Время на прочтение10 мин
Количество просмотров34K

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

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

Разработка python module, чтобы продакшн радовал

Время на прочтение9 мин
Количество просмотров7.8K
Всем привет! Я представляю команду разработчиков некоммерческой организации CyberDuckNinja. Мы создаём и поддерживаем целое семейство продуктов, которые позволяют облегчить разработку backend-приложений и сервисов машинного обучения.

Сегодня хотелось бы затронуть тему интеграции Python в C++.



Все началось со звонка друга в два часа ночи, который пожаловался: «У нас под нагрузкой ложится продакшн ...» В разговоре выяснилось, что код продакшена написан с использованием ipyparallel (пакет Python, который позволяет производить параллельные и распределённые вычисления) для обсчета модели и получения результатов в режиме онлайн. Мы решили разобраться в архитектуре ipyparallel и провести профайлинг под нагрузкой.
Читать дальше →
Всего голосов 20: ↑19 и ↓1+24
Комментарии7

Философия математики

Время на прочтение5 мин
Количество просмотров71K
image Карл Гаусс, в своё время, назвал математику царицей всех наук, отдавая ей особое место в сфере человеческого знания. Действительно, совершенно непохожая на другие науки, она скорее служит для них языком или методом изучения. Являясь, пожалуй, самой строгой из всех наук, она не имеет собственного строгого и общепринятого определения. На протяжении всей своей истории, преобразуясь сама, преобразовывалось и понятие о математике. Учёные, в течении всего развития математики, смогли составить скорее не определения математики, а набор афоризмов характеризующий её или представления о ней.
«Математика — это язык, на котором написана книга природы»(Г. Галилей)
«Математика – это наука о необходимых заключениях»(Б. Пирс)
«Математика – это строгий язык, служащий для перехода от одних опытных суждений, к другим»(Н. Бор)
«Математика – это иерархия формальных структур»(Н. Бурбаки)
«Математика — это наука о количественных отношениях и пространственных формах действительного мира»(А. Колмогоров)
— это лишь малая часть суждений, показывающая разнородность представлений о математике. Помимо вопроса определения математики, интересными и дискуссионными являются вопросы о её природе(основаниях), её методологии, целях и связи с реальным миром. Ответы на них также неоднозначны и значительно изменялись со временем, создавая различные философские течения.
Читать дальше →
Всего голосов 51: ↑46 и ↓5+41
Комментарии16

Аналоговый компьютер Telefunken RA 770

Время на прочтение11 мин
Количество просмотров18K

14 ноября 2007 года сбылась моя мечта детства: я стал счастливым обладателем замечательного аналогового компьютера Telefunken RA 770. Искренне благодарен сотруднику Forschungszentrum Jülich, который не дал пустить эту замечательную машину на металлолом и предложил её мне. 

На мой взгляд, RA 770 — лучший когда-либо созданный высокоточный  (10^-4) аналоговый компьютер. Забирать его мы приехали на грузовике. Почему на грузовике? Потому что Telefunken RA 770 весит около 550 кг. Пришлось его частично разобрать, чтобы погрузить в машину своими силами. Как мы его выгружали дома — отдельная история. Будет много фото.

Читать далее
Всего голосов 108: ↑108 и ↓0+108
Комментарии49

Адаптация Qt-приложений под мониторы высокой чёткости. Часть 1

Время на прочтение15 мин
Количество просмотров18K

В связи с техническим прогрессом рынок мониторов постоянно обновляется моделями с повышенным разрешением, плотностью пикселей и/или размером экрана. Году в 2010 стандартным монитором можно было считать экземпляр 19’’ c разрешением WXGA++ (1600*900) и фактической плотностью пикселей 97 DPI (dots per inch). Сейчас (2021 год) стандартным монитором, думаю, можно признать экземпляр 24’’ c разрешением Full HD (1920*1080) и плотностью пикселей 92 DPI. Под «стандартным» я понимаю тот монитор, который стоит на рабочем месте у большинства работающего люда: инженеры, бухгалтеры, переводчики и т.д. (при этом, конечно, «стандартность» — это субъективная и приблизительная оценка). Относительно новые и отчасти нишевые модели (для фотографов, видеографов, геймеров) имеют характеристики: 4K UHD (3840*2160) и 28’’ (157 DPI) или UWQHD (3440x1440) и 34" (109 DPI) или QHD (2560x1440) и 27" (109 DPI) или UWHD (2560x1080) и 29" (96 DPI). Таким образом, наблюдается рост в связанных группах признаков: разрешение+размер экрана, или разрешение+плотность пикселей, или даже разрешение+плотность пикселей+размер экрана. На рынке ноутбуков в плане экранов похожая ситуация – растет разрешение+плотность пикселей.

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

Что касается высокой чёткости (большой плотности пикселей), то в ОС Windows давно есть такие настройки, как масштабирование шрифта и изображений (масштаб экрана), которые применяются для увеличения слишком малых элементов GUI на мониторах с высокой чёткостью (High DPI). Также есть поддержка в платформе Qt (с нюансами, об этом далее). Однако способно ли Ваше, конкретное ПО их адекватно учитывать, применять?

Читать далее
Всего голосов 20: ↑20 и ↓0+20
Комментарии6

Управление памятью: Взгляд изнутри

Время на прочтение26 мин
Количество просмотров73K

Доброго времени суток!
Хочу представить вашему вниманию перевод статьи Джонатана Барлетта (Jonathan Bartlett), который является техническим директором в компании New Medio. Статья была опубликована 16 ноября 2004 года на сайте ibm.com и посвящена методам управления памятью. Хотя возраст статьи достаточно высок (по меркам IT), информация в ней является фундаментальной и описывает подходы к распределению памяти, их сильные и слабые стороны. Всё это сопровождается «самопальными» реализациями, для лучшего усвоения материала.

Аннотация от автора
Решения, компромиссы и реализации динамического распределения памяти
Получите представление о методах управления памятью, которые доступны Linux разработчикам. Данные методы не ограничиваются языком C, они также применяются и в других языках программирования. Эта статья даёт подробное описание как происходит управление памятью, на примерах ручного подхода (manually), полуавтоматического (semi-manually) с использованием подсчёта ссылок (referencing count) или пула (pooling) и автоматического при помощи сборщика мусора (garbage collection).

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

C/C++ из Python (ctypes)

Время на прочтение6 мин
Количество просмотров65K
main

Про то как вызывать Python из C написал в прошлой статье, теперь поговорим как делать наоборот и вызывать C/C++ из Python3. Раз начал писать об этом, то раскроем всю тему до конца. Тем более, что ни чего сложного здесь нет тоже.

Читать дальше →
Всего голосов 27: ↑25 и ↓2+23
Комментарии44

Как научить операционную систему «выбрасывать» С++ исключения из системных вызовов и как это можно применять

Время на прочтение10 мин
Количество просмотров11K

Эта статья написана по мотивам дипломной работы, выполненной в ВУЗе. Мне показалось, что она могла бы быть интересна и другим людям, поэтому выкладываю пересказ. В этой работе я кратко рассмотрю, как вообще работают исключения в С++, опишу, как я добавил их поддержку в простую ОС, написанную для преподавания АКОСа, какой способ передачи исключений из ядра в программы я написал. А в конце посмотрим, в каких ещё случаях ОС может бросать пользователям С++ исключения.

Читать далее
Всего голосов 24: ↑24 и ↓0+24
Комментарии17

Как оплатить VPN без Visa и Mastercard

Время на прочтение2 мин
Количество просмотров78K

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

Читать далее
Всего голосов 23: ↑17 и ↓6+21
Комментарии124

Как обойти блокировку TikTok в России

Время на прочтение4 мин
Количество просмотров364K

6 марта 2022 TikTok запретил вести прямые трансляции и загружать новый контент пользователям из России. В этой статье мы рассмотрим способы обойти запрет на загрузку нового контента в ТикТок пользователей РФ.

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

Читать далее
Всего голосов 53: ↑23 и ↓30+1
Комментарии62

Квинтовый музыкальный строй

Время на прочтение7 мин
Количество просмотров7.1K

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

Как известно, двенадцать ступеней древнего китайского строя образованы последовательностью 11 квинтовых шагов. При этом все нечетные ступени, включая первую, считаются мужскими (Ян), а все четные ступени, включая двенадцатую, считаются женскими (Инь). Стартовой ступенью строя в рассматриваемой модели выбрана ступень A первой октавы. В таблице даны результаты расчета частотных значений 12 люй при стандарте частоты ступени Ля = 440 Гц. Частотные значения всех ступеней приведены в границах первой октавы. 

Читать далее
Всего голосов 11: ↑7 и ↓4+3
Комментарии53

Топ 20 ошибок при работе с многопоточностью на С++ и способы избежать их

Время на прочтение21 мин
Количество просмотров79K
Привет, Хабр! Предлагаю вашему вниманию перевод статьи «Top 20 C++ multithreading mistakes and how to avoid them» автора Deb Haldar.


Сцена из фильма «Петля времени» (2012)

Многопоточность— одна из наиболее сложных областей в программировании, особенно в C++. За годы разработки я совершил множество ошибок. К счастью, большинство из них были выявлены на код ревью и тестировании. Тем не менее, некоторые каким-то образом проскакивали на продуктив, и нам приходилось править эксплуатируемые системы, что всегда дорого.

В этой статье я попытался категоризировать все известные мне ошибки с возможными решениями. Если вам известны еще какие-то подводные камни, либо имеете предложения по решению описанных ошибок– пожалуйста, оставляйте свои комментарии под статьей.
Читать дальше →
Всего голосов 62: ↑60 и ↓2+58
Комментарии94

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность