Search
Write a publication
Pull to refresh
60
0
Виталий @vt4a2h

Principal Software Engineer

Send message

Lock-free структуры данных. Внутри. Схемы управления памятью

Reading time28 min
Views53K

Как я упоминал в своих предыдущих заметках, основными трудностями при реализации lock-free структур данных являются ABA-проблема и удаление памяти. Я разделяю эти две проблемы, хоть они и связаны: дело в том, что существуют алгоритмы, решающие только одну из них.
В этой статье я дам обзор известных мне методов безопасного удаления памяти (safe memory reclamation) для lock-free контейнеров. Демонстрировать применение того или иного метода я буду на классической lock-free очереди Майкла-Скотта [MS98].

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

Преимущества C++ как первого языка для обучения программированию

Reading time7 min
Views221K
Всем доброго времени суток!

Это статья о том, почему же все-таки стоит выбрать C++ в качестве первого языка программирования для обучения студентов, и немного о проблемах преподавания в ВУЗах. Часть суждения, касающегося процесса обучения, основывается на личном опыте преподавания (три года, во время учёбы в аспирантуре), а также на общении с преподавателями и студентами.
Рассматриваются преимущества языка программирования C++ именно для обучения и с точки зрения лучшего понимания основных концепций. Остальные кандидаты на роль первого языка (Pascal/Python/C#/Java) не рассматриваются, дабы не разжигать холивар. Еще раз отмечу: не для промышленной разработки и не с точки зрения такого субъективного критерия, как удобство.
Написано под впечатлением откровенно рекламного поста «Delphi XE5 как основа для обучения программированию» (на момент написания, доступна только версия «от гугла»).

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

Графы для самых маленьких: Ford & Bellman или как понять, что ты попал в бесконечно далекое прошлое

Reading time3 min
Views60K
В предыдущих частях цикла мы рассмотрели алгоритмы DFS и BFS, позволяющие найти путь в графе и обладающие рядом других интересных свойств. Но в жизни очень часто оказывается, что гораздо проще выглядит модель задачи в виде графа с неодинаковыми длинами ребер. Поиском кратчайшего пути во взвешенном графе мы и займемся под катом.
Читать дальше →

QtCreator: Qt кросс-компиляция из linux 64 в linux 32, win32, win64 и Mac OS X; upx, usb, dmg, etc

Reading time14 min
Views83K


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

Интеграция C++ с QML

Reading time8 min
Views68K

Вступление


Язык QML для Qt Quick позволяет c легкостью делать многие вещи, особенно что касается анимированных пользовательских интерфейсов. Однако, не всё возможно сделать или не всё подходит под реализацию в QML, в частности:

  • получение доступа к функциональности извне окружения QML/Javascript
  • реализация критических по производительности функций, где требуется нативный код для повышения эффективности
  • большой или сложный не декларативный код, который было бы утомительно реализовывать в JavaScript

Как Вы увидите впоследствии, Qt легко отображает C++ код для QML. В этой статье мы создадим маленькое, но функциональное приложение, делающее это. Пример написан для Qt 5 и использует компоненты Qt Quick, поэтому для запуска примера Вам необходим как минимум Qt 5.1.0.
Подробней

Файл, который нужно закоммитить перед уходом с работы

Reading time2 min
Views113K
Немножко пятничного настроения в субботу. Я думаю, все видели этот код:

image

Но Aras Pranckevičius пошел еще дальше. Как написать код, который не так просто обнаружить?
И если вначале идут простые примеры, то дальше начинается…
Осторожно, чистое зло

Lock-free структуры данных. 1 — Начало

Reading time12 min
Views153K

Я надеюсь, что эта статья станет началом цикла заметок о lock-free структурах данных. Я хочу поделиться с хабрасообществом своим опытом, наблюдениям и размышлениями о том, что такое lock-free структуры данных, как их реализовывать, подходят ли концепции контейнеров стандартной библиотеки STL к lock-free контейнерам, и когда стоит (и стоит ли вообще) применять lock-free структуры данных.

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

Model-View в QML. Часть вторая: Кастомные представления

Reading time11 min
Views34K
Не всегда готовые представления идеально подходят. Рассмотрим компоненты, которые позволяют создать полностью кастомизированное представление и добиться большой гибкости в построении интерфейса. И еще от меня небольшой бонус для терпеливых читателей :)

Model-View в QML:
  1. Model-View в QML. Часть нулевая, вводная
  2. Model-View в QML. Часть первая: Представления на основе готовых компонентов
  3. Model-View в QML. Часть вторая: Кастомные представления
  4. Model-View в QML. Часть третья: Модели в QML и JavaScript
  5. Model-View в QML. Часть четвертая: C++-модели

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

«Зачем обновлять GCC компилятор?» или «Производительность GCC компилятора на Intel Atom от версии к версии»

Reading time3 min
Views16K

Давайте попытаемся понять, что нового сделано в GCC компиляторе для процессоров архитектуры Intel Atom и как это влияет на производительность и размер кода известного бенчмарка EEMBC CoreMark.
Выше приведен график, отображающий производительность CoreMark, откомпилированного с пиковым и базовым набором опций разными версиями GCC относительно производительности базового набора опций для GCC версии 4.4.6 (выше – лучше).
За счет чего получен такой прирост?

Стриминг в Rails 4

Reading time6 min
Views19K


Что такое стриминг?


Стриминг крутился около Rails начиная с версии 3.2, но он был ограничен исключительно стримингом шаблонов. Rails 4 же вышел с более зрелым функционалом стриминга в реальном времени. По сути это значит что Rails сейчас способен нативно обрабатывать I/O объекты и посылать данные клиенту в риалтайме.

Streaming и Live — два отдельных модуля, реализованных внутри ActionController'а. Streaming включен по умолчанию, в то время как Live должен быть явно добавлен непосредственно в контроллере.

Основной api стриминга использует класс Fiber (доступен с версии ruby 1.9.2). Файберы предоставляют инструментарий для потоко-подобного параллелизма в ruby. Fiber дает возможность потокам приостанавливаться и возобновлять работу по желанию программиста, а не быть по сути упреждающими.
Читать дальше →

Некоторые рекомендации по организации автонумерации при написании научных статей и диссертаций средствами Microsoft Word

Reading time11 min
Views137K
– А ларчик просто открывался.
И.А. Крылов


О чём эта статья

В настоящей работе описываются способы автоматической организации нумерованных объектов при написании статей, рефератов, докладов, диссертаций и пр. При написании подобного рода материалов неизбежно возникает необходимость нумеровать те или иные объекты, например, формулы или пункты в списке используемой литературы. При этом многие авторы пользуются при написании текстовым редактором Microsoft Word.
В случае тривиальной «ручной» организации, при которой каждый номер прописывается непосредственно руками (обычно, в самом конце, когда текст полностью готов), автор работы может ошибиться в каком-либо номере, и все дальнейшие номера окажутся неверными. Более того, после рецензии те или иные части работы могут быть вставлены в текст или убраны из него. Последнее, зачастую, требует полной перенумерации объектов в документе. Таким образом, цель настоящей статьи состоит в доведении до читателя способов автоматической организации нумерации объектов, позволяющих избежать вышеописанные ситуации.
Предупреждение: в данную статью вошли лишь те приёмы, с которыми автор столкнулся при написании кандидатской диссертации. Описываемые способы организации нумерованных объектов не претендуют на единственность, полноту и оптимальность. Имеются другие интересные способы, например, в TeX. Несомненно, читатель сможет найти и иные способы достижения сформулированной цели. В любом случае, ознакомиться с подходами автора (хотя бы на досуге) следует любому заинтересованному читателю.

Основы работы с полями MS Word


В данном разделе описываются основные поля текстового редактора MS Word, необходимые для организации списков и ссылок на них, а также методы работы с ними.
Поле MS Word – это объект, принимающий то или иное значение в зависимости от ключевых слов и параметров этого поля. Для вставки поля в текст необходимо нажать сочетание клавиш Ctrl + F9 или выбрать соответствующее меню на ленте.
image
После вставки поля в тексте появятся серые фигурные скобки.
image

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

Не бойтесь велосипедов. Или еще один Grand Central Dispatch (GCD) на C++11

Reading time8 min
Views22K

ИМХО (Имею Мнение Хрен Оспоришь)


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

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

Размышления о программировании

Reading time14 min
Views35K

От Аристотеля к Витгенштейну


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

Предисловие

Развитие информатики как науки представляется рекой, которая рождается в далеком прошлом (Евклид, III век до н.э.; Вавилон, XIX век до н.э.; а возможно и раньше) из едва заметных ручейков первых алгоритмических вычислений. Неспешно двигаясь по истории, ручейки объединяются в реку, которая, неся свои воды через века, вбирает в себя притоки из смежных дисциплин, накапливает величественность и мощь и, наконец, срывается ниагарским водопадом из второго в третье тысячелетие, превращаясь в стремительный бурлящий поток, который захватывает и несет с собой из прошлого в будущее миллионы людей.



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

Тройка полезных монад

Reading time4 min
Views48K
Внимание: перед тем как читать текст ниже, вы уже должны иметь представление о том, что такое монады. Если это не так, то прежде прочитайте вот этот пост!

Перед нами функция half:


И мы можем применить её несколько раз:
half . half $ 8
=> 2


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


half x = (x `div` 2, "Я только что располовинил  " ++ (show x) ++ "!")


Что ж, отлично. Но что будет если вы теперь захотите применить half несколько раз?
half . half $ 8


Вот то, что мы хотели бы, чтобы происходило:


Спойлер: автоматически так не сделается. Придётся всё расписывать ручками:
finalValue = (val2, log1 ++ log2)
    where (val1, log1) = half 8
          (val2, log2) = half val1


Фу! Это ни капли не похоже на лаконичное
half . half $ 8


А что, если у вас есть ещё функции, имеющие лог? Напрашивается такая схема: для каждой функции, возвращающей вместе со значением лог, мы бы хотели объединять эти логи. Это побочный эффект, а никто не силён в побочных эффектах так, как монады!
Читать дальше →

Model-View в QML. Часть первая: Представления на основе готовых компонентов

Reading time10 min
Views66K
В этой части моего цикла статей про Model-View в QML мы начнем рассматривать представления и начнем с тех, которые делаются на основе готовых компонентов.

Model-View в QML:
  1. Model-View в QML. Часть нулевая, вводная
  2. Model-View в QML. Часть первая: Представления на основе готовых компонентов
  3. Model-View в QML. Часть вторая: Кастомные представления
  4. Model-View в QML. Часть третья: Модели в QML и JavaScript
  5. Model-View в QML. Часть четвертая: C++-модели

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

Обзор новых возможностей в Qt Quick

Reading time4 min
Views21K
С выходом Qt 5.1 было добавлено много нового функционала и в Qt Quick, краткий обзор которого будет представлен в этой статье. Большинство функций, которые раньше были частью Desktop Components Project, теперь официально являются частью Qt Quick. Наиболее популярной является QtQuick.Controls, но так же был добавлен ряд смежных функций, о которых я и хотел бы рассказать в этой статье…
Читать дальше →

CoffeeScript в примерах. Валидация

Reading time7 min
Views5.3K
Пример программирования валидации на CoffeeScript.

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

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

Грядущие вкусняшки в Qt Quick

Reading time2 min
Views23K
В блоге Qt появился обзор, предстоящих нововведений в Qt Quck в грядущей 5.1. Если вкратце, они добавили функционал виджетов, аналог QMainWindow и дали возможность использовать QML в виджет-проектах, правда в несколько усеченном варианте. Таким образом Qt Quick готов для разработки приложений и на десктопах.
Читать дальше →

Qt Graphics View Framework — темная сторона. Часть 2

Reading time5 min
Views14K
Начав свой путь, мы не останавливаемся и продолжаем изучать темные стороны документации. Где-то они могут быть характерны для всего Qt, а где-то присущи только Graphics View. Но так или иначе встреча с ними не всегда проходит безболезненно.
Читать дальше →

Qt Graphics Framework — темная сторона. Часть 1

Reading time4 min
Views31K
В первой статье я рассказывал как мог о достоинствах фреймворка. Сегодня я попытаюсь рассказать о его темной стороне, плохо освещенной в документации.

Дело №1


Мы хотим изменять размер сцены и объектов в ней согласно размеру отображаемого окна. В доке сказано:«QGraphicsView takes ownership of the viewport widget». Ну что-ж, создадим простейшим проект и напишем следующее:
Читать дальше →

Information

Rating
Does not participate
Location
Норвегия
Registered
Activity