Search
Write a publication
Pull to refresh
26
0
Mikhail Kulincev @kulinich

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

Send message

GC в C++: преодоление соблазна

Reading time4 min
Views8.9K
Недавно появилась заметка о простой и эффективной «ручной» сборке мусора в С++. Вполне допускаю, что локальная сборка мусора внутри какого-то сложного класса (где идёт активная низкоуровневая работа с указателями) может быть оправдана. Но в масштабах большой программы, существует более надёжный и простой метод избавления от утечек памяти. Не претендуя на «метод на все случаи жизни», очень надеюсь, что он сделает проще жизнь хотя бы некоторым из читателей.

Суть метода предельно проста: если каждый объект является переменной какой-либо области видимости или простым («стековым») членом другого объекта, то даже при аварийном закрытии программы от необработанного исключения, всегда будет происходить корректная очистка. Задача заключается в том, чтобы свести всё многообразие динамических сценариев к этой схеме.
Вот отсюда поподробнее...

Обзор систем сборок для Raspberry Pi

Reading time9 min
Views48K
В прошлом мой выбор пал на OpenEmbedded (OE) и по заслугам, она одна из лучших систем сборок. К выбору на тот момент не подходил осознанно и захотел исправить это, поэтому решил посмотреть на текущие решения.

Мысль бы не пришла в голову, если под руками не оказалась плата Raspberry Pi (RPi), популярность которой зашкаливает — это означает одно, что попробовать новые системы сборки должно быть как никогда просто.

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

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

C/C++ plugin for IntelliJ IDEA as OpenSource

Reading time1 min
Views25K
Здравствуйте.

Сегодня, после двух недель ожидания, Advanced Tools опубликовали исходники плагина, если кто не знает, этот плагин дает поддержку C/C++ для IDE которые базируются на IntelliJ платформе(web ide, idea, etc)

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

10 девайсов, которые вы можете проапгрейдить, немного поковырявшись с электроникой

Reading time4 min
Views180K

Правило №1 в DIY: никогда не довольствуйтесь тем, что вам дано. Вы можете проапгрейдить или улучшить все что угодно обладая скромными познаниями и приложив немного усилий, особенно если вы немного знакомы с электроникой. Под катом 10 домашних предметов, которые вы можете круто прокачать, используя капельку припоя и ряд DIY ноу-хау.
Читать дальше →

Дистанционное обучение с помощью мобильных устройств

Reading time4 min
Views104K
Еще 10—20 лет назад полноценное дистанционное обучение было практически невозможным. Необходимость переезда в другой город или даже страну являлась, наверное, одной из наиболее частых причин, почему предпочтение отдавалось местным вузам, вместо того чтобы поступать в университеты своей мечты. Да, существует заочное образование, но мы прекрасно понимаем, что в большинстве случаев данная форма образования — всего лишь для галочки. К счастью, в настоящее время есть возможность учиться, было бы желание. Для тех, у кого с желанием все в порядке, прошу под кат.

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

Pocketsphinx. Распознавание речи и голосовое управление в Linux

Reading time11 min
Views126K
— Всё в порядке, Лёня?
Динамики отрегулированы на максимум, я морщусь, отвечаю:
— Да. Тише звук.
— Звук — тише, — соглашается «Виндоус-Хоум», — тише, тише…
— Хватит, Вика
С.Лукьяненко, «Лабиринт отражений»

Введение


В 1997-ом году Лукьяненко пророчил для десктопа сочетание CLI и голосового управления. Однако сейчас голосовое управление — достаточно узкая ниша.
Голосовое управление — взаимодействие с устройством при помощи звуковых команд. Не путайте это понятие с распознаванием речи. Для голосового управления достаточно, чтобы устройство реагировало на единственную нужную команду (ведь ваша собака не может работать машинисткой?). Распознавание речи — гораздо более глобальная проблема: в этом случае устройство должно преобразовывать в текстовый формат все слова, произнесенные вами. Как легко догадаться, распознавание речи на данный момент реализовано поверхностно относительно человеческих возможностей.
Функционал, рассмотренный в статье, может быть применен, к примеру, для организации модного сейчас «умного дома» или просто управления компьютером. Честно говоря, для описания управления компьютером хватило бы пары абзацев, но я попытаюсь показать вам основы работы с CMU Sphinx.
Кстати, процентов 70 описанного здесь подойдет и пользователям Windows.
Научим Linux слушаться?

Основы использования бранчинга для параллельной разработки

Reading time9 min
Views37K
Вступление

Как справедливо заметил Fred Brooks, серебряной пули, способной поразить зверя разработки программного обеспечения, не существует. Пока возникают новые требования, идеи и находятся новые баги, программы живут и изменяются. Путь, который проходит код от версии к версии, может быть крайне сложен и извилист. К его созданию причастно много людей: разработчики, тестировщики, бизнес-аналитики, заказчики и т.п. Несмотря на то, что существует много разных видов разработки – аутсорсинг, продуктовая разработка, open-source и т.п., проблемы, стоящие перед командой, остаются примерно одинаковыми. Программное обеспечение – вещь сложная, потребитель хочет получить его как можно быстрее (и дешевле). Качество при этом должно быть приемлемым. Перед командой разработки стоит серьезная задача – наладить эффективное взаимодействие. Одним из самых главных средств коллаборации внутри команды разработчиков является сам код, который они пишут.

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

Иерархия принципов проектирования, или самые важные слова для инженеров

Reading time5 min
Views47K
В этой короткой заметке я хотел бы систематизировать (а именно, расположить в иерархию) многие популярные принципы проектирования программных приложений (test-driven development, ООП, SOLID и т. д.), а также рассмотреть следствия из этой иерархии.

В частности, такая иерархия (я надеюсь) позволит лучше расставлять приоритеты в разработке и профессиональном росте, лучше понимать старые технологии и быстрее изучать новые. При появлении новой парадигмы разработки (a la test-driven development) вы сможете быстро включить ее в эту иерархию и, следовательно, быстрее понять, из каких принципов исходили создатели парадигмы и как правильно ее использовать. Новичкам в программировании статья может быть полезна как обзор существующих принципов.

И в качестве самого базового я полагаю разумным считать принцип «управления сложностью/минимизации технической сложности» МакКоннела. А самыми важными срествами минимизации сложности являются модульность и абстракция.
Читать дальше →

Сколько-сколько? Я бы это сделал за Х/10 рублей!

Reading time3 min
Views111K
Вчера выдалась свободная минутка и я присел почитать Хабру. Одна из первых статей на которую наткнулся “Наш ответ 3doodler`у. Собран за 20 минут”. И вот читаю я её, видео смотрю, и чувствую что у меня дежавю. Причём такое нехорошее. Поднимающее волну возмущения. Мне некомфортно.
Да что ж такое-то?

Как стать ведущим разработчиком. Часть 1

Reading time8 min
Views142K
Это перевод статьи, написанной Джоном Оллспоу, который на данный момент является старшим вице-президентом технического отдела в Etsy.

Продолжение перевода здесь

В нашей сфере деятельности нам доступны огромные объёмы знаний, в особенности тех, которые позволяют разработчику стать эффективным. Но почему-то, несмотря на существование множества книг о специфических задачах и обязанностях менеджеров в нетехнических областях, я практически не вижу новых книг или статей о том, как стать хорошим ведущим разработчиком. Замечательным исключением, конечно, являются статьи Кейт Maцудайры [от переводчика: на фотографии, кстати, именно она], немало написавшей о культурных составляющих инженерии.

Но в то же время, все мои знакомые преуспевающие разработчики помнят своих наставников, которые научили их тому, что значит быть „ведущим“.
Читать дальше →

Релиз GitLab 4.0 и GitLab CI

Reading time3 min
Views43K
Конец 2012 года прошел в суматохе, и каким-то образом я упустил из внимания две важные новости: в декабре вышел GitLab 4.0, а на середину ноября пришелся релиз GitLab Continuous Integration Server.

GitLab — это замечательное FOSS решение для хостинга git-репозиториев внутри закрытой инфраструктуры. Функционал во многом аналогичен GitHub, в частности доступны базовые возможности администрирования и разделения полномочий между пользователями, issue трекер, вики, code review и мердж реквесты (аналог пулл-реквестов на GitHub). И внеочередной плюс теперь, как по мне — это интеграция с GitLab CIS.

GitLab CIS — если GitLab послужит Вам заменой GitHub, то GitLab CIS призван стать заменой Travis CI. Набор фич соответствующий: запуск по git push, отдельные билды под бранч, интеграция с любыми git-репозиториями и бейджик со статусом текущего билда.

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

Что примечательно, работу ведут и курируют скромные украинские парни Дмитрий Запорожец и Валерий Сизов.
Читать дальше →

С++ библиотека от Google с контейнерами map и set на B-деревьях

Reading time2 min
Views30K
Один из сотрудников Google в 20% свободного времени разработал и выложил под свободной лицензией библиотеку cpp-btree (С++ B-Tree), которая содержит контейнеры, работающие как map, set, multimap и multiset из стандартной библиотеки шаблонов (STL).

Разница в том, что контейнеры в STL реализованы на красно-чёрных деревьях, а аналогичные контейнеры cpp-btree — на B-деревьях. При этом в определённых ситуациях достигается существенный выигрыш в использовании памяти (на элементах маленького размера) и в производительности (на больших размерах контейнера).

B-деревья известны как инструмент для работы с дисковой памятью: базами данных и файловой системой. Но те же свойства, которые дают выигрыш там, позволяют эффективнее использовать и оперативную память. Каждый узел красно-чёрного дерева содержит один элемент, требует три указателя плюс по биту информации на элемент для сбалансированности. Для сравнения, контейнеры на B-деревьях хранят несколько элементов на узел, поэтому уменьшают оверхед указателей и экономят значительное количество памяти.
Читать дальше →

NooLite-2, или умный дом для чайников

Reading time16 min
Views157K
После успешной проверки работы системы, я замахнулся на замену всех выключателей в доме на пульты управления, и построение «умного дома», хотя бы в части освещения.
image
В итоге получилась система, сочетающая включение/выключение света как с помощью выключателей, так и через интернет — с помощью кнопок на веб-страничке.
Как это получилось — читайте под катом.
Читать дальше →

Умный дом, как я до такого докатился. Часть 2-я

Reading time5 min
Views289K

В первой части я рассказал о причинах, побудивших меня заняться построением своего “умного дома”, и об используемом “железе”.
Но “железо”, само по себе, умным быть не может, главное это “софт”. Вот об этой стороне своего проекта я и хочу рассказать в этой части. Банальное управление освещением с пульта, конечно, выглядит круто в глазах непосвященной публики, но “ума” тут никакого.
Так что же такого умного можно сделать? И, главное, как?
Читать дальше →

Профилирование уже запущенных программ

Reading time6 min
Views36K
Все мы пользуемся профайлерами. Традиционная схема работы с ними такова, что приходится изначально запускать программу «под профайлером» а затем, после окончания ее работы, анализировать сырой дамп с помощью дополнительных утилит.
А что делать если мы не имея root'а хотим запрофилировать уже работающую программу, которая долго работала «как надо», а сейчас что-то пошло не так. И хотим это сделать быстро. Знакомая ситуация?
Тогда рассмотрим наиболее популярные профайлеры и принципы их работы. А затем профайлер, который решает именно указанную задачу.

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

Разработка софта на Nexus 7

Reading time4 min
Views32K
В недавнем посте Планшет — не роскошь зашла речь про использование планшетов под управлением Android не только для развлечений, но и в рабочих целях. Хочу продолжить эту тему и рассказать о том, как я использую свой Nexus 7 во время долгих поездок и программирую на нём приложения под этот самый Android.

Вот список задач, которые должен решать планшет для меня во время данного времяпрепровождения:

  • редактирование исходного кода с подсветкой синтаксиса для языков Java, XML и C;
  • компиляция простейшего C кода в нативные для Android бинарики (то есть использовать Bionic вместо libc и т.д.);
  • сборка Java проекта в APK приложение;
  • git, ssh, привычные консольные GNU тулзы во всём их многообразии.


И вот что у меня получилось.

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

Вебинары по QML и QtQuick: Qt Mobility и работа с сенсорами

Reading time1 min
Views5.3K
В нашей серии вебинаров по разработке на Qt Quick и QML мы уже довольно много говорили о разработке приложений в целом. Сегодня же мы расскажем про Qt Mobility — набор API и фреймворков, ориентированный на разработку приложений для мобильных платформ.

С помощью Qt Mobility можно задействовать такие технологии и возможности, свойственные в основном мобильным устройствам, как геопозиционирование, менеджмент и мониторинг состояния сетевых соединений, доступ к камерам и микрофону, работа с мультимедийными возможностями мобильного устройства, получение информации о статусе мобильного девайса (заряд аккумулятора и режим питания, доступность сети, текущий звуковой профиль и т.д.). Также среди возможностей Qt Mobility можно выделить работу с контактами, сообщениями электронной почты и SMS, календарями, галереями и другими стандартными мобильными приложениями. Все эти возможности Qt Mobility доступны в QML через плагины QtMobility QML.

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

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

10 причин, по которым Вы бросите свою работу в 2013 году

Reading time9 min
Views809K
imageЭто перевод нашумевшей статьи с TechCrunch от Джеймса Альтушера — инвестора, программиста, автора статей и немного предпринимателя. Его последние книги: Я был слеп, но теперь я вижу и 40 альтернатив колледжу. Читайте его в Twitter @jaltucher.

Люди читают TechCrunch потому, что они хотят что-то создать, они не желают следовать приказам всю жизнь и хотят финансовой свободы. Давайте начистоту. Эти три пункта кажутся притягательными. Да благословит Вас Бог. Надеюсь, что когда Вы их обретете, Вы сможете сохранить их. Большинству людей (например, МНЕ), нужно просто немного покататься на американских горках, потому что мы тупые. Но некоторые люди умные.
Читать дальше →

Как два программиста хлеб пекли

Reading time5 min
Views263K


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

Итак, представим себе, что есть два программиста. Один из них умный, прочёл кучу статей на Хабре, знает каталог GoF наизусть, а Фаулера — в лицо. Другой же делает всё просто. Первого будут звать, например, Борис Н., а второго — Маркус П. Само собой, имена вымышленные, и все совпадения с реальными людьми и программистами случайны.

Итак, к ним обоим приходит проектный менеджер (если в вашей вселенной PM не ходит сам к программистам, назовите его как-то иначе, например BA или lead, сути это не изменит) и говорит:
— Ребята, нам нужно, чтобы делался хлеб.

Именно так, «делался», без уточнения способа производства.

Как же поступят наши программисты?
Читать дальше →

Светодиодная лента в качестве освещения комнаты

Reading time15 min
Views1.3M
Изначально для основного освещения одной из комнат, где шёл капитальный ремонт, планировалась обычная люстра. Но недавно мне на глаза попалась суперяркая светодиодная лента Ultra 5000 со светодиодами smd 5630 торговой марки Arlight. Решение было принято быстро, окончательно и бесповоротно — хочу такую ленту в качестве основного света в комнате.



О реализации светодиодного периметра освещения далее

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity