Как стать автором
Обновить
21
0
Anthony Shoumikhin @shoumikhin

Software Engineer

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

Работа с сокетами в Qt

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

Введение


image
Как-то несколько лет назад, на одном из форумов, я нашел такую замечательную фразу — «Каждый уважающий себя программист в жизни должен написать свой чат-клиент». Тогда мои знания не позволяли сделать это. Я просто улыбнулся и прошел мимо этой фразы. Но вот совсем недавно я столкнулся именно с данной проблемой — нужно было написать свой чат. Ну а так как последнее время мой интерес был направлен на изучение и разработку Qt-приложений, на чем будет сделан он, решилось само собой.
Читать дальше →
Всего голосов 30: ↑27 и ↓3+24
Комментарии8

Нативные интерфейсы в Qt

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

Эта статья посвящена программированию GUI на базе фреймворка Qt от Nokia. Мы рассмотрим способы разработки интерфейсов для нативного отображения на платформах Windows, Linux и Mac OS X.

Презентацию[1] вёл Йенс Бач-Вииг (Jens Bache-Wiig) — разработчик Qt (с 2005 года), занимающийся интерфейсами (look and feel).

От переводчика: далее, поскольку это слайд-шоу, по мере возможностей буду давать пояснения к слайдам. Какие то, на мой взгляд менее важные моменты будут опускаться, что-то будет рассмотрено более подробно.

Итак, приступим. Каждое графическое окружение имеет свой свод правил (User Interface Guidelines, UIG) по созданию интерфейсов, предназначенных для этих окружений. Из основных можно отметить такие руководства как Windows User Experience Interaction Guideline, Apple Human Interface Guideline, KDE User Interface Guideline и GNOME HID. Каждое из этих руководств «определяет положение кнопочек и рюшечек» конкретного окружения. Фреймворк Qt, в свою очередь, осуществляет поддержку всех этих руководств, предоставляя разработчику возможность создавать программы с использованием виджетов, «подстраивающихся» под окружение.

Читать дальше →
Всего голосов 116: ↑112 и ↓4+108
Комментарии9

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

Время на прочтение11 мин
Количество просмотров98K
В своей работе очень часто сталкиваюсь с тем, приходится делать краткие обзоры ИТ технологий для начальника, коллег и др. Данная информация обычно оформляется в статью и отвечает на следующие вопросы:
— почему «это» лучше чем «то» (специально написал обезличено, так как такой вопрос задают очень часто и на различные тематики связанные с ИТ и не только);
— в чем достоинства и недостатки при переходе на «то» или «это»;
— как лучше сделать чтобы … и др.

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

Итак приступим. Вопрос с которым ко мне обратились был следующим. «Почему облачные вычисления лучше, чем классическая схема построения сетевой инфраструктуры, какова основная причина того, многие организации „перебираются в облака“?». Далее мои мысли по этому поводу.
Читать дальше →
Всего голосов 48: ↑41 и ↓7+34
Комментарии23

Алгоритм Дейкстры. Поиск оптимальных маршрутов на графе

Время на прочтение3 мин
Количество просмотров434K
Из многих алгоритмов поиска кратчайших маршрутов на графе, на Хабре я нашел только описание алгоритма Флойда-Уоршалла. Этот алгоритм находит кратчайшие пути между всеми вершинами графа и их длину. В этой статье я опишу принцип работы алгоритма Дейкстры, который находит оптимальные маршруты и их длину между одной конкретной вершиной (источником) и всеми остальными вершинами графа. Недостаток данного алгоритма в том, что он будет некорректно работать если граф имеет дуги отрицательного веса.

Для примера возьмем такой ориентированный граф G:

image

Читать дальше →
Всего голосов 91: ↑62 и ↓29+33
Комментарии31

Избранное Хабра в PDF

Время на прочтение3 мин
Количество просмотров17K
Всех с наступившими!

image

Так как я люблю все упорядочивать и каталогизировать, давно вертелась мысль завернуть избранные топики с хабра в PDF и отсортировать по датам.
Собственно выделилось немного свободного времени в праздники, решил задуманное осуществить и поделиться с хабром

UPD:
— Исправлена ошибка «too large on page» (подробнее на github) Спасибо Bifidokk и StreetAngel
— Авторы топиков сделаны ссылкой
— Добавлена возможность сохранять избранное только из указанных блогов

Читать дальше →
Всего голосов 201: ↑192 и ↓9+183
Комментарии113

Бикубическая интерполяция, теория и практическая реализация

Время на прочтение7 мин
Количество просмотров44K
Возникла задача визуализировать результаты некоторых замеров на 2-мерной карте, были известны результаты в узловых точках на равномерной сетке, соответственно, задача свелась к интерполяции полученных данных. Основное требование было — качество полученной картинки и минимальное количество артефактов интерполяции, поэтому выбор пал на бикубическую интерполяцию. Статьи в Вики мне показались суховатыми (по крайней мере для человека, который математикой не занимался со школьной скамьи), но там же нашлась ссылка на потрясающую статью, детально описывающую алгоритм. Здесь мы рассмотрим практическое применение данного алгоритма и разберем статью.
Далее
Всего голосов 79: ↑68 и ↓11+57
Комментарии34

Программирование молекулярной динамики

Время на прочтение3 мин
Количество просмотров24K
Доброе время суток хабражители и хабражительницы. Сегодня хотел бы поделиться с вами своими попытками в программировании физических процессов. А конкретнее – попытке углубиться до молекулярных масштабов. Тема для разговора под хабракатом – молекулярная динамика.
Читать дальше →
Всего голосов 73: ↑72 и ↓1+71
Комментарии33

Генетические алгоритмы в MATLAB

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

Суть генетических алгоритмов


Данный топик посвящен решению оптимизационных задач при помощи генетических алгоритмов в среде MATLAB. Заранее приношу извинения за большой объем данных: он обусловлен тем, что при написании топика основной поставленной задачей было подробно раскрыть каждый из настраиваемых в MATLAB параметров работы генетических алгоритмов.

Генетические алгоритмы – это метод решения оптимизационных задач, основанный на биологических принципах естественного отбора и эволюции. Генетический алгоритм повторяет определенное количество раз процедуру модификации популяции (набора отдельных решений), добиваясь тем самым получения новых наборов решений (новых популяций). При этом на каждом шаге из популяции выбираются «родительские особи», то есть решения, совместная модификация которых (скрещивание) и приводит к формированию новой особи в следующем поколении. Генетический алгоритм использует три вида правил, на основе которых формируется новое поколение: правила отбора, скрещивания и мутации. Мутация позволяет путем внесения изменений в новое поколение избежать попадания в локальные минимумы оптимизируемой функции.

(Под катом основная часть + несколько скриншотов).
Читать дальше →
Всего голосов 64: ↑53 и ↓11+42
Комментарии19

Основы исполнения JavaScript и взаимодействие с сайтами внутри программ на Qt

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

Введение


О кроссплатформенной библиотеке Qt слышали, наверное, многие. О движке отображения веб-страниц WebKit тем более. Не так давно первое стало содержать обертку над вторым, примеры создания браузеров в 50 строчек найти не сложно. Тем не менее о том, как получать доступ к отдельным элементам веб-страницы из Qt-кода написано не много.
Читать дальше →
Всего голосов 40: ↑39 и ↓1+38
Комментарии1

Как не дать программисту написать плохой код

Время на прочтение3 мин
Количество просмотров6.5K
image
Как-то раз в одной неглупой статье один неглупый хабраюзер рассказал одну неглупую идею. Суть её была в том, что в его компании настроена система, контролирующая написанный программистами код в момент попытки добавления его в репозиторий и отклоняющая код, не проходящий по некоторым критериям. Мне идея понравилась. Я (и еще 3 человека) попросили автора развить мысль и написать статью об этом, но она так и не появилась. И я решил разобраться сам.
Читать дальше →
Всего голосов 159: ↑141 и ↓18+123
Комментарии111

Алгоритмы поиска в строке

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

Постановка задачи поиска в строке


Часто приходится сталкиваться со специфическим поиском, так называемым поиском строки (поиском в строке). Пусть есть некоторый текст Т и слово (или образ) W. Необходимо найти первое вхождение этого слова в указанном тексте. Это действие типично для любых систем обработки текстов. (Элементы массивов Т и W – символы некоторого конечного алфавита – например, {0, 1}, или {a, …, z}, или {а, …, я}.)

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

Поиск строки формально определяется следующим образом. Пусть задан массив Т из N элементов и массив W из M элементов, причем 0<M≤N. Поиск строки обнаруживает первое вхождение W в Т, результатом будем считать индекс i, указывающий на первое с начала строки (с начала массива Т) совпадение с образом (словом).
Пример. Требуется найти все вхождения образца W = abaa в текст T=abcabaabcabca.

Образец входит в текст только один раз, со сдвигом S=3, индекс i=4.
Читать дальше →
Всего голосов 86: ↑66 и ↓20+46
Комментарии38

Установка Ubuntu Desktop на LVM

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

К счастью, решить большинство этих проблем в Linux может технология LVM. Она создаёт дополнительную абстракцию — логические тома, которые видны в системе, как обычные разделы, однако реально ими не являются. Эта технология очень полезна для серверов, однако и на домашних компьютерах она приходится очень к месту. Я больше не думаю, какого размера диск выделить под систему, чтобы какой-нибудь texlive не забил бы всё место, но и чтобы лишние 5 — 10 гигабайт не пропадали просто так. LVM имеет ряд существенных преимуществ, значительно упрощающих жизнь:
  • Логические тома LVM больше не привязаны к физическому местоположению. В рамках LVM вообще не существует такого понятия, как порядок логических томов.
  • Размер логических томов можно увеличивать прямо на лету, а у отмонтированных томов можно кроме того легко уменьшать размер, не выходя из системы.
  • При необходимости можно размазать логические тома по нескольким физическим жёстким дискам, таким образом увеличив доступное место. При этом система всё так же будет видеть только один логический том, хотя размер его будет превышать доступные размеры жёстких дисков. Можно провести и обратную операцию, удалив жёсткий диск из LVM, таким образом освободив его для другого использования.
  • LVM поддерживает механизм снапшотов — мгновенных копий файловой системы тома. Это может очень пригодиться для создания бекапов.
  • Есть ещё масса плюсов, о которых можно почитать в специализированных статьях про LVM.
Читать дальше →
Всего голосов 89: ↑81 и ↓8+73
Комментарии88

Язык Mt: C для высоконагруженных серверов

Время на прочтение11 мин
Количество просмотров1.8K
Приветствую, хабровчане!

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

На данный момент я практически завершил написание инструментария — генератора парсеров, парсера C и частично C++, — который позволяет приступить к написанию транслятора, поддерживающего языковые расширения, о которых я здесь расскажу. Но перед тем, как продолжить работу, хотелось бы посоветоваться с коллегами по цеху и найти единомышленников.
Читать дальше →
Всего голосов 63: ↑58 и ↓5+53
Комментарии73

Как безопасно разрушить объект. И другие мысли

Время на прочтение5 мин
Количество просмотров12K
Недавно разглядывал вакансии одной известной конторы, задумывался над вопросам (которые, кстати, на всех их вакансиях одинаковые). И решил написать заметку по самому интересному (на мой взгляд) аспекту первого же вопроса. Может быть доберусь и до других, а пока предлагаю задуматься, надо ли делать деструкторы виртуальными?

Ответ не так уж однозначен, и чтобы заманить вас под кат скажу, что в реализации STL вы обнаружите всего несколько виртуальных деструкторов.

Каким же должен быть полный ответ на вопрос про деструкторы?
Читать дальше →
Всего голосов 67: ↑52 и ↓15+37
Комментарии51
12 ...
75

Информация

В рейтинге
Не участвует
Откуда
Seattle, Washington, США
Зарегистрирован
Активность